我希望一些 PAM/LDAP 专家能够帮助我。我最近在 Ubuntu Server 上设置了一个 LDAP 目录,用于保存我的客户(用于基于 Web 的系统)和员工(需要通过 SSH 登录)的帐户。
LDAP 身份验证运行正常。但是我无法使帐户限制正常工作:员工帐户的 ID 介于和之间2001
,2999
并且将成为该组的成员ssh-users
,以允许他们登录服务器。
所讨论的限制是/etc/ldap.conf
,以及pam_min_uid
,pam_max_uid
和pam_groupdn
。
pam_groupdn
包含我的组的完整 DN ssh-users
。 pam_min_uid
=2000
和pam_max_uid
= 2999
。
现在,我已设法通过添加以下内容使它们正常工作:
account [success=1 default=ignore] pam_ldap.so
上面的pam_unix.so
行/etc/pam.d/common-account
。但是,本地 Unix 帐户无法登录:SSH 服务器会在他们尝试时立即终止连接。
我已经在上述文件中设置了pam_ldap.so
模块,但是无效用户会收到一条消息,提示他们无法登录,但是系统仍然会将他们登录。sufficient
那么,如何为 LDAP 用户设置这些帐户限制,同时仍允许 UNIX 用户登录?
您可能已经猜到我是 PAM 的新手,尽管我已经设法让“自动创建主目录”模块运行起来 :-)
非常感谢,安迪
答案1
PAM 能够根据访问控制列表(至少在 Ubuntu 上)限制访问,就像 kubanskamac 的回答(+1)一样,它将组视为 posix 组,无论它们是存储在 LDAP/etc/group
还是 NIS 中。
/etc/security/access.conf
是访问列表文件。在我的文件中,我在末尾添加了以下内容:
-:ALL EXCEPT root sysadmin (ssh-users):ALL
这将拒绝除 root、sysadmin 和 ssh-users 组(在 LDAP 中)之外的所有人,无论他们从哪里登录(第二个ALL
)。
然后在我的 PAM 帐户文件(这是一个帐户模块)中,我在最后添加:
account required pam_access.so
它告诉 PAM 使用这个文件。它工作得很好 :-)
答案2
我只需使用
auth required pam_listfile.so sense=accept item=group file=/etc/groups.allow onerr=fail
仅允许特定组(本地组和 LDAP 组)。这样,您就不必在 中指定任何内容ldap.conf
。
如果您想按照自己的方式进行授权,则不应在“帐户”通道上过滤用户。我相信您应该在“身份验证”通道上这样做。其次,正如您自己所看到的,pam_unix 处理本地和 LDAP 帐户(至少在“帐户”通道上),因此似乎根本不需要 pam_ldap。
编辑:第三,如果您坚持让“帐户”传递内容(我认为这可能会产生奇怪的副作用),您的序列应该以以下内容结尾:...,“足够的 pam_ldap”,“必需的 pam_localuser”,“必需的 pam_unix”。我的意思是,如果您有任何其他模块,请将它们移到 pam_ldap 之前 - 否则由于“足够的”子句,它们将被 LDAP 帐户忽略。
答案3
只是为了添加到@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