我已经通过 ldap 设置了 linux 客户端身份验证,它可以正常工作。我想通过添加或删除帐户的不同 OU 来控制用户对多个服务的访问。例如,如果允许用户登录 linux 计算机,则其 ou 必须包含“linux”。如果允许此用户访问 redmine,则其 ou 也必须包含“redmine”。
问题是,/etc/ldap.conf 中的 pam_filter 参数被忽略。当我设置它时
pam_filter ou=linux
到达 LDAP 服务器的搜索字符串不包含此过滤器:
openldap slapd[5374]: conn=1857 op=1 SRCH base="ou=people,dc=rwth-cbmb,dc=de" scope=2 deref=0 filter="(objectClass=posixAccount)"
正如我所说,我一直在 redmine(票证跟踪系统)中使用它,我也在其中设置了 ldap 过滤器,并且它可以正常工作。我在服务器上收到以下搜索请求:
openldap slapd[5374]: conn=1863 op=1 SRCH base="ou=people,dc=rwth-cbmb,dc=de" scope=2 deref=0 filter="(&(objectClass=*)(uid=alex)(ou=redmine))"
我有以下软件包版本:
ldap-auth-client 0.5.3
ldap-auth-config 0.5.3
ldap-utils 2.4.28-1.1ubuntu4.2
libldap-2.4-2 2.4.28-1.1ubuntu4.2
libnss-ldap 264-2.2ubuntu2
libpam-ldap 184-8.5ubuntu2
客户端ubuntu 12.04,服务器ubuntu server 10.04。
答案1
好的,解决方案是使用
nss_base_passwd ou=people,dc=rwth-cbmb,dc=de??ou=linux
在客户端的 /etc/ldap.conf 中。根据文档:
句法:
nss_base_XXX 基础?范围?过滤器
我不知道为什么 pam_filter 不起作用,但 nss_* 解决了这个问题。
答案2
将以下行添加到 /etc/pam_ldap.conf 文件
pam_check_host_attr yes
来自pam_ldap 手册页:
验证 pam_check_host 属性
指定是否应检查“host”属性以获得登录授权(PAM 堆栈中的“account”)。默认不检查。如果设置为“yes”且用户没有“host”属性的值,则用户将无法登录。