使用PAM更复杂的AND / OR结构

PAM允许使用sufficent和一些逻辑required的,如

 auth sufficient pam_a.so auth required pam_b.so auth required pam_c.so 

这意味着“要么是真的,要么b必须是真的,那么c必须是真的”。

是否有可能做更复杂的操作? 如“(a或b)和(c或d)”或“(a和b)或(c和d)”? 可能还有更多的括号。

是的,可以跳过任意数量的行的逻辑。 没有“分组括号”或类似的东西,但是如果将刚刚提到的逻辑与跳过行的function组合在一起,则可以select性地排除行为。

以下是我个人服务器的一个例子:

 # 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来自本地networking,我并不需要双因素身份validation,所以我使用pam_access.so检查的结果跳过成功的一行。 如果检查失败,则不会发生任何事情,并检查下一行。

您可以在pam.conf页中find更多关于此的信息。 search“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. ... 

请记住,这个逻辑要复杂得多,如果人们编辑你的PAMconfiguration而不注意跳线,他们可以通过在错误的地方添加或删除行来引起各种混乱。