如何在 Linux 上过滤 ldap 用户登录?

如何在 Linux 上过滤 ldap 用户登录?

我设置了多台 Linux 服务器 (ubuntu 12.04),用于通过外部 (对我的分支机构而言) LDAP (特别是 Novell Edirectory) 验证用户登录。这种方法运行良好,但是我尝试通过 LDAP 组成员身份来过滤用户登录。

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登录。我发现了许多使用pam_filterin 的示例/etc/ldap.conf,但只能通过过滤特定userDn属性才能使过滤器正常工作,例如:

 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过滤?

答案1

PAM 模块pam_succeed_if.so似乎是理想的选择。事实上,我在我的许多服务器上都这样使用。Ubuntu 14.04 授权 MS AD 域的示例配置来自/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

替换服务器名称$主机名. 成为unix 管理员或者验证-$主机名授予访问权限。

还可以考虑使用nslcd(0.9+),因为它可以识别嵌套(间接)组成员身份。

答案2

您可能能够使用pam_groupdn选项来/etc/ldap.conf到达您想去的地方。我pam_check_host_attr过去曾将其用于类似的目的,并且它完全按照我的要求工作(即 LDAP 条目必须具有一个host以您尝试登录的主机名作为值的属性)。

答案3

只是想把这个留在这里,供其他正在寻找此类东西的人使用。看看/etc/security/access.conf。它可以识别用户/组/本地/LDAP。这就是我最终做的事情。它是 ACL 的一站式商店。

您需要pam_access.conf在以下文件中启用/etc/pam.d/

请注意系统更新重新设置了这些编辑。不确定如何解决这个问题。也许上面提到的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

相关内容