Samba Active Directory 身份验证
先决条件¶
- 对 Active Directory 的一些了解
- 对 LDAP 的一些了解
介绍¶
在大多数企业中,微软的 Active Directory (AD) 是 Windows 系统和外部 LDAP 连接服务的默认身份验证系统。它允许您配置用户和组、访问控制、权限、自动挂载等等。
虽然将 Linux 连接到 AD 集群无法支持上述所有功能,但它可以处理用户、组和访问控制。可以通过在 Linux 端进行一些配置调整以及在 AD 端进行一些高级选项,来使用 AD 分发 SSH 密钥。
在 Rocky Linux 上使用 Active Directory 的默认方式是使用 SSSD,但 Samba 是一个功能更全面的替代方案。例如,文件共享可以使用 Samba 完成,而 SSSD 则不能。但是,本指南将涵盖使用 Samba 配置针对 Active Directory 的身份验证,并且不会包括 Windows 端的任何额外配置。
使用 Samba 发现和加入 AD¶
注意
本指南中使用的域名为 ad.company.local
,它代表 Active Directory 域。要遵循本指南,请将其替换为您的 AD 域的名称。
将 Linux 系统加入 AD 的第一步是发现您的 AD 集群,以确保双方(域控制器和 Linux 主机)的网络配置正确。
准备¶
- 确保以下端口在您的域控制器上对您的 Linux 主机开放
服务 | 端口(s) | 备注 |
---|---|---|
DNS | 53 (TCP+UDP) | |
Kerberos | 88, 464 (TCP+UDP) | 由 kadmin 用于设置和更新密码 |
LDAP | 389 (TCP+UDP) | |
LDAP-GC | 3268 (TCP) | LDAP 全局目录 - 允许您从 AD 中获取用户 ID |
- 确保您已将 AD 域控制器配置为 Rocky Linux 主机上的 DNS 服务器
使用 NetworkManager
# where your primary NetworkManager connection is 'System eth0' and your AD
# server is accessible on the IP address 10.0.0.2.
[root@host ~]$ nmcli con mod 'System eth0' ipv4.dns 10.0.0.2
- 确保双方(AD 主机和 Linux 系统)的时间同步(请参见 chronyd)
要检查 Rocky Linux 上的时间
[user@host ~]$ date
Wed 22 Sep 17:11:35 BST 2021
- 在 Linux 端安装 AD 连接所需的软件包
[user@host ~]$ sudo dnf install samba samba-winbind samba-client
发现¶
您现在应该能够从您的 Linux 主机成功发现您的 AD 服务器(s)。
[user@host ~]$ realm discover ad.company.local
ad.company.local
type: kerberos
realm-name: AD.COMPANY.LOCAL
domain-name: ad.company.local
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
存储在您的 Active Directory DNS 服务中的相关 SRV 记录将允许发现。
加入¶
从 Linux 主机成功发现 Active Directory 安装后,您应该可以使用 realmd
加入域,它将使用 adcli
和其他类似工具来协调 Samba 的配置。
[user@host ~]$ sudo realm join -v --membership-software=samba --client-software=winbind ad.company.local
系统将提示您输入域的管理员密码,请输入。
如果此过程提示关于加密的错误信息“KDC has no support for encryption type
”,请尝试更新全局加密策略以允许使用旧的加密算法
[user@host ~]$ sudo update-crypto-policies --set DEFAULT:AD-SUPPORT
如果此过程成功,您现在应该能够提取 Active Directory 用户的 passwd
信息。
[user@host ~]$ sudo getent passwd administrator@ad.company.local
AD\administrator:*:1450400500:1450400513:Administrator:/home/administrator@ad.company.local:/bin/bash
注意
getent
从名称服务切换库 (NSS) 获取条目。这意味着,与 passwd
或 dig
等命令相反,它将查询不同的数据库,包括 /etc/hosts
(对于 getent hosts
)或 samba
(对于 getent passwd
)的情况。
realm
提供一些有趣的功能,您可以使用这些功能
选项 | 观察 |
---|---|
--computer-ou='OU=LINUX,OU=SERVERS,dc=ad,dc=company.local' | 存储服务器帐户的 OU |
--os-name='rocky' | 指定存储在 AD 中的操作系统名称 |
--os-version='8' | 指定存储在 AD 中的操作系统版本 |
-U admin_username | 指定管理员帐户 |
尝试身份验证¶
现在您的用户应该能够针对 Active Directory 对您的 Linux 主机进行身份验证。
在 Windows 10 上:(它提供自己的 OpenSSH 副本)
C:\Users\John.Doe> ssh -l john.doe@ad.company.local linux.host
Password for john.doe@ad.company.local:
Activate the web console with: systemctl enable --now cockpit.socket
Last login: Wed Sep 15 17:37:03 2021 from 10.0.10.241
[john.doe@ad.company.local@host ~]$
如果成功,您已成功配置 Linux 以使用 Active Directory 作为身份验证来源。
消除用户名中的域名称¶
在完全默认的设置中,您需要使用您的 AD 帐户登录,并在用户名中指定域(例如,john.doe@ad.company.local
)。如果这不是预期的行为,而您希望能够在身份验证时省略默认域名称,则可以配置 Samba 以默认使用特定域。
这是一个相对简单的过程,需要在您的 SSSD 配置文件中进行配置调整。
[user@host ~]$ sudo vi /etc/samba/smb.conf
[global]
...
winbind use default domain = yes
通过添加 winbind use default domain
,您指示 Samba 推断用户正在尝试作为 ad.company.local
域中的用户进行身份验证。这允许您以类似 john.doe
的方式进行身份验证,而不是 john.doe@ad.company.local
。
要使此配置更改生效,您必须使用 systemctl
重新启动 smb
和 winbind
服务。
[user@host ~]$ sudo systemctl restart smb winbind
同样,如果您不希望您的主目录后缀为域名称,您可以将这些选项添加到您的配置文件 /etc/samba/smb.conf
中
[global]
template homedir = /home/%U
不要忘记重新启动 smb
和 winbind
服务。
作者:Neel Chauhan
贡献者:Steven Spencer, Ganna Zhyrnova