我的 Windows 域中有一个 Ubuntu 18.04 LTS 客户端以及 Windows 2012 R2 Active Directory 。我想让这个 ubuntu 客户端成为 Windows 域和活动目录的成员。有没有明确的解决方案或例程可以做到这一点?
答案1
目前,将现代 Linux 集成到 AD 的推荐解决方案通常是使用sssd
.
确保安装了必要的软件包:
sudo apt install krb5-user samba sssd chrony
安装krb5-user
将提示三件事,并使用通用 Kerberos 名称:
- 域名:在处理 AD 时,这是 AD 域的名称,大写。
- KDC 服务器的名称:这是 AD 域控制器的工作之一。
- Kerberos 管理服务器的名称:这也是 AD 域控制器。
由于Active Directory身份验证基于Kerberos,因此要求系统时钟必须与AD服务器的时钟合理同步。通常,AD 服务器会为此提供 NTP 服务。如果您用于chrony
时间同步,请将(最近的)AD 域控制器的名称也添加到/etc/chrony/chrony.conf
:
server my.ad.domain.controller.example
即使您没有与 Windows 系统共享任何 Linux 目录,也需要 Samba 来执行一些与 AD 身份验证相关的服务。将其添加到以下[global]
部分/etc/samba/smb.conf
:
[global]
workgroup = SHORT_NAME_OF_AD_DOMAIN
client signing = yes
client use spnego = yes
kerberos method = secrets and keytab
realm = AD.DOMAIN.FULL.NAME
security = ads
酌情更换SHORT_NAME_OF_AD_DOMAIN
和。AD.DOMAIN.FULL.NAME
创建 SSSD 配置文件/etc/sssd/sssd.conf
:
[sssd]
services = nss, pam
config_file_version = 2
domains = AD.DOMAIN.FULL.NAME
[domain/AD.DOMAIN.FULL.NAME]
id_provider = ad
access_provider = ad
# Use this if users are being logged in at /.
# This example specifies /home/DOMAIN-FQDN/user as $HOME. Use with pam_mkhomedir.so
override_homedir = /home/%d/%u
# Uncomment if the client machine hostname doesn't match the computer object on the DC.
# ad_hostname = mymachine.ad.domain.full.name
# Uncomment if DNS SRV resolution is not working
# ad_server = dc.ad.domain.full.name
# Uncomment if the AD domain is named differently than the Samba domain
# ad_domain = AD.DOMAIN.FULL.NAME
# Enumeration is discouraged for performance reasons.
# enumerate = true
该文件需要受到保护,以便只有 root 可以访问它,否则sssd
将拒绝启动:
sudo chown root:root /etc/sssd/sssd.conf
sudo chmod 600 /etc/sssd/sssd.conf
确保系统始终知道其完全合格的 DNS 域名;如果需要,将其添加到/etc/hosts
.
然后重新启动已修改配置的服务:
sudo systemctl restart chrony.service
sudo systemctl restart smbd.service nmbd.service
sudo systemctl start sssd.service
现在您应该已经能够使用kinit
AD 执行初始 Kerberos 身份验证。使用具有向域添加新系统所需权限的 AD 用户帐户以 root 身份执行此操作:
sudo kinit Administrator
验证您是否确实获得了 Kerberos 身份验证票证:
sudo klist
现在您应该能够使用此命令来实际加入 AD 域:
sudo net ads join -k
如果此命令成功完成,您现在应该能够使用 Linux 命令查询 AD 用户的用户帐户信息:
getent passwd some-AD-username
由于新用户可以随时添加到 AD,因此您需要设置一种机制,在登录时为任何 AD 用户自动生成主目录(如果该目录尚不存在)。将此行添加到/etc/pam.d/common-session
,直接在该session required pam_unix.so ...
行之后:
session required pam_mkhomedir.so skel=/etc/skel/ umask=0022
override_homedir
中的行将确定sssd.conf
AD 用户主目录的路径名。