如何使我的 Ubuntu 客户端成为 Windows Server 2012 Active Directory 域的成员以具有互操作性?

如何使我的 Ubuntu 客户端成为 Windows Server 2012 Active Directory 域的成员以具有互操作性?

我的 Windows 域中有一个 Ubuntu 18.04 LTS 客户端以及 Windows 2012 R2 Active Directory 。我想让这个 ubuntu 客户端成为 Windows 域和活动目录的成员。有没有明确的解决方案或例程可以做到这一点?

答案1

目前,将现代 Linux 集成到 AD 的推荐解决方案通常是使用sssd.

这是 Ubuntu 18.04 官方文档中的内容。

确保安装了必要的软件包:

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

现在您应该已经能够使用kinitAD 执行初始 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.confAD 用户主目录的路径名。

相关内容