Microsoft 拥有围绕 Active Directory 构建的身份管理套件,而 Red Hat 拥有其身份管理目录服务器。 在本文中,我将分享将 Linux 添加到 Windows Active Directory 域的步骤。 通过将 RHEL/CentOS 7 和 8 Linux 添加到在 Windows Server 2012 R2 上配置的 Windows Active Directory 来验证这些步骤。
realmd 工具概述
realmd 是一个可以轻松配置网络身份验证和域成员资格的工具。 从RHEL/CentOS 7开始,realmd 得到完全支持,可用于加入 IdM、AD 或 Kerberos realms。 使用 realmd 的主要优点是能够提供简单的单行命令来注册到域以及配置网络身份验证。
例如,realmd 可以轻松配置:
- PAM 堆栈
- NSS 层
- Kerberos
- SSSD
- Winbind
realmd 系统支持以下域类型:
- Microsoft Active Directory
- Red Hat Enterprise Linux Identity Management
realmd 支持以下域客户端:
- 适用于 RHEL/CentOS IDM和 Microsoft Active Directory 的 SSSD
- Winbind for Microsoft Active Directory
下表列出了一些最常用的realm命令:
命令 | 描述 |
---|---|
realm discover | 对网络上的域运行发现扫描。 |
realm join | 将系统添加到指定域。 |
realm leave | 从指定域中删除系统。 |
realm list | 列出系统的所有已配置域或所有已发现和配置的域。 |
realm permit | 允许指定用户或配置域内的所有用户访问本地系统 |
realm deny | 限制指定用户或配置域内的所有用户访问本地系统 |
完整手册见:https://www.systutorials.com/docs/linux/man/8-realm/
实验室环境概述
为了演示本文将 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 AD域的先决条件
重要提示:
在将Linux加入Windows域之前,我们需要确保已经设置了时间服务和DNS服务
更新 /etc/resolv.conf
确保 RHEL/CentOS 客户端机器能够解析 Active Directory 服务器。 为此,请使用域控制器的IP地址更新RHEL/CentOS 7/8 客户端主机上的/etc/resolv.conf
。
# cat /etc/resolv.conf
search golinuxcloud.com
nameserver 192.168.0.107
验证域名解析
验证客户端是否能够解析域名:
# nslookup golinuxcloud.com
Server: 192.168.0.107
Address: 192.168.0.107#53
Name: golinuxcloud.com
Address: 192.168.0.107
验证名称解析的配置。 特别是,验证 DNS SRV 记录。
~]# host -t SRV _kerberos._udp.golinuxcloud.com.
_kerberos._udp.golinuxcloud.com has SRV record 0 100 88 win-71humtros3m.golinuxcloud.com.
~]# host -t SRV _ldap._tcp.golinuxcloud.com.
_ldap._tcp.golinuxcloud.com has SRV record 0 100 389 win-71humtros3m.golinuxcloud.com.
~]# host -t SRV _ldap._tcp.dc._msdcs.golinuxcloud.com
_ldap._tcp.dc._msdcs.golinuxcloud.com has SRV record 0 100 389 win-71humtros3m.golinuxcloud.com.
安装软件包(RHEL/CentOS 7)
对于最小安装服务器,需要安装 krb5-workstation
包,它提供了 klist
命令。 与 sssd
一起安装 adcli
包:
在此,
- sssd: 系统安全服务守护进程可用于根据需要转移客户端身份验证
- adcli: 这些是用于加入和管理 AD 域的工具
安装包 (RHEL/CentOS 8)
使用realm将 Linux 客户端集成到 Windows 域需要以下软件包列表。 需要oddjob oddjob-mkhomedir
来确保为域用户自动创建主目录。
# # dnf -y install realmd adcli sssd oddjob oddjob-mkhomedir samba-common-tools krb5-workstation authselect-compat
关于这些单独的包的一些简要概述:
- samba-common-tools: 这表示服务器和客户端的共享工具
- oddjob: 这是一项为客户端提供odd jobs的D-bus服务
- oddjob-mkhomedir: 如果需要的话,可以将其与odd job服务一起用于为AD帐户创建主目录
- sssd: 系统安全服务守护进程可用于根据需要转移客户端身份验证
- adcli: 这些是加入和管理AD域的工具
- krb5-workstation: 提供用于验证Kerberos相关配置的Kerberos klist命令。
使用 realm 将 Linux 加入 Windows 域
安装完所有软件包后,可以使用 realm
命令将 Linux 添加到 Windows AD 域并管理我们的注册。 此命令是添加的 realmd
包的一部分。
列出配置的域
可以使用 list
子命令来确保我们当前不是域的一部分:
# realm list
输出应为空白。
发现网络中的可用域
现在,已准备好将 Linux 添加到 Windows AD 域。 通过简单的环境,将知道要加入的域; 至少我们当然希望你这样做。 在例子中,我们确实知道,这就是 golinuxcloud.com
。
realm discover
命令返回完整的域配置和必须安装的软件包列表,系统才能在域中注册。
# realm discover golinuxcloud.com
GOLINUXCLOUD.COM
type: kerberos
realm-name: GOLINUXCLOUD.COM
domain-name: GOLINUXCLOUD.COM
configured: no
server-software: active-directory
client-software: sssd
required-package: oddjob
required-package: oddjob-mkhomedir
required-package: sssd
required-package: adcli
required-package: samba-common-tools
golinuxcloud.com
type: kerberos
realm-name: GOLINUXCLOUD.COM
domain-name: golinuxcloud.com
configured: no
将 Linux 客户端加入 Windows 域
然后,realm join
命令通过配置本地系统服务和身份域中的条目来设置本地机器以供指定域使用。 realm join
运行的过程遵循以下步骤:
- 对指定域运行发现扫描。
- 自动安装将系统加入域所需的软件包。
- 通过在目录中为系统创建帐户条目来加入域。
- 创建
/etc/krb5.keytab
主机密钥表文件。 - 在 SSSD 中配置域并重新启动服务。
- 在 PAM 配置和
/etc/nsswitch.conf
文件中为系统服务启用域用户。
# realm join --user=Administrator golinuxcloud.com
Password for Administrator:
最初在尝试使用realm将Linux 客户端加入 Windows 域时遇到以下错误:
# realm join --user=Administrator golinuxcloud.com
Password for Administrator:
See: journalctl REALMD_OPERATION=r597.2528
realm: Couldn't join realm: Failed to join the domain
在 journalctl logs中,可以找到以下日志:
Mar 04 12:11:21 centos8 realmd[2314]: ! Couldn't authenticate as: Administrator@GOLINUXCLOUD.COM: KDC has no support for encryption type
Mar 04 12:11:21 centos8 realmd[2314]: ! Couldn't authenticate as: Administrator@GOLINUXCLOUD.COM: KDC has no support for encryption type
Mar 04 12:11:21 centos8 realmd[2314]: adcli: couldn't connect to GOLINUXCLOUD.COM domain: Couldn't authenticate as: Administrator@GOLINUXCLOUD.COM: KDC has no support for encryption type
Mar 04 12:11:21 centos8 realmd[2314]: adcli: couldn't connect to GOLINUXCLOUD.COM domain: Couldn't authenticate as: Administrator@GOLINUXCLOUD.COM: KDC has no support for encryption type
Mar 04 12:11:21 centos8 realmd[2314]: process exited: 2534
Mar 04 12:11:21 centos8 realmd[2314]: ! Failed to join the domain
Mar 04 12:11:21 centos8 realmd[2314]: ! Failed to join the domain
如何解决“KDC 不支持加密类型”?
方法一
在RHEL/CentOS 8中,rc4不再在DEFAULT加密策略中,详情请参见man crypto-policies。不幸的是,它仍然是AD中常见的后端。
因此可以在 /etc/krb5.conf.d/crypto-policies
中添加 rc4-hmac
作为 permitted_enctypes
,如下所示。
[libdefaults]
permitted_enctypes = aes256-cts-hmac-sha1-96 aes256-cts-hmac-sha384-192 camellia256-cts-cmac aes128-cts-hmac-sha1-96 aes128-cts-hmac-sha256-128 camellia128-cts-cmac rc4-hmac
现在可以重新尝试使用realm将 Linux 客户端加入 Windows 域:
# realm join --user=Administrator golinuxcloud.com
Password for Administrator:
方法二
这里还是要添加了rc4 加密策略,但不是使用 /etc/krb5.conf.d/crypto-policies
,我们将在 /etc/krb5.conf.d/
下的新文件中添加以下内容
# vim /etc/krb5.conf.d/enctypes
[libdefaults]
default_tgs_enctypes = aes256-cts-hmac-sha1-96 aes256-cts-hmac-sha384-192 camellia256-cts-cmac aes128-cts-hmac-sha1-96 aes128-cts-hmac-sha256-128 camellia128-cts-cmac rc4-hmac
default_tkt_enctypes = aes256-cts-hmac-sha1-96 aes256-cts-hmac-sha384-192 camellia256-cts-cmac aes128-cts-hmac-sha1-96 aes128-cts-hmac-sha256-128 camellia128-cts-cmac rc4-hmac
现在可以重新尝试使用realm将 Linux 客户端加入 Windows 域:
# realm join --user=Administrator golinuxcloud.com
Password for Administrator:
方法三
可以通过在 /etc/krb5.conf
文件的 [libdefaults]
下定义以下内容来允许弱加密:
allow_weak_crypto = true
default_tgs_enctypes = arcfour-hmac-md5 des-cbc-crc des-cbc-md5
default_tkt_enctypes = arcfour-hmac-md5 des-cbc-crc des-cbc-md5
现在可以重新尝试使用realm将 Linux 客户端加入 Windows 域:
# realm join --user=Administrator golinuxcloud.com
Password for Administrator:
验证 Linux 客户端是否集成到 windows 域
作为标准用户,可以再次使用 realm list
命令列出加入的域。 应该注意到,最初的输出可能看起来类似于之前运行的 realm discover golinuxcloud.com
命令; 但是,仔细检查后,会发现现在是成员服务器,如以下命令中配置的:kerberos-member
所示:
# realm list
GOLINUXCLOUD.COM
type: kerberos
realm-name: GOLINUXCLOUD.COM
domain-name: GOLINUXCLOUD.COM
configured: kerberos-member
server-software: active-directory
client-software: sssd
required-package: oddjob
required-package: oddjob-mkhomedir
required-package: sssd
required-package: adcli
required-package: samba-common-tools
login-formats:%U@golinuxcloud.com
login-policy:allow-realm-logins
为 SSSD 服务配置 NSS
接下来需要配置 NSS 来验证 Linux 客户端中的用户并为 AD 用户创建主目录:
在 RHEL/CentOS 7 上
可以在 RHEL/CentOS 7 服务器上使用 authconfig
来配置 PAM 并确保自动创建 AD 用户的主目录:
# authconfig --enablesssd --enablesssdauth --enablemkhomedir --update
上述命令将在 /etc/nsswitch.conf
、/etc/pam.d/password-auth
和 /etc/pam.d/system-auth
文件中修改并添加必要的条目。 接下来启用并启动/重启oddjobd.service
# systemctl enable --now oddjobd.service
在 RHEL/CentOS 8 上
在 RHEL/CentOS 8 中使用 authconfig
的新版本 authselect
来配置 PAM 文件,并确保 AD 用户在登录 Linux 客户端时自动创建主目录:
# authselect select sssd with-mkhomedir --force
Backup stored at /var/lib/authselect/backups/2021-03-02-12-08-32.O2GvBy
Profile "sssd" was selected.
The following nsswitch maps are overwritten by the profile:
- passwd
- group
- netgroup
- automount
- services
Make sure that SSSD service is configured and enabled. See SSSD 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
接下来启用并启动/重启oddjobd.service
# systemctl enable --now oddjobd.service
在 Linux 客户端上以 Active Directory 用户身份登录
尝试使用 Windows AD 用户登录到Linux 客户端并验证是否自动创建了主目录。 但首先需要检查Linux 客户端是否能够获取 AD 用户的用户详细信息:
# id GOLINUXCLOUD\\Administrator
uid=111800500(administrator@GOLINUXCLOUD.COM) gid=111800513(domain users@GOLINUXCLOUD.COM) groups=111800513(domain users@GOLINUXCLOUD.COM),111800520(group policy creator owners@GOLINUXCLOUD.COM),111800512(domain admins@GOLINUXCLOUD.COM),111800572(denied rodc password replication group@GOLINUXCLOUD.COM),111800518(schema admins@GOLINUXCLOUD.COM),111800519(enterprise admins@GOLINUXCLOUD.COM)
所以AD 中的管理员用户被 Linux 客户端检测到,所以尝试将用户切换到管理员:
# su - GOLINUXCLOUD\\Administrator
Creating home directory for administrator.
Last login: Tue Mar 2 17:41:26 IST 2021 on pts/0
$pwd
/home/administrator@GOLINUXCLOUD.COM
正如预期的那样, AD 用户的主目录是自动创建的。
离开 Active Directory 域
可能出现需要从活动目录域中删除 Linux 服务器的情况。 通常,在添加到另一个 Active Directory 域之前,它会从一个 Active Directory 域中删除。 如果需要,可以使用 realm
命令简化此过程。
附加选项:--remove
将确保计算机帐户也从域中删除; 否则,应单独删除。
# realm leave golinuxcloud.com --remove
Password for Administrator:
总结
在本文中,我们了解了如何使用 realmd 工具将 Linux 客户端(CentOS/RHEL 7/8)加入 Windows AD 域。 realmd 系统提供了一种清晰而简单的方式来发现和加入身份域。 它不连接到域本身,而是配置底层 Linux 系统服务,例如 SSSD 或 Winbind,以连接到域。。
它可以运行发现搜索以识别可用的 AD 和身份管理域,然后将系统加入域,以及设置用于连接到给定身份域和管理用户访问的所需客户端服务。 此外,由于 SSSD 作为底层服务支持多个域,因此 realmd 也可以发现并支持多个域。