使用 realmd将 CentOS 7/8加入 Windows 域

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 也可以发现并支持多个域。

  • 5
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要将CentOS 7加入,需要执行以下步骤: 1. 安装必要软件: - 使用root用户登录系统。 - 通过以下命令安装所需软件包: ``` yum install -y realmd sssd oddjob oddjob-mkhomedir adcli samba-common-tools ``` 2. 配置DNS解析: - 编辑 `/etc/resolv.conf` 文件,并确保指定了可解析名的DNS服务器。例如: ``` nameserver 192.168.1.1 ``` 3. 加入: - 使用以下命令将系统加入: ``` realm join --user=username domain.example.com ``` 其中,`username` 是具有加入权限的用户账户,`domain.example.com` 是要加入名。 4. 配置SSSD: - 使用编辑器打开 `/etc/sssd/sssd.conf` 文件,并确保以下设置正确: ``` [sssd] domains = domain.example.com config_file_version = 2 services = nss, pam [domain/domain.example.com] ad_domain = domain.example.com krb5_realm = DOMAIN.EXAMPLE.COM realmd_tags = manages-system joined-with-samba cache_credentials = True id_provider = ad krb5_store_password_if_offline = True default_shell = /bin/bash ldap_id_mapping = True use_fully_qualified_names = False fallback_homedir = /home/%u@%d access_provider = ad ``` - 保存并关闭文件。 5. 重启SSSD服务: - 使用以下命令重启SSSD服务: ``` systemctl restart sssd ``` 6. 验证加入: - 使用以下命令验证加入是否成功: ``` id domain\\username ``` 其中,`domain\\username` 是中的用户名。 如果以上步骤都正确执行,您的CentOS 7系统应该已成功加入。请注意,这些步骤假设您已经配置了正确的网络连接和控制器设置。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值