离开域
如果我们想逆转该过程并将自己从域中删除,只需运行“realm leave”命令,后跟域名,如下所示。
[jack@onitroad ~]# realm leave example.com
这将在没有任何进一步用户输入的情况下完成。
它将删除在 Active Directory 中创建的计算机对象,删除密钥表文件,并将 sssd.conf 和 krb5.conf 文件设置回默认值。
准备 CentOS
首先,我们要在 CentOS 中安装以下所有软件包。
yum install sssd realmd oddjob oddjob-mkhomedir adcli samba-common samba-common-tools krb5-workstation openldap-clients policycoreutils-python -y
CentOS 服务器需要能够解析 Active Directory 域才能成功加入它。
在这种情况下,我在 /etc/resolv.conf 中的 DNS 服务器设置为托管我希望加入的 example.com 域的 Active Directory 服务器之一。
[jack@onitroad ~]# cat /etc/resolv.conf search example.com nameserver 192.168.1.2
本教程中,我们将介绍如何通过命令行将 Linux 系统添加到 Microsoft Windows Active Directory (AD) 域。
这将允许我们使用 AD 域中的用户帐户通过 SSH 连接到 Linux 服务器,从而提供跨平台身份验证的中央来源。
配置 SSH 和 Sudo 访问
现在我们已成功将 CentOS 服务器加入 example.com 域,我们可以使用默认设置从 Active Directory 以任何域用户身份通过 SSH 登录。
[jack@onitroad ~]# ssh jack@onitroad jack@onitroad's password: Creating home directory for user1.
我们可以通过修改 /etc/ssh/sshd_config 文件来进一步限制 SSH 访问,并利用 AllowUsers 或者 AllowGroups 之类的东西来只允许 AD 中的某些用户或者组具有访问权限。
有关更多信息,请参阅我们的 sshd_config 文件教程。
如果我们对此文件进行了任何更改以应用它们,请不要忘记重新启动 sshd。
我们还可以修改我们的 sudoers 配置,以允许我们的域中的用户帐户具有所需的访问级别。
我通常创建一个名为“sudoers”之类的 Active Directory 组,将我的用户放入其中,然后通过在 /etc/sudoers.d/ 中创建一个文件来允许该组 sudo 访问,该文件允许 AD 集中控制 root 访问。
下面是一个例子,“sudoers”组将拥有完全的根访问权限。
[jack@onitroad ~]# cat /etc/sudoers.d/sudoers %sudoers ALL=(ALL) ALL
这个组只存在于Active Directory中,我们的Linux服务器可以看到user1是Active Directory中sudoers组的成员,并且尊重这个组配置,并按照上面的配置允许user1 root权限。
测试帐户的用户名是“user1”。
有了这个,example.com Active Directory 域中的 user1 帐户现在将能够使用 sudo 命令以 root 权限运行命令。
[jack@onitroad ~]$ sudo su [sudo] password for user1: [jack@onitroad user1]# [jack@onitroad user1]# whoami root
这就是它的全部内容,我们现在可以使用 Active Directory 域中的用户帐户通过 SSH 连接到 Linux 服务器,甚至可以从 AD 特定级别授予特定用户或者组访问权限。
将 CentOS 加入 Windows 域
现在我们已经解决了我们可以实际加入域的问题,这可以使用“领域加入”命令来完成,如下所示。
我们需要指定域中有权将计算机加入域的用户的用户名。
[jack@onitroad ~]# realm join --user=administrator example.com Password for administrator:
输入特定帐户的密码后,将自动配置 /etc/sssd/sssd.conf 和 /etc/krb.conf 文件。
这真的很棒,因为在加入域时手动编辑这些通常会导致各种小问题。
在此过程中还会创建 /etc/krb5.keytab 文件。
如果此操作失败,我们可以在命令末尾添加 -v 以获得非常详细的输出,这将为我们提供有关问题的更多详细信息,以便进一步进行故障排除。
我们可以通过运行“realm list”命令来确认我们在域中(域的 Linux 术语),如下所示。
[jack@onitroad ~]# realm list example.com type: kerberos realm-name: EXAMPLE.COM domain-name: example.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: %jack@onitroad login-policy: allow-realm-logins
成功完成后,将在 Active Directory 中的默认计算机容器中创建一个计算机对象,如下所示。
为了保持整洁,我喜欢将它移到 Linux 服务器的其他组织单位 (OU) 中,而不是将内容留在默认的计算机容器中,但这对于本练习来说并不重要。
现在我们的 Linux 服务器是 Active Directory 域的成员,我们可以执行一些测试。
默认情况下,如果我们要指定域中的任何用户,则需要指定域名。
例如,使用下面的“id”命令,我们不会为“管理员”返回任何信息,但是“jack@onitroad”显示帐户的 UID 以及该帐户在 Active Directory 域中所属的所有组。
[jack@onitroad ~]# id administrator id: administrator: no such user [jack@onitroad ~]# id jack@onitroad uid=1829600500(jack@onitroad) gid=1829600513(domain jack@onitroad) groups=1829600513(domain jack@onitroad),1829600512(domain jack@onitroad),1829600572(denied rodc password replication jack@onitroad),1829600519(enterprise jack@onitroad),1829600518(schema jack@onitroad),1829600520(group policy creator jack@onitroad)
我们可以通过修改 /etc/sssd/sssd.conf 文件来改变这种行为,以下几行需要改变:
use_fully_qualified_names = True fallback_homedir = /home/%jack@onitroad%d
下面,不需要指定完全限定的域名 (FQDN)。
这也会修改 /home 中的用户目录,使其在用户名后指定 FQDN。
use_fully_qualified_names = False fallback_homedir = /home/%u
要应用这些更改,请重新启动 sssd。
[jack@onitroad ~]# systemctl restart sssd
现在我们应该能够在不指定域的情况下找到用户帐户,如下所示,现在可以在以前没有的地方使用。
[jack@onitroad ~]# id administrator uid=1829600500(administrator) gid=1829600513(domain users) groups=1829600513(domain users),1829600512(domain admins),1829600572(denied rodc password replication group),1829600520(group policy creator owners),1829600519(enterprise admins),1829600518(schema admins)
如果这仍然不适合我们,我建议我们查看刷新 sssd 缓存。