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

在本教程中,将使用 adcli 将Linux 客户端(RHEL/CentOS 7/8)加入到 Windows Active Directory域。 adcli 将使用系统安全服务守护程序 (SSSD) 将 CentOS/RHEL 7/8 系统连接到 Microsoft Active Directory 域。 基本上需要两个组件来将 CentOS/RHEL 7/8 系统连接到 Active Directory (AD)。

SSSD 与中央身份和身份验证源交互,adcli 检测可用域,然后必须手动配置底层 RHEL 系统服务(在本例中为 SSSD)以连接到域。

使用SSSD将Linux与Windows域集成概述

系统安全服务守护进程 (sssd) 提供了一组守护进程来管理对远程目录的访问和验证机制,在例子中是 Active Directory。 sssd 服务为系统提供 NSS (Name Service Switch) 和 PAM (Pluggable Authentication Mechanism) 接口以及一个模块化后端系统以连接到多个不同的帐户源以及 D-bus 接口。

通过 LDAP 识别远程 Active Directory 上的帐户,并通过 Kerberos 对 AD 域进行身份验证。 LDAP 帐户搜索被引用并调用 /usr/lib64/libnss_sss.so.2 NSS 模块和 /etc/nsswitch.conf文件。 将使用 /lib64/security/pam_nss.so 引用身份验证。

我们使用 SSSD 访问用户目录以通过具有用户缓存以允许离线登录的通用框架进行身份验证和授权。 SSSD 是将 RHEL 系统与以下类型的身份服务器之一连接的推荐组件:

  • Active Directory
  • RHEL 中的身份管理 (IdM)
  • 任何通用 LDAP 或 Kerberos 服务器

实验室环境概述

为了演示本文将 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.
确保支持 AD 和 RHEL 中的常见加密类型

默认情况下,SSSD 支持 RC4、AES-128 和 AES-256 Kerberos 加密类型。

RC4 加密在 CentOS/RHEL 8 中已被默认弃用和禁用,因为它被认为不如较新的 AES-128 和 AES-256 加密类型安全。 如果您使用的是 RHEL/CentOS 7,则可以忽略此步骤。

可以关注如何修复“KDC 不支持加密类型”? 启用 RC4 加密。

更多信息见access.redhat.com:确保支持 AD 和 RHEL 中的常见加密类型

安装软件包(RHEL/CentOS 8)

需要在 CentOS/RHEL 8 客户端节点上安装以下软件包:

# dnf -y install adcli sssd oddjob oddjob-mkhomedir samba-common-tools krb5-workstation authselect-compat
安装包 (RHEL/CentOS 7)

需要在 CentOS/RHEL 7 客户端节点上安装以下软件包:

# yum -y install adcli sssd authconfig oddjob oddjob-mkhomedir samba-common-tools krb5-workstation

关于这些单独的包的一些简要概述:

  • samba-common-tools: 这表示服务器和客户端的共享工具
  • oddjob: 这是一项为客户端提供odd jobs的D-bus服务
  • oddjob-mkhomedir: 如果需要的话,可以将其与odd job服务一起用于为AD帐户创建主目录
  • sssd: 系统安全服务守护进程可用于根据需要转移客户端身份验证
  • adcli: 这些是加入和管理AD域的工具
  • krb5-workstation: 提供用于验证Kerberos相关配置的Kerberos klist命令。

使用 adcli 将 Linux 加入 Windows 域

发现 AD 域

可以使用adcli info命令,该命令显示发现的有关Active Directory域或Active Directory域控制器的信息。

# adcli info golinuxcloud.com
[domain]
domain-name = GOLINUXCLOUD.COM
domain-short = GOLINUXCLOUD
domain-forest = GOLINUXCLOUD.COM
domain-controller = WIN-71HUMTROS3M.GOLINUXCLOUD.COM
domain-controller-site = Default-First-Site-Name
domain-controller-flags = pdc gc ldap ds kdc timeserv closest writable good-timeserv full-secret ads-web
domain-controller-usable = yes
domain-controllers = WIN-71HUMTROS3M.GOLINUXCLOUD.COM
[computer]
computer-site = Default-First-Site-Name
将 RHEL/CentOS 7/8 系统加入 Windows AD 域

adcli join 为本地机器在域中创建一个计算机帐户,并为该机器设置一个 keytab。 它不配置身份验证服务(例如 sssd)。

# adcli join golinuxcloud.com
Password for Administrator@GOLINUXCLOUD.COM:
adcli: couldn't connect to golinuxcloud.com domain: Couldn't authenticate as: Administrator@GOLINUXCLOUD.COM: KDC has no support for encryption type

此处我们得到的是“KDC不支持加密类型”,因为域控制器仍在使用RC4加密,这需要在客户端上启用,正如在先决条件部分中所通知的那样。此错误用于演示如果域控制器上未使用AES加密,可能会出现的错误。

因此,更新客户端上的加密策略并重新尝试 adcli join 命令。 默认情况下,它会提示输入管理员密码,但可以使用-U <USER>选项指定另一个用户:

# adcli join golinuxcloud.com
Password for Administrator@GOLINUXCLOUD.COM:

可以使用 klist -kt 检查 keytab,它应该以某种形式显示几个包含客户端主机名的条目:

# klist -kte
Keytab name: FILE:/etc/krb5.keytab
KVNO Timestamp           Principal
---- ------------------- ------------------------------------------------------
   2 03/05/2021 03:38:03 CENTOS8$@GOLINUXCLOUD.COM (DEPRECATED:arcfour-hmac)
   2 03/05/2021 03:38:03 CENTOS8$@GOLINUXCLOUD.COM (aes128-cts-hmac-sha1-96)
   2 03/05/2021 03:38:03 CENTOS8$@GOLINUXCLOUD.COM (aes256-cts-hmac-sha1-96)
   2 03/05/2021 03:38:03 host/CENTOS8@GOLINUXCLOUD.COM (DEPRECATED:arcfour-hmac)
   2 03/05/2021 03:38:03 host/CENTOS8@GOLINUXCLOUD.COM (aes128-cts-hmac-sha1-96)
   2 03/05/2021 03:38:03 host/CENTOS8@GOLINUXCLOUD.COM (aes256-cts-hmac-sha1-96)
   2 03/05/2021 03:38:03 host/centos8.golinuxcloud.com@GOLINUXCLOUD.COM (DEPRECATED:arcfour-hmac)
   2 03/05/2021 03:38:03 host/centos8.golinuxcloud.com@GOLINUXCLOUD.COM (aes128-cts-hmac-sha1-96)
   2 03/05/2021 03:38:03 host/centos8.golinuxcloud.com@GOLINUXCLOUD.COM (aes256-cts-hmac-sha1-96)
   2 03/05/2021 03:38:03 RestrictedKrbHost/CENTOS8@GOLINUXCLOUD.COM (DEPRECATED:arcfour-hmac)
   2 03/05/2021 03:38:03 RestrictedKrbHost/CENTOS8@GOLINUXCLOUD.COM (aes128-cts-hmac-sha1-96)
   2 03/05/2021 03:38:03 RestrictedKrbHost/CENTOS8@GOLINUXCLOUD.COM (aes256-cts-hmac-sha1-96)
   2 03/05/2021 03:38:03 RestrictedKrbHost/centos8.golinuxcloud.com@GOLINUXCLOUD.COM (DEPRECATED:arcfour-hmac)
   2 03/05/2021 03:38:03 RestrictedKrbHost/centos8.golinuxcloud.com@GOLINUXCLOUD.COM (aes128-cts-hmac-sha1-96)
   2 03/05/2021 03:38:03 RestrictedKrbHost/centos8.golinuxcloud.com@GOLINUXCLOUD.COM (aes256-cts-hmac-sha1-96)

配置 Kerberos (/etc/krb5.conf)

realmd不同,adcli不会自动配置SSSD和Kerberos。因此,必须手动配置这些服务,以便与AD域一起使用。整理完文件后,在删除域的注释后,该文件看起来类似于以下屏幕截图:

提示:

不要复制整个输出并粘贴到您的krb5.conf文件中,只需通过将 EXAMPLE.COM 替换为自己的DOMAIN.COM 来更新 REALM

Join Linux to Windows domain using adcli (RHEL/CentOS 7/8)

配置 NSS 和 PAM

名称服务开关 (NSS) 配置文件 /etc/nsswitch.conf 被各种 NSS 库使用; NSS 库之一是 /usr/lib64/libnss_sss.so.2。 NSS 配置文件确定可以从中获取名称服务信息的来源及其从一系列类别中的顺序。 每个类别的信息都由一个资源数据库名称标识; 这可以是用于名称解析的主机和用于数据库定位用户帐户的passwd

可以使用 PAM 的服务配置了相关的 PAM 模块,它们应该在 /etc/pam.d 目录中的文件中使用。 可以在单个文件中,例如 /etc/pam.d/login,或通过许多服务引用的命令文件(例如 /etc/pam.d/system-auth-ac)。

在 RHEL/CentOS 7 上

使用 authconfig 设置名称服务开关 (/etc/nsswitch.conf) 和 PAM 堆栈(/etc/pam.d/password-auth/etc/pam.d/system-auth

# authconfig --enablesssd --enablesssdauth --enablelocauthorize --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 上

authconfig 在 RHEL/CentOS 8 中被 authselect 取代。所以我们将使用 authselect 来配置我们在上一节中讨论过的各自的 PAM 和 NSS 文件。

# 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

如果在 /etc/nsswitch.conf 中检查 sss,可以看到所有依赖于特定库的数据库。 grep 命令可用于隔离这些条目,如下命令所示:

# grep sss /etc/nsswitch.conf
passwd:     sss files systemd
group:      sss files systemd
netgroup:   sss files
automount:  sss files
services:   sss files

此处解释了数据库名称:

  • passwd: 这指定了用户帐户
  • shadow: 这表示密码信息
  • **group:**这指定了组帐户
  • services: 这表示服务名称解析
  • netgroup: 这指定可以在访问控制规则中使用的主机组
  • automount: 这表示可由 autofs 自动挂载目录

可以再次使用 grep 显示 sssd 与 PAM 一起使用的配置,以从 /etc/pam.d/password-auth/etc/pam.d/system-auth 文件中过滤 sss:

# grep sss /etc/pam.d/*
/etc/pam.d/password-auth:auth        sufficient                                   pam_sss.so forward_pass
/etc/pam.d/password-auth:account     [default=bad success=ok user_unknown=ignore] pam_sss.so
/etc/pam.d/password-auth:password    sufficient                                   pam_sss.so use_authtok
/etc/pam.d/password-auth:session     optional                                     pam_sss.so
/etc/pam.d/system-auth:auth        sufficient                                   pam_sss.so forward_pass
/etc/pam.d/system-auth:account     [default=bad success=ok user_unknown=ignore] pam_sss.so
/etc/pam.d/system-auth:password    sufficient                                   pam_sss.so use_authtok
/etc/pam.d/system-auth:session     optional                                     pam_sss.so

可以看到身份验证模块用于所有可能的触发器:

  • auth: 这在身份验证期间使用
  • account: 这用于帐户限制
  • password: 这用于密码更改事件
  • session: 这在登录会话期间使用

配置 SSSD

再次使用 realmd 会自动创建和填充 SSSD 配置文件,即 /etc/sssd/sssd.conf,但使用 adcli 必须手动创建和更新此文件。 编辑 /etc/sssd/sssd.conf 并定义一个域(如果文件不存在,可能必须手动创建文件):

at /etc/sssd/sssd.conf
[sssd]
services = nss, pam
config_file_version = 2
domains = GOLINUXCLOUD.COM

[domain/GOLINUXCLOUD.COM]
id_provider = ad
override_homedir = /home/%d/%u
debug_level = 0
ldap_sasl_authid = SHORT_HOSTNAME$

[nss]
override_shell=/bin/bash

[pam]

确保 /etc/sssd/sssd.confroot:root所有,权限为 600

# chown root:root /etc/sssd/sssd.conf
# chmod 600 /etc/sssd/sssd.conf

# ls -l /etc/sssd/sssd.conf
-rw-------. 1 root root 208 Mar  2 17:39 /etc/sssd/sssd.conf

启用和启动/重启 SSSD 服务

# systemctl enable sssd
# systemctl restart sssd

检查 sssd.service 的状态:

Join Linux to Windows domain using adcli (RHEL/CentOS 7/8)

在 Linux 客户端上以 Active Directory 用户身份登录

尝试使用 Windows AD 用户登录到Linux 客户端并验证是否自动创建了主目录。 但首先需要检查Linux 客户端是否能够获取 AD 用户的用户详细信息:

# id GOLINUXCLOUD\\Administrator
uid=111800500(administrator) gid=111800513(domain users) groups=111800513(domain users),111800520(group policy creator owners),111800512(domain admins),111800572(denied rodc password replication group),111800518(schema admins),111800519(enterprise admins)

所以AD 中的管理员用户被 Linux 客户端检测到,所以尝试将用户切换到管理员:

# su - GOLINUXCLOUD\\Administrator
Creating home directory for administrator.
Last login: Tue Mar  2 17:41:26 IST 2021 on pts/0
$ exit
logout
#

创建/删除 Active Directory 用户

该命令可能不是最有用的工具之一,因为可以创建用户,但不能为新用户启用帐户或设置密码。这样,该命令不如其它一些使用adcli的工具有用。

在这里,我们创建一个AD用户“Amit Kumar”,用户名为Amit:

# adcli create-user amit --domain=GOLINUXCLOUD.COM --display-name="Amit Kumar"
Password for Administrator@GOLINUXCLOUD.COM:

现在,如果在 Microsoft AD 上进行验证,此用户处于禁用状态:

Join Linux to Windows domain using adcli (RHEL/CentOS 7/8)

所以必须先给这个用户分配一个密码。 右键单击用户,然后单击重置密码。 提供密码并点击确定

Join Linux to Windows domain using adcli (RHEL/CentOS 7/8)

现在要启用帐户,可以右键单击用户并选择启用帐户

Join Linux to Windows domain using adcli (RHEL/CentOS 7/8)

现在可以尝试在 Linux 客户端上使用这个新用户登录:

# id GOLINUXCLOUD\\amit
uid=111801121(amit) gid=111800513(domain users) groups=111800513(domain users)

# su - GOLINUXCLOUD\\amit
Creating home directory for amit.
~]$ logout

要删除刚刚创建的帐户,可使用以下命令:

# adcli delete-user  --domain=golinuxcloud.com amit

有一大堆命令可以与 adcli 一起使用,有关更多信息,可以查看 adcli 命令的手册页

总结

在本文中,研究了如何使用Active Directory作为身份存储,在Linux上利用用户和组。这种设置的简单性使其成为世界各地企业中非常有用和急需的解决方案。

在设置时间和 DNS 之前,需要做一些基础工作。 设置完成后,可以使用命令 adcli 将 sssd 配置为使用 Active Directory 作为身份源。

通过AD域中的RHEL系统,可以使用adcli在一定程度上管理此域,并允许用户通过控制台或SSH访问Linux命令行。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值