搭建环境
主域控制器(Domain Controller):192.168.1.6
主机名:test.example.com
辅助 DC:192.168.1.5
主机名:test1.example.com
假设我们已经有一个正常工作的域控制器。
它可以是 Samba 4 或者 Windows Server 2008 AD。
本文将指导您配置辅助域控制器而不是主域控制器。
准备工作
在 主域控制器 (test.example.com) 上,
检查kerberos配置文件的入口
[root@test ~]# cat /etc/krb5.conf [libdefaults] default_realm = EXAMPLE.COM dns_lookup_realm = true dns_lookup_kdc = true
用你的 DNS 服务器的地址更新你的 resolv.conf,即主域控制器IP
[root@test ~]# cat /etc/resolv.conf search example.com nameserver 192.168.1.6
在辅助域控制器 (test1.example.com) 上
更新 resolv.conf
[root@test1 ~]# cat /etc/resolv.conf search example.com nameserver 192.168.1.6
要准备辅助域控制器,我们还必须在当前服务器中配置 Samba 4.1.
这些是我们需要执行的步骤。
我们可以按照以下文章配置 Samba 4.1 :将Samba 4.1 配置为 Active Directory
- 下载Samba 4.1
- Configure
- make && make install
- 删除 /usr/local/samba/etc/smb.conf 文件
以 root 身份运行以下命令
[root@test1 samba-4.1.4]# samba-tool domain join example.com DC -Uadministrator --realm=example.com Finding a writeable DC for domain 'example.com' Found DC test.example.com Password for [EXAMPLEadministrator]: [Give your PDC password] NO DNS zone information found in source domain, not replicating DNS workgroup is EXAMPLE realm is example.com checking sAMAccountName Adding CN=TEST1,OU=Domain Controllers,DC=example,DC=com Adding CN=TEST1,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=example,DC=com Adding CN=NTDS Settings,CN=TEST1,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=example,DC=com Adding SPNs to CN=TEST1,OU=Domain Controllers,DC=example,DC=com Setting account password for TEST1$ Enabling account Calling bare provision No IPv6 address will be assigned ldb: module schema_load initialization failed : No such object ldb: module rootdse initialization failed : No such object ldb: module samba_dsdb initialization failed : No such object ldb: Unable to load modules for /usr/local/samba/private/sam.ldb: (null) samdb_connect failed VFS connect failed! Join failed - cleaning up checking sAMAccountName Deleted CN=TEST1,OU=Domain Controllers,DC=example,DC=com Deleted CN=NTDS Settings,CN=TEST1,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=example,DC=com Deleted CN=TEST1,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=example,DC=com ERROR(<class 'samba.provision.ProvisioningError'>): uncaught exception -ProvisioningError: Your filesystem or build does not support posix ACLs, which s3fs requires. Try the mounting the filesystem with the 'acl' option. File "/usr/local/samba/lib/python2.6/site-packages/samba/netcmd/__init__.py", line 175, in _run return self.run(*args, **kwargs) File "/usr/local/samba/lib/python2.6/site-packages/samba/netcmd/domain.py", line 552, in run machinepass=machinepass, use_ntvfs=use_ntvfs, dns_backend=dns_backend) File "/usr/local/samba/lib/python2.6/site-packages/samba/join.py", line 1172, in join_DC ctx.do_join() File "/usr/local/samba/lib/python2.6/site-packages/samba/join.py", line 1076, in do_join ctx.join_provision() File "/usr/local/samba/lib/python2.6/site-packages/samba/join.py", line 727, in join_provision use_ntvfs=ctx.use_ntvfs, dns_backend=ctx.dns_backend) File "/usr/local/samba/lib/python2.6/site-packages/samba/provision/__init__.py", line 2052, in provision raise ProvisioningError("Your filesystem or build does not support posix ACLs, which s3fs requires. Try the mounting the filesystem with the 'acl' option.")
在第一次尝试中,得到了上述错误
错误:
文件系统或者构建不支持 s3fs 所需的 posix ACL。
尝试使用 'acl' 选项挂载文件系统.”
对此有两种解决方案
解决方案1
您的文件系统不支持 acl,因此您必须使用 acl、user_xattr 参数重新挂载文件系统。
确保这两个 rpm 安装在服务器中
[root@test ~]# rpm -qa|grep libattr libattr-2.4.44-7.el6.i686 libattr-devel-2.4.44-7.el6.i686 [root@test ~]# rpm -qa|grep libacl libacl-2.2.49-6.el6.i686 libacl-devel-2.2.49-6.el6.i686
然后重新挂载文件系统( 这里,我的根分区是 /dev/mapper/VolGroup-root。
根据分区进行必要的更改)
# mount -o remount,acl,user_xattr /dev/mapper/VolGroup-root
要使设置永久性生效,请更新您的 fstab 文件
# cat /etc/fstab /dev/mapper/VolGroup-root / ext4 defaults,acl,user_xattr 1 1
注意:由于这是您在内核中进行更改的内容,因此内核必须引导以使更改生效。
重新启动系统然后重试。
解决方案2
如果是生产服务器现在不允许重启,那么使用一个另外的参数 --use-ntvfs 跳过检查。
[root@test1 ~]# samba-tool domain join example.com DC -Uadministrator --realm=example.com --use-ntvfs Finding a writeable DC for domain 'example.com' Found DC test.example.com Password for [EXAMPLEadministrator]: [Give your PDC password] NO DNS zone information found in source domain, not replicating DNS workgroup is EXAMPLE realm is example.com checking sAMAccountName Adding CN=TEST1,OU=Domain Controllers,DC=example,DC=com Adding CN=TEST1,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=example,DC=com Adding CN=NTDS Settings,CN=TEST1,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=example,DC=com Adding SPNs to CN=TEST1,OU=Domain Controllers,DC=example,DC=com Setting account password for TEST1$ Enabling account Calling bare provision No IPv6 address will be assigned Provision OK for domain DN DC=example,DC=com Starting replication Schema-DN[CN=Schema,CN=Configuration,DC=example,DC=com] objects[402/1550] linked_values[0/0] Schema-DN[CN=Schema,CN=Configuration,DC=example,DC=com] objects[804/1550] linked_values[0/0] Schema-DN[CN=Schema,CN=Configuration,DC=example,DC=com] objects[1206/1550] linked_values[0/0] Schema-DN[CN=Schema,CN=Configuration,DC=example,DC=com] objects[1550/1550] linked_values[0/0] Analyze and apply schema objects Partition[CN=Configuration,DC=example,DC=com] objects[402/1653] linked_values[0/0] Partition[CN=Configuration,DC=example,DC=com] objects[804/1653] linked_values[0/0] Partition[CN=Configuration,DC=example,DC=com] objects[1206/1653] linked_values[0/0] Partition[CN=Configuration,DC=example,DC=com] objects[1608/1653] linked_values[0/0] Partition[CN=Configuration,DC=example,DC=com] objects[1653/1653] linked_values[20/0] Replicating critical objects from the base DN of the domain Partition[DC=example,DC=com] objects[98/98] linked_values[23/0] Partition[DC=example,DC=com] objects[394/296] linked_values[23/0] Done with always replicated NC (base, config, schema) Committing SAM database Sending DsReplicateUpdateRefs for all the replicated partitions Setting isSynchronized and dsServiceName Setting up secrets database Joined domain EXAMPLE (SID S-1-5-21-2036099725-333104617-2937475635) as a DC
正如我们在上面看到的,我们已成功作为辅助控制器加入到主控制器中。
现在下一步是确保 辅助控制器的 主机名可在 DNS 上解析
On DNS server (192.168.1.6) [root@test ~]# nslookup test1.example.con Server: 192.168.1.6 Address: 192.168.1.6#53
** server can't find test1.example.con: NXDOMAIN
正如我们目前看到的,我们的 辅助控制器的主机名无法解析,因此让我们在 samba4 dns 服务器上创建一个相同的条目
[root@test ~]# vi /usr/local/samba/private/dns/example.com.zone 确保在最后一行输入下面内容 test1 IN A 192.168.1.5
保存并退出。
重新启动named服务
[root@test ~]# service named restart Stopping named: . [ OK ] Starting named: [ OK ]
现在重试解析主机名
[root@test1 ~]# nslookup test1.example.com Server: 192.168.1.6 Address: 192.168.1.6#53
Name: test1.example.com Address: 192.168.1.5
我们现在可以进入下一步了
验证 objectGUID 是否可解析为新主机名,运行以下命令
[root@test1 ~]# ldbsearch -H /usr/local/samba/private/sam.ldb '(invocationid=*)' --cross-ncs objectguid # record 1 dn: CN=NTDS Settings,CN=TEST,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=example,DC=com objectGUID: 74b975bc-c25c-4ce7-9773-fe3f6eb1b903
# record 2 dn: CN=NTDS Settings,CN=TEST1,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=example,DC=com objectGUID: 607bc2dc-0754-49e3-aa37-9be403d0cc33
这里我 test1.example.com 的 objectUID 是 record2,它是 607bc2dc-0754-49e3-aa37-9be403d0cc33
现在这个 objectUID 应该使用下面的命令解析
[root@test ~]# host -t CNAME 607bc2dc-0754-49e3-aa37-9be403d0cc33._msdcs.example.com. Host 607bc2dc-0754-49e3-aa37-9be403d0cc33._msdcs.example.com. not found: 3(NXDOMAIN)
但是由于没有相同的 DNS 条目,因此无法解析。
我们可以使用以下命令更新 DNS 记录
# samba-tool dns add IP-of-your-DNS _msdcs.samdom.example.com 607bc2dc-0754-49e3-aa37-9be403d0cc33 CNAME test1.example.com -Uadministrator
由于上面的命令抛出了错误,所以我不得不手动更新 DNS CNAME 记录。
因此,如果我们也面临同样的问题,请按照以下步骤手动更新 DNS 中的区域文件
[root@test ~]# vi /usr/local/samba/private/dns/example.com.zone 在文件的最后一行创建新条目 607bc2dc-0754-49e3-aa37-9be403d0cc33._msdcs.example.com. IN CNAME test1
[root@test ~]# service named restart Stopping named: . [ OK ] Starting named: [ OK ]
现在再次重试运行以下命令
[root@test ~]# host -t CNAME 607bc2dc-0754-49e3-aa37-9be403d0cc33._msdcs.example.com. 607bc2dc-0754-49e3-aa37-9be403d0cc33._msdcs.example.com is an alias for test1.example.com.
嗯,这解决了我们的一个问题,因此进入下一步
最后在同一服务器的 resolv.conf 中更新 SDC 的 IP,在我们的案例中为 192.168.1.5
[root@test1 ~]# cat /etc/resolv.conf search example.com nameserver 192.168.1.6 nameserver 192.168.1.5
启动Samba
我们必须按照与主控制器中使用的相同步骤来启动 samba
[root@test1 ~]# samba [root@test1 ~]# ps -ef | grep samba root 2957 1 0 11:06 ? 00:00:00 samba root 2958 2957 0 11:06 ? 00:00:00 samba root 2959 2957 0 11:06 ? 00:00:03 samba root 2960 2957 0 11:06 ? 00:00:00 samba root 2961 2957 0 11:06 ? 00:00:00 samba root 2962 2957 0 11:06 ? 00:00:01 samba root 2963 2957 0 11:06 ? 00:00:00 samba root 2964 2957 0 11:06 ? 00:00:00 samba root 2965 2958 0 11:06 ? 00:00:00 /usr/local/samba/sbin/smbd -D --option=server role check:inhibit=yes --foreground root 2966 2957 0 11:06 ? 00:00:00 samba root 2967 2957 0 11:06 ? 00:00:00 samba root 2968 2957 0 11:06 ? 00:00:00 samba root 2969 2957 0 11:06 ? 00:00:00 samba root 2970 2957 0 11:06 ? 00:00:00 samba root 2973 2965 0 11:06 ? 00:00:00 /usr/local/samba/sbin/smbd -D --option=server role check:inhibit=yes --foreground root 3524 2703 0 11:18 pts/0 00:00:00 grep samba
# kinit administrator@EXAMPLE.COM Password for administrator@EXAMPLE.COM: [Give password for Administrator] Warning: Your password will expire in 41 days on Mon Mar 31 13:44:36 2014
现在检查复制是否对两个域控制器都有效。
即我们其中一个控制器进行的任何更改,在另一个控制器上也应做了相应的更改。
要验证是否相同,请运行以下命令
[root@test1 ~]# samba-tool drs showrepl Failed to connect host 192.168.1.5 on port 135 - NT_STATUS_CONNECTION_REFUSED Failed to connect host 192.168.1.5 (test1.example.com) on port 135 - NT_STATUS_CONNECTION_REFUSED. ERROR(<class 'samba.drs_utils.drsException'>): DRS connection to test1.example.com failed - drsException: DRS connection to test1.example.com failed: (-1073741258, 'The connection was refused') File "/usr/local/samba/lib/python2.6/site-packages/samba/netcmd/drs.py", line 39, in drsuapi_connect (ctx.drsuapi, ctx.drsuapi_handle, ctx.bind_supported_extensions) = drs_utils.drsuapi_connect(ctx.server, ctx.lp, ctx.creds) File "/usr/local/samba/lib/python2.6/site-packages/samba/drs_utils.py", line 54, in drsuapi_connect raise drsException("DRS connection to %s failed: %s" % (server, e))
现在,当我第一次运行此命令时,出现了上述错误,因此需要进行了一些dig以找出可能的原因
[root@test1 ~]# cat /var/log/messages | grep 135
Nov 17 15:15:58 test samba[1207]: Failed to connect host 192.168.1.6 on port 135 - NT_STATUS_CONNECTION_REFUSED Nov 17 15:15:58 test samba[1207]: Failed to connect host 192.168.1.6 (74b975bc-c25c-4ce7-9773-fe3f6eb1b903._msdcs.example.com) on port 135 - NT_STATUS_CONNECTION_REFUSED.
检查确认一下:
[root@test1 ~]# telnet localhost 135 Trying ::1... telnet: connect to address ::1: Connection refused Trying 127.0.0.1... telnet: connect to address 127.0.0.1: Connection refused
可以看到135端口拒绝连接。
检查selinux的设置:
[root@test1 ~]# cat /etc/selinux/config # This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - No SELinux policy is loaded. SELINUX=disabled # SELINUXTYPE= can take one of these two values: # targeted - Targeted processes are protected, # mls - Multi Level Security protection. SELINUXTYPE=targeted
将它更改为disabled状态并重新启动系统。
现在再来试一下:
[root@test1 ~]# telnet localhost 135 Trying ::1... telnet: connect to address ::1: Connection refused Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. ^] telnet> quit Connection closed.
没有问题,所以现在端口 135 处于监听状态。
另外注意检查iptable 规则。
再次运行以下命令
[root@test1 ~]# samba-tool drs showrepl Default-First-Site-NameTEST1 DSA Options: 0x00000001 DSA object GUID: 607bc2dc-0754-49e3-aa37-9be403d0cc33 DSA invocationId: 7899d780-9c0c-4cfc-adae-ba8c63790cf0 ==== INBOUND NEIGHBORS ==== ERROR(runtime): DsReplicaGetInfo of type 0 failed - (-1073610723, 'NT_STATUS_RPC_PROTOCOL_ERROR')
出现了了不一样的错误
错误:
NT_STATUS_RPC_PROTOCOL_ERROR
解决方案:
看起来是 samba 服务没有正确启动。
重启 samba 服务,然后一切正常:
[root@test1 ~]# samba-tool drs showrepl Default-First-Site-NameTEST1 DSA Options: 0x00000001 DSA object GUID: 607bc2dc-0754-49e3-aa37-9be403d0cc33 DSA invocationId: 7899d780-9c0c-4cfc-adae-ba8c63790cf0 ==== INBOUND NEIGHBORS ==== DC=example,DC=com Default-First-Site-NameTEST via RPC DSA object GUID: 74b975bc-c25c-4ce7-9773-fe3f6eb1b903 Last attempt @ Tue Nov 18 10:59:58 2014 IST failed, result 2 (WERR_BADFILE) 1 consecutive failure(s). Last success @ Tue Nov 18 10:35:58 2014 IST CN=Configuration,DC=example,DC=com Default-First-Site-NameTEST via RPC DSA object GUID: 74b975bc-c25c-4ce7-9773-fe3f6eb1b903 Last attempt @ Tue Nov 18 10:59:58 2014 IST failed, result 2 (WERR_BADFILE) 1 consecutive failure(s). Last success @ Tue Nov 18 10:35:57 2014 IST CN=Schema,CN=Configuration,DC=example,DC=com Default-First-Site-NameTEST via RPC DSA object GUID: 74b975bc-c25c-4ce7-9773-fe3f6eb1b903 Last attempt @ Tue Nov 18 10:59:58 2014 IST failed, result 2 (WERR_BADFILE) 1 consecutive failure(s). Last success @ Tue Nov 18 10:35:53 2014 IST ==== OUTBOUND NEIGHBORS ==== ==== KCC CONNECTION OBJECTS ==== Connection - Connection name: 77f4ad2e-ddca-4584-8d8c-7efbd1f7d93c Enabled : TRUE Server DNS name : test.example.com Server DN name : CN=NTDS Settings,CN=TEST,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=example,DC=com TransportType: RPC options: 0x00000001
所以,一切看起来都好了,可以验证我们的配置。
在 Windows 客户端机器上
打开 Active Directory 用户管理控制台
我们应该连接到域 example.com
单击操作并选择“更改域控制器”,如下所示
在这里,我们应该能够看到可用的域控制器及其状态,如下所示,我的 dc 都在线。
我们可以使用以下步骤切换到 dc
现在我尝试使用 CLI 在 SDC(test1.example.com) 上添加一个用户
[root@test1 ~]# samba-tool user add test New Password: Retype Password: User 'test' created successfully [root@test1 ~]# samba-tool user list Administrator dns-test krbtgt Guest test
在 主控制器 (test.example.com)上
[root@test ~]# samba-tool user list Administrator dns-test krbtgt Guest test
没有问题,test用户出现在了主控制器上,说明复制工作正常。
我们可以从任一域控制器进行测试。