如何使用 Samba Winbind 将 RHEL 8 系统加入 Active Directory 服务器。
如何针对 Windows 2003 R2 / 2008 / 2008 R2 / 2012 AD 域对 RHEL 8 服务器进行身份验证。
如何将 CentOS 8 添加到 Windows 域控制器。
将 CentOS 8 添加到 Windows 域控制器的分步指南。
将 RHEL 8 加入 Active Directory 的步骤。
如何将 CentOS 8 加入 Windows Server 上的 Active Directory。
将 CentOS 8 加入到在 WIndows Server 2012 上运行的 Windows 域控制器的步骤。
将 linux 加入到 Windows 活动目录的步骤。
winbind 服务是 Samba 套件的一部分。 它使 Linux 服务器成为 Windows 域中的正式成员,并在 Linux 中使用 Windows 用户和组帐户。
实验室环境概述
为了演示本文将 CentOS 8 添加到 Windows 域控制器 (Active Directory),我们将使用安装CentOS 8的 Linux 服务器。
有一个IP 地址为 192.168.0.107 的 Microsoft Server 2012 R2 Active Directory 域控制器、IP 地址为 192.168.0.117 的 CentOS 8 主机。 所以本文需要一个预配置的 Windows Active Directory。
准备 Linux 客户端以加入 Windows Active Directory
要将 CentOS 8 添加到 Windows 域控制器,需要更改 DNS 设置,以便首先查询 Active Directory 域 DNS 服务器:
[root@centos-8 ~]# cat /etc/resolv.conf
# Generated by NetworkManager
search golinuxcloud.com
nameserver 192.168.0.107
此处 192.168.0.107
是Windows Active Directory 的 IP 地址,它也被配置为 DNS 服务器。
为了确保我们的服务器可以通过查询 DNS 服务器来解析主机名,可以使用 nslookup
命令。
[root@centos-8 ~]# nslookup golinuxcloud.com
Server: 192.168.0.107
Address: 192.168.0.107#53
Name: golinuxcloud.com
Address: 192.168.0.107
安装 Winbind 软件包
要将CentOS 8 添加到Windows 域控制器,需要在客户端主机上安装所需的 samba 包
[root@centos-8 ~]# dnf install samba samba-client samba-winbind samba-winbind-clients oddjob oddjob-mkhomedir
使用 smb.conf 配置 Winbind
通过将 [global]
部分下的现有内容替换为以下内容来配置 /etc/samba/smb.conf
,以将 Linux 添加到 Windows 活动目录。 根据实际的环境修改realm
和workgroup
值。
还可以使用 Red Hat的AD集成助手来帮助生成最佳配置值,以连接到组织 Active Directory。
[global]
workgroup = GOLINUXCLOUD
realm = GOLINUXCLOUD.COM
security = ads
idmap config * : backend = autorid
idmap config * : range = 100000-19999999
idmap config * : rangesize = 1000000
template homedir = /home/%D/%U
template shell = /bin/bash
winbind use default domain = false
winbind offline logon = true
log file = /var/log/samba/log.%m
max log size = 50
log level = 0
security=ads
描述 Active Directory 域中的成员资格。
参数idmap*
和 winbind enum*
将 Windows 用户和组映射到 Unix 用户和组。
通常系统用户和组分配的 ID 范围从 0 到 999,本地用户和组分配的 ID 从 1000 开始。考虑到这一点,从 1000000 开始为域用户和组分配 ID 似乎很合理。我们还应该区分域用户和组以及成员服务器上存在的本地内置帐户,例如本地管理员、本地访客等。这两个组不能重叠,因此我们将1000000到19999999的范围分配给域内置用户和组帐户。
运行以下命令以验证是否可以解析标准 SRV 记录:
[root@centos8 ~]# host -t SRV _kerberos._udp.golinuxcloud.com.
_kerberos._udp.golinuxcloud.com has SRV record 0 100 88 win-71humtros3m.golinuxcloud.com.
[root@centos8 ~]# host -t SRV _ldap._tcp.golinuxcloud.com.
_ldap._tcp.golinuxcloud.com has SRV record 0 100 389 win-71humtros3m.golinuxcloud.com.
如果 winbind 服务处于运行状态,则停止它:
[root@centos8 ~]# systemctl stop winbind
将 CentOS 8 加入到 Windows 域控制器
通过在客户端主机上执行 net ads join -U Administrator
将 Linux 客户端加入 Windows Active Directory:
[root@stor106 ~]# net ads join -U Administrator
Enter Administrator's password:
Using short domain name -- GOLINUXCLOUD
Joined 'CENTOS8' to dns domain 'golinuxcloud.com'
使用 Samba Winbind 将 Linux 客户端加入 Windows AD 时,可能会收到以下错误。
Joined 'centos-8' to dns domain 'GOLINUXCLOUD.COM'
DNS Update for centos-8.golinuxcloud.com failed: ERROR_DNS_UPDATE_FAILED
DNS update failed: NT_STATUS_UNSUCCESSFUL
如何修复“DNS Update for DOMAIN failed。 ERROR_DNS_UPDATE_FAILED”?
可以选择在将 CentOS 8 添加到 Windows 域控制器时避免执行任何 DNS 更新,方法是使用
# net ads join -U Administrator --no-dns-updates golinuxcloud.com
或者要修复上面观察到的 ERROR_DNS_UPDATE_FAILED
错误,请执行以下步骤
将以下信息添加到 /etc/hosts
。
# echo "127.0.0.1 `hostname` `hostname -a`" >> /etc/hosts
确保 DNS 服务器的 IP 地址在 /etc/resolv.conf
中。 IP 地址应该是您要更新新 DNS ‘A’ 记录的 DNS 服务器。
# cat /etc/resolv.conf
search golinuxcloud.com
nameserver 192.168.0.107
在 Windows 域控制器上,为服务器选择“DNS 管理器”。 在正向查找区域中选择服务器,然后右键单击以打开属性。 在 Windows DNS 服务器上选择“仅安全
”或“不安全且安全
”的动态更新。
接下来重启 DNS 服务以激活更改并重新尝试将 CentOS 8 添加到 Windows 域控制器
[root@centos-8 ~]# net ads join -U Administrator golinuxcloud.com
Enter Administrator's password:
Using short domain name -- GOLINUXCLOUD
Joined 'centos-8' to dns domain 'GOLINUXCLOUD.COM'
验证 Linux 客户端和 Windows AD 之间的连接
可以使用 testparm
命令轻松检查服务器是否是域的成员。
[root@centos-8 ~]# testparm -s
Load smb config files from /etc/samba/smb.conf
Loaded services file OK.
Server role: ROLE_DOMAIN_MEMBER
# Global parameters
[global]
log file = /var/log/samba/log.%m
max log size = 50
realm = GOLINUXCLOUD.COM
security = ADS
template shell = /bin/bash
winbind offline logon = Yes
workgroup = GOLINUXCLOUD
idmap config * : rangesize = 1000000
idmap config * : range = 100000-19999999
idmap config * : backend = autorid
[homes]
browseable = No
comment = Home Directories
inherit acls = Yes
read only = No
valid users = %S %D%w%S
[printers]
browseable = No
comment = All Printers
create mask = 0600
path = /var/tmp
printable = Yes
[print$]
comment = Printer Drivers
create mask = 0664
directory mask = 0775
force group = @printadmin
path = /var/lib/samba/drivers
write list = @printadmin root
成功将 Linux 服务器加入 Windows Active Directory 后,必须重启 Winbind
并启用该服务以在启动时自动启动:
[root@centos-8 ~]# systemctl enable winbind --now
Created symlink /etc/systemd/system/multi-user.target.wants/winbind.service → /usr/lib/systemd/system/winbind.service.
检查Winbind
服务状态
[root@centos-8 ~]# systemctl status winbind
● winbind.service - Samba Winbind Daemon
Loaded: loaded (/usr/lib/systemd/system/winbind.service; enabled; vendor preset: disabled)
Active: active (running) since Fri 2019-10-18 14:48:25 IST; 20s ago
Docs: man:winbindd(8)
man:samba(7)
man:smb.conf(5)
Main PID: 1756 (winbindd)
Status: "winbindd: ready to serve connections..."
Tasks: 2 (limit: 11506)
Memory: 6.6M
CGroup: /system.slice/winbind.service
├─1756 /usr/sbin/winbindd --foreground --no-process-group
└─1758 /usr/sbin/winbindd --foreground --no-process-group
Oct 18 14:48:25 centos-8.golinuxcloud.com systemd[1]: Starting Samba Winbind Daemon...
客户端验证
将 CentOS 8 添加到 Windows 域控制器后,需要在客户端主机(即 CentOS 8)上运行一些检查,以确保它能够正确访问 Active Directory。
可以使用 wbinfo -t
测试一切是否正常工作。 该命令运行加密的 RPC 调用,这仅在服务器确实是域中的成员时才有可能:
[root@centos-8 ~]# wbinfo -t
checking the trust secret for domain GOLINUXCLOUD via RPC calls succeeded
列出 AD 用户。
[root@centos-8 ~]# wbinfo -u
GOLINUXCLOUD\administrator
GOLINUXCLOUD\guest
GOLINUXCLOUD\krbtgt
列出 AD 组。
[root@centos-8 ~]# wbinfo -g
GOLINUXCLOUD\winrmremotewmiusers__
GOLINUXCLOUD\domain computers
GOLINUXCLOUD\domain controllers
GOLINUXCLOUD\schema admins
GOLINUXCLOUD\enterprise admins
GOLINUXCLOUD\cert publishers
GOLINUXCLOUD\domain admins
GOLINUXCLOUD\domain users
GOLINUXCLOUD\domain guests
GOLINUXCLOUD\group policy creator owners
GOLINUXCLOUD\ras and ias servers
GOLINUXCLOUD\allowed rodc password replication group
GOLINUXCLOUD\denied rodc password replication group
GOLINUXCLOUD\read-only domain controllers
GOLINUXCLOUD\enterprise read-only domain controllers
GOLINUXCLOUD\cloneable domain controllers
GOLINUXCLOUD\protected users
GOLINUXCLOUD\dnsadmins
GOLINUXCLOUD\dnsupdateproxy
配置 NSS 和 PAM 堆栈以进行身份验证
执行以下命令配置 NSS 和 PAM 堆栈。 使用 with-mkhomedir
来确保活动目录用户在登录时自动创建主目录。
[root@centos8 ~]# authselect select winbind with-mkhomedir --force
Backup stored at /var/lib/authselect/backups/2021-03-03-19-16-20.jS4CgG
Profile "winbind" was selected.
The following nsswitch maps are overwritten by the profile:
- passwd
- group
Make sure that winbind service is configured and enabled. See winbind documentation for more information.
- with-mkhomedir is selected, make sure pam_oddjob_mkhomedir module
is present and oddjobd service is enabled
- systemctl enable oddjobd.service
- systemctl start oddjobd.service
确保 /etc/nsswitch.conf
具有以下passwd
和group条目。 在此文件中,必须告诉 Linux 在尝试在 Linux 上进行本地身份验证之前它应该使用 Winbind。
passwd: files winbind
group: files winbind
启用并启动/重启oddjobd
服务:
[root@centos8 ~]# systemctl enable oddjobd --now
测试解析 AD 用户和组以及用户的身份验证。
[root@centos8 ~]# getent passwd GOLINUXCLOUD\\administrator
GOLINUXCLOUD\administrator:*:1100500:1100513::/home/GOLINUXCLOUD/administrator:/bin/bash
[root@centos8 ~]# id GOLINUXCLOUD\\administrator
uid=1100500(GOLINUXCLOUD\administrator) gid=1100513(GOLINUXCLOUD\domain users) groups=1100513(GOLINUXCLOUD\domain users),1100500(GOLINUXCLOUD\administrator),1100572(GOLINUXCLOUD\denied rodc password replication group),1100518(GOLINUXCLOUD\schema admins),1100519(GOLINUXCLOUD\enterprise admins),1100520(GOLINUXCLOUD\group policy creator owners),1100512(GOLINUXCLOUD\domain admins),100001(BUILTIN\users),100000(BUILTIN\administrators)
在 Linux 客户端上以 Active Directory 用户身份登录
现在可以尝试在此 CentOS 8 客户端上以任何 Active Directory 用户身份登录。 不需要为域用户手动创建主目录,因为这将由oddjob-mkhomedir
rpm 提供的 /usr/lib64/security/pam_oddjob_mkhomedir.so
模块处理。
[root@centos8 ~]# su - GOLINUXCLOUD\\Administrator
Creating home directory for GOLINUXCLOUD\administrator.
Last login: Thu Mar 4 00:46:12 IST 2021 on pts/0
[GOLINUXCLOUD\administrator@centos8 ~]$ pwd
/home/GOLINUXCLOUD/administrator
如您所见,我们的管理员用户的主目录是在第一次登录时自动创建的。
总结
Winbind 可以与不同的 idmap 后端 idmap_tdb
、idmap_ldap
、idmap_rid
、idmap_sss
和 idmap_ad
一起使用。 这些后端将帮助 Red Hat Enterprise Linux 系统找出 SID 到 uid/gid 的映射。 如果您使用的是 winbind,则需要为您的环境选择最合适的后端。 即,如果这是针对单个系统的,那么在多个系统中保持 uid/gid 信息相同并不重要。 默认的 tdb
后端可能是合适的。 如果需要 uid/gid 信息在许多系统中保持一致,则其它后端之一将更合适。 即:autorid
或rid
。