我的身份验证集中在 LDAP 中。我有一个登录系统,无需任何 ldap 即可工作,因此它存在于我的/etc/passwd
文件中。这是 pam.d 目录中我的常用帐户文件。
account required pam_unix.so
account sufficient pam_succeed_if.so uid < 10000 quiet
account [default=bad success=ok user_unknown=ignore] pam_ldap.so
account required pam_permit.so
我对此没有问题,但我想知道这个文件是否排序良好,因为在某些文档中,pam_ldap.so 配置行是第一个。
感谢您的回答。
答案1
是的,这似乎是正确的(除非您可能应该使用auth
and not account
)。让我们逐一分析每一行:
auth required pam_unix.so
pam_unix
在这里,您通过(标准密码验证)进入链。该模块意味着required
无论发生什么,链条都会继续向下延伸。然而,如果该模块失败,该链将被标记为失败,并且用户最终可能被拒绝访问。
auth sufficient pam_succeed_if.so uid < 10000 quiet
该行检查请求的 UID。如果模块成功(用户ID低于10000),链将停止,因为模块是sufficient
。但是,这不会更改前一个模块设置的标记:如果 UNIX 身份验证失败,即使成功,required
该链也将以失败结束。pam_succeed_if
auth [default=bad success=ok user_unknown=ignore] pam_ldap.so
如果我们在这里,pam_succeed_if
一定是失败了(因为它没有结束作为sufficient
模块的链)。这意味着我们的 UID 高于 10000(我相信这是您为 LDAP 用户设置的阈值)。该模块的行为更详细一些:
- 如果成功,该链将被标记为成功 (
ok
)。这将对抗 UNIX 模块的结果并使链恢复到成功状态。 - 如果 LDAP 服务器不知道该用户,则该模块将被忽略。您的链的结果将是
pam_unix
. - 在所有其他情况下 (
default
),模块将链标记为失败 (bad
),无论 UNIX 是否成功。
最后,你有一个虚拟模块:
auth required pam_permit.so
这个模块每次都会成功。它用于将链的状态设置为成功如果之前没有模块对其进行操作。但这绝不是你的情况。