普通账户行读取顺序

普通账户行读取顺序

我的身份验证集中在 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

是的,这似乎是正确的(除非您可能应该使用authand 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

这个模块每次都会成功。它用于将链的状态设置为成功如果之前没有模块对其进行操作。但这绝不是你的情况。

相关内容