使用 LDAP 和 PAM 限制账户登录

使用 LDAP 和 PAM 限制账户登录

我希望一些 PAM/LDAP 专家能够帮助我。我最近在 Ubuntu Server 上设置了一个 LDAP 目录,用于保存我的客户(用于基于 Web 的系统)和员工(需要通过 SSH 登录)的帐户。

LDAP 身份验证运行正常。但是我无法使帐户限制正常工作:员工帐户的 ID 介于和之间20012999并且将成为该组的成员ssh-users,以允许他们登录服务器。

所讨论的限制是/etc/ldap.conf,以及pam_min_uidpam_max_uidpam_groupdn

pam_groupdn包含我的组的完整 DN ssh-userspam_min_uid=2000pam_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

相关内容