我正在尝试将我的 Ubuntu 20 虚拟机加入我们的 Active Directory 设置。一切似乎都正常,只是显示的用户 ID 与 Active Directory 中的不匹配。这意味着(除其他问题外)用户无法访问由另一台服务器提供/挂载的主目录。
rgoodman 的用户 ID 应如下所示(来自非工作机器):
$ ls -ld /home/rgoodman
drwxr-xr-x 70 1101210 1100513 12288 Feb 23 2019 /home/rgoodman
在一台正在运行的服务器(实际上运行的是 CentOS)上,我看到了以下内容:
$ id rgoodman
uid=1101210(rgoodman) gid=1100513(domain users) groups=1100513(domain users),1101210(rgoodman),1110778(customer-support-sg),1110770(cacti-sg),1110867(software-development-sg),1110838(phoenix-dev-sg),1000001(BUILTIN\users)
在我无法正常工作的服务器上,我看到了以下内容:
$ id rgoodman
uid=945201210(rgoodman) gid=945200513(domain users) groups=945200513(domain users),945210867(software-development-sg),945210838(phoenix-dev-sg),945210778(customer-support-sg),945210770(cacti-sg)
有趣的是,每个数字的末尾都相同,但前缀不同。如何更改此计算机上的前缀以匹配 AD 中的内容?工作计算机列表末尾的 BUILTIN\users 是线索吗?
答案1
我假设您正在使用 SSSD 与 Active Directory 集成。我猜想您的 CentOS 和 Ubuntu 服务器之间的 SSSD 配置只是有所不同。
“每个数字的结尾”几乎肯定对应于消除在 Active Directory 中。这通常会添加到 SSSD 中的“切片”范围中。这很令人困惑,但记录得相当好:Ubuntu 手册页:sssd-ad - SSSD Active Directory 提供程序 - ID 映射。
您说“用户 ID ... 与 Active Directory 中的不匹配”。您实际上是在 Active Directory 中定义 uid,还是真的意味着它们与 CentOS 服务器不匹配?如果您在 AD 中定义值,例如使用uidNumber
uid 的属性,那么您可以更新您的sssd.conf
以禁用自动 id 映射。配置将类似于:
ldap_id_mapping = False
ldap_schema = ad
如果您想保留我认为正在发生的自动映射,一个可能的解决方法是将您的 AD 域设置为默认域。默认域将映射到切片 0。这可以帮助使 id 映射与其他设置保持一致:
ldap_idmap_default_domain_sid = S-1-5-21-blahblahblah
您可以将其设置debug_level
为一个较高的值,并且日志应该相当清楚地表明 uid 是如何生成的。
如果你更改了 SSSD 中的 id-mapping 设置,请务必清除 SSSD 缓存完全地再次测试之前:
systemctl stop sssd
rm /var/lib/sss/{db,mc}/*
sss_cache -E
# optionally clear debug logs
truncate -s 0 /var/log/sssd/*.log
systemctl start sssd
您没有提供关于各种系统如何加入 AD 的信息,因此其他工具也可能发挥作用。例如,Samba 可用于与 AD 集成并使用其自己的 id 映射选项。