我们在Solaris和RHEL服务器上使用LDAP服务器,并计划将更多服务器迁移到RHEL。 但是,我们在所有红帽服务器上都有LDAP问题。
当input“getent passwd”时,将显示整个LDAP服务器上的所有用户,而不仅仅是有权访问此服务器的用户。 正常情况下,大约有10到50人可以访问服务器,所以Solaris打印出这个用户列表,而红帽公司则打印出LDAP中存在的所有用户列表(大约650)。
我更喜欢Solaris上的行为,其中只有具有访问服务器权限的用户才列有“getent passwd”。
如何configurationRHEL以仅列出有权访问服务器的用户?
您限制/etc/security/access.conf访问权限,它控制谁可以访问服务器,而不会影响服务器可见的用户。 这通常是你想要的:即使用户alice无法login到服务器,如果她拥有共享文件系统上的文件,我想看到:
$ 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
也就是说,我希望系统知道用户,即使他们不能login到系统。
如果您想要限制系统可见的用户集,则需要configurationNSS子系统来实现某种types的LDAPfilter。 你怎么做取决于你使用的是什么工具:
user993553提到了nss_ldap,这是与LDAP集成的传统工具。
一些较新的发行版使用SSSD ,其中包括LDAP模块中的ldap_service_search_base参数,
nslcd程序具有可应用于每个映射的filter选项
你使用的机制取决于你正在运行的RHEL版本:RHEL 6有nslcd和sssd (我使用的是nslcd ),而我认为早期的版本只限于nss_ldap 。
如果这是一个选项,您可以按照以下方式扩展您的ldap模式
从http://www.secure-computing.net/wiki/index.php/OpenLDAP/Authentication
为了获得这个主机validation,我们将添加一个自定义模式,以允许在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上testing的,getent passwd然后只列出匹配filter的用户。
这是默认行为,RHEL限制使用PAM的用户,nss尝试parsing给定ldapsearch库中的所有可用用户/组条目。
有些情况下,系统有一个nfs mount,其中包含无权访问本机的用户拥有的文件,如果所有操作系统都可以访问,仍然可以parsing用户(访问权限受PAM限制,能够login)。
您可以使用以下选项之一来更改行为。
使用SSSD,默认情况下不会枚举用户/组。 (即; getent passwd将只列出本地用户)。
使用ldapfilter,以便只有所需的用户对机器可见。 这只有在可以用来过滤用户的特定filter(例如:在组上使用成员属性)时才是可能的。
使用compat模式来过滤用户。
例如:
nsswitch.conf passwd: files compat passwd_compat: ldap in passwd file, add +@netgroup.