我希望有一些PAM / LDAP大师能够帮助我。 我最近在Ubuntu服务器上设置了一个LDAP目录,为我的客户端(用于基于Web的系统)和员工(需要通过SSHlogin)保存帐户。
LDAPauthentication工作正常。 然而,我无法获得帐户限制的工作:员工帐户将有2001
和2999
之间的ID,将成为ssh-users
组的成员,以允许他们login到服务器。
有关的限制在/etc/ldap.conf
,分别是pam_min_uid
, pam_max_uid
和pam_groupdn
。
pam_groupdn
包含我的ssh-users
组的完整DN。 pam_min_uid
= 2000
和pam_max_uid
= 2999
。
现在,我已经设法通过添加:
account [success=1 default=ignore] pam_ldap.so
在/etc/pam.d/common-account
的pam_unix.so
行之上。 但是,本地Unix帐户可以不login:SSH服务器尽快终止连接。
我已经在上面的文件中设置了sufficient
的pam_ldap.so
模块,但是那么无效的用户会收到一条消息说他们无法login,但是无论如何都会logging它们。
那么,我怎样才能为LDAP用户设置这些帐户限制,同时仍然允许UNIX用户login?
正如你可以猜到我是PAM的新手,虽然我设法得到“自动使主目录”模块工作:-)
非常感谢,安迪
PAM有能力限制基于访问控制列表(至less在Ubuntu上)的访问权限,就像kubanskamac的回答(+1)将组视为posix组,它们是否存储在LDAP, /etc/group
或NIS中。
/etc/security/access.conf
是访问列表文件。 在我的文件中,我最后说到:
-:ALL EXCEPT root sysadmin (ssh-users):ALL
这会拒绝除根,系统pipe理员和组ssh-users(在LDAP中)无论他们从何处login(第二个ALL
)的ALL
。
然后在我的PAM帐户文件(这是一个帐户模块),我最后添加:
account required pam_access.so
告诉PAM使用这个文件。 它的工作原理:-)
我会简单地使用
auth required pam_listfile.so sense=accept item=group file=/etc/groups.allow onerr=fail
只允许特定的组(包括本地和LDAP组)。 这样你就不必在ldap.conf
指定任何东西。
如果你想保持授权的方式,你不应该过滤用户的“帐户”通行证。 我相信你应该在“auth”通行证上做。 其次,正如你所看到的,pam_unix同时处理本地和LDAP帐户(至less在“帐户”过程中),所以看起来完全不需要pam_ldap。
编辑:第三,如果你坚持有“帐户”通过(我认为可能有奇怪的副作用)的东西,你的序列应该结束:…,“足够的pam_ldap”,“所需的pam_localuser”,“所需的pam_unix” 。 我的意思是,如果您有其他模块,请在pam_ldap之前移动它们,否则由于“sufficient”子句,LDAP帐户将被忽略。
只需添加@ andy-shellam,以下是我的common-account
文件:
account [success=2 new_authtok_reqd=done default=ignore] pam_unix.so account [success=1 default=ignore] pam_ldap.so account requisite pam_deny.so account required pam_access.so account required pam_permit.so