PAM 允许使用sufficent
某些required
逻辑,例如
auth sufficient pam_a.so
auth required pam_b.so
auth required pam_c.so
这意味着“要么 a 为真,要么 b 必须为真,并且 c 必须为真”。
是否可以进行更复杂的运算?例如“(a 或 b) 和 (c 或 d)”或“(a 和 b) 或 (c 和 d)”?可能还需要更多层括号。
答案1
是的,确实存在可以跳过任意行数的逻辑。没有“分组括号”或任何类似的东西,但如果将刚才提到的逻辑与跳过行的能力结合起来,就可以有选择地排除行为。
以下是我的个人服务器的一个例子:
# Skip Google authenticator check if they're coming from a local IP.
auth [success=1 default=ignore] pam_access.so accessfile=/etc/security/access/nogoogle.conf noaudit
auth required pam_google_authenticator.so nullok
如果源 IP 来自我的本地网络,我实际上不需要双因素身份验证,因此我使用检查结果pam_access.so
在成功时跳过一行。如果检查失败,则不会发生任何事情,而是检查下一行。
您可以在pam.conf
手册页中找到有关此内容的更多信息。搜索“value1”。本节开头如下:
For the more complicated syntax valid control values have the following form: [value1=action1 value2=action2 ...] Where valueN corresponds to the return code from the function invoked in the module for which the line is defined. ...
请记住,这个逻辑要复杂得多,如果人们在编辑您的 PAM 配置时没有注意到存在跳行,他们可能会在错误的位置添加或删除行,从而导致各种混乱。