使用 LDAP 和 PAM 限制帐户登录

And*_*lam 14 ubuntu ldap pam

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

LDAP 身份验证工作正常。但是,我无法使帐户限制起作用:员工帐户将在2001和之间具有 ID ,2999并且将成为ssh-users组的成员以允许他们登录到服务器。

有问题的限制在/etc/ldap.conf、 和pam_min_uidpam_max_uidpam_groupdn

pam_groupdn包含我ssh-users组的完整 DN 。 pam_min_uid=2000pam_max_uid= 2999

现在,我通过添加以下内容设法让它们工作:

account [success=1 default=ignore] pam_ldap.so
Run Code Online (Sandbox Code Playgroud)

中的pam_unix.so线以上/etc/pam.d/common-account。但是,本地 Unix 帐户无法登录:SSH 服务器在尝试后立即终止连接。

我已经在上面的文件中设置了pam_ldap.so模块sufficient,但是无效的用户收到一条消息,说他们无法登录,但无论如何它都会登录。

那么,如何为 LDAP 用户设置这些帐户限制,同时仍然允许 UNIX 用户登录?

你可能猜到我是 PAM 的新手,尽管我已经设法让“自动创建主目录”模块正常工作:-)

非常感谢,安迪

And*_*lam 11

PAM 能够根据访问控制列表(至少在 Ubuntu 上)来限制访问,就像 kubanskamac 的答案 (+1) 将这些组视为 posix 组,无论它们存储在 LDAP/etc/group还是 NIS 中。

/etc/security/access.conf是访问列表文件。在我的文件中,我放在最后:

-:ALL EXCEPT root sysadmin (ssh-users):ALL
Run Code Online (Sandbox Code Playgroud)

这将拒绝除 root、sysadmin 和 ssh-users 组(在 LDAP 中)之外的所有人从(第二个ALL)登录的任何地方。

然后在我的 PAM 帐户文件(这是一个帐户模块)中,我在最后添加:

account required pam_access.so
Run Code Online (Sandbox Code Playgroud)

它告诉 PAM 使用这个文件。它是一种享受:-)


kub*_*zyk 5

我会简单地使用

auth required    pam_listfile.so   sense=accept item=group file=/etc/groups.allow onerr=fail
Run Code Online (Sandbox Code Playgroud)

只允许特定组(本地和 LDAP 组)。这样您就不必在ldap.conf.

如果您想以自己的方式保持授权,则不应在“帐户”通行证上过滤用户。我相信您应该在“身份验证”通过时进行。其次,正如您自己看到的,pam_unix 处理本地和 LDAP 帐户(至少在“帐户”传递上),因此似乎根本不需要 pam_ldap。

编辑:第三,如果你坚持在“帐户”通行证上有东西(我认为这可能会产生奇怪的副作用),你的序列应该以:...,“足够的pam_ldap”,“需要的pam_localuser”,“需要的pam_unix”结束. 我的意思是,如果您有任何其他模块,请将它们移动到 pam_ldap 之前 - 否则由于“足够”子句,它们将被 LDAP 帐户忽略。