我有几个Linux服务器(Ubuntu的12.04)设置来validation外部(到我的分支机构)LDAP(Novell Edirectory专门)的用户login。 这是行之有效的,但是我正在尝试通过LDAP组中的成员来过滤用户login。
Edir中的用户帐户如下所示:
dn: cn=mmcloud,ou=eng,o=lsi loginShell: /bin/bash homeDirectory: /home/mmcloud gidNumber: 2001 uidNumber: 9418 mail: xxxxxx@xxxxxxxxx uid: mmcloud initials: Q givenName: Moran sn: McCloud objectClass: inetOrgPerson objectClass: organizationalPerson objectClass: ndsLoginProperties objectClass: Person objectClass: Top objectClass: posixAccount eMailAddress: 7#xxxxx@xxxxxxxxxxxx cn: mmcloud
在Edir中有一个小组条目:
dn: cn=shellacct,ou=groups,ou=eng,o=lsi memberUid: jbarlin memberUid: mmccloud memberUid: ssemryn memberUid: cdesmon gidNumber: 2009 objectClass: groupOfNames objectClass: Top objectClass: posixGroup
我只希望shellacct组中的用户login。 我在/etc/ldap.conf发现了许多使用pam_filter例子,但是只通过过滤特定的userDn属性来获得filter的工作,例如:
pam_filter &(objectclass=user) pam_filter &(objectclass=Person) pam_filter &(loginShell=/bin/bash)
我想要的是过滤组的成员资格。 组groupDn是cn=shellacct,ou=groups,ou=eng,o=lsi (gid = 2009) 。 我试过在/etc/ldap.conf :
pam_filter &(objectclass=posixAccount)(|(gidNumber=2009)) pam_filter |(member=cn=shellacct,ou=groups,ou=eng,o=lsi) pam_filter |(memberUid=cn=shellacct,ou=groups,ou=eng,o=lsi)
请问pam_filter为了我想要做的还是仅仅看userDn来进行过滤?
您可以使用/etc/ldap.conf的pam_groupdn选项来获取您想要的位置。 在过去,我使用pam_check_host_attr来实现类似的目的,它的工作pam_check_host_attr与我想要的完全一样(例如,LDAP条目必须具有host ,而且主机名称是您要login的主机名称)。
PAM模块pam_succeed_if.so似乎是理想的。 事实上,我在我的许多服务器上以这种方式使用它。 从Ubuntu 14.04授权到MS AD域的示例configuration,从/etc/pam.d/common-account :
account sufficient pam_unix.so account requisite pam_ldap.so account sufficient pam_succeed_if.so user ingroup unix-admins account sufficient pam_succeed_if.so user ingroup auth-$hostname account requisite pam_deny.so
用$ hostnamereplace服务器名称。 成为unix-admins或auth- $ hostname的成员授予访问权限。
另外考虑使用nslcd (0.9+),因为它可以识别嵌套(间接)组成员资格。
只是想把这里留给任何其他寻找这种事情的人。 看看/etc/security/access.conf 。 它识别用户/组/本地/ LDAP。 这是我最终做的。 这是一个很好的ACL一站式服务。
您需要在/etc/pam.d/中的各种文件中启用pam_access.conf
请注意系统更新重新设置这些编辑。 不知道如何解决这个问题。 也许上面提到的pam_succeed会是一个更好的地方。
# grep access /etc/pam.d/* ... /etc/pam.d/login:# Uncomment and edit /etc/security/access.conf if you need to ... /etc/pam.d/login:account required pam_access.so /etc/pam.d/sshd:# Uncomment and edit /etc/security/access.conf if you need to set complex ... /etc/pam.d/sshd:account required pam_access.so
例如access.conf :
# allow root from the backup system + : root : 10.10.16.2 # allow root from cron, serial port and tty consoles + : root : cron crond :0 ttyS0 tty1 tty2 tty3 tty4 tty5 tty6 # allow ldapusers on 10.0.0.0/8 subnet + : ldapuser4 ldapuser1 ldapuser7: 10.0.0.0/8 # allow users in ldap posixGroup on 10.10.16.0 subnet + : ldapssh : 10.10.16.0/24 # allow everyone in the localhost sftponly group from anywhere + : sftponly : ALL # drop everyone else from anywhere - : ALL : ALL