搭建环境

主域控制器(Domain Controller):192.168.1.6
主机名:test.example.com

辅助 DC:192.168.1.5
主机名:test1.example.com

假设我们已经有一个正常工作的域控制器。
它可以是 Samba 4 或者 Windows Server 2008 AD。

如何将 Samba 4 配置为辅助域控制器

本文将指导您配置辅助域控制器而不是主域控制器。

准备工作

在 主域控制器 (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用户出现在了主控制器上,说明复制工作正常。

我们可以从任一域控制器进行测试。

日期:2020-06-02 22:18:27 来源:oir作者:oir