为什么所有 LDAP 用户都显示 getent passwd?

为什么所有 LDAP 用户都显示 getent passwd?

我们在 Solaris 和 RHEL 服务器上都使用了 LDAP 服务器,并计划将更多服务器迁移到 RHEL。但是,所有 Red Hat 服务器上的 LDAP 都存在问题。

当我输入“getent passwd”时,会显示整个 LDAP 服务器上的所有用户,而不仅仅是有权访问此服务器的用户。通常大约有 10 到 50 人有权访问服务器,因此 Solaris 会打印出此用户列表,而 Red Hat 会直接打印出 LDAP 中存在的所有用户列表(大约 650 个)。

我更喜欢 Solaris 上的行为,其中只有有权访问服务器的用户才会使用“getent passwd”列出。

如何配置 RHEL 以仅列出有权访问服务器的用户?

答案1

你正在限制访问/etc/security/access.conf,虽然它控制谁可以访问服务器,但对哪些用户没有影响可见的到服务器。这通常是你想要的:即使用户alice无法登录到服务器,如果她拥有共享文件系统上的文件,我希望看到:

$ ls -l ~alice
-rw-rw-r--. 1 alice alice 0 Aug  1 09:09 afile

代替:

$ ls -l ~alice
-rw-rw-r--. 1 5234 5234 0 Aug  1 09:09 afile

也就是说,即使用户无法登录系统,我也希望系统了解用户的情况。

如果要限制系统可见的用户集,则需要配置 NSS 子系统以实现某种 LDAP 过滤器。具体如何操作取决于您使用的工具:

  • user993553 提到nss_ldap,这是用于与 LDAP 集成的传统工具。

  • 一些较新的发行版使用固态存储系统,其中包括模块ldap_service_search_base中的一个参数LDAP

  • nslcd程序具有filter可应用于每张地图的选项

使用哪种机制取决于您正在运行的 RHEL 版本:RHEL 6 同时具有nslcdsssd(我正在使用nslcd),而我认为早期版本仅限于nss_ldap

答案2

如果可以选择,您可以按照以下方式扩展 ldap 架构

http://www.secure-computing.net/wiki/index.php/OpenLDAP/Authentication

为了获得此主机验证,我们将添加自定义架构以允许 posixAccount objectClass 上的主机属性。您可以在此处下载新架构。要使用此新架构,请解压缩并将 scn.schema 文件保存到 /usr/local/etc/openldap/schema,然后将以下行添加到您的 slapd.conf 文件中:

...

然后添加nss_ldap.conf nss_base_passwd dc=base,dc=local?one?host=thismachinehost

语法是base?scope?filter

这已在 freebsd 上进行了测试,其中 getent passwd 仅列出与过滤器匹配的用户。

答案3

这是默认行为,RHEL 限制使用 PAM 的用户,nss 尝试解析给定 ldap 搜索库中的所有可用用户/组条目。

可能存在这样的情况:系统有一个 nfs 挂载,其中包括无权访问机器的用户所拥有的文件,如果所有用户都对操作系统可见,您仍然可以解析用户(访问受到 PAM 限制,因此他们将无法登录)。

您可以使用以下选项之一来更改行为。

  1. 使用 SSSD,它默认不会枚举用户/组。(即 getent passwd 将仅列出本地用户)。

  2. 使用 ldap 过滤器,这样机器就只能看到所需的用户。只有当存在可用于过滤用户的特定过滤器时,这才有可能(例如:使用组的 memberof 属性)。

  3. 使用兼容模式过滤用户。

例如:

nsswitch.conf 
passwd: files compat
passwd_compat: ldap

in passwd file, add +@netgroup.

相关内容