我们知道,optional是PAM配置文件中的控制值之一.
从linux-pam.org开始:
optional:
the success or failure of this module is only important if it is the only module in the stack associated with this service+type.
我糊涂了.
这是/etc/pam.d/login:
session required pam_selinux.so open
session required pam_namespace.so
session optional pam_keyinit.so force revoke
session include system-auth
session include postlogin
-session optional pam_ck_connector.so
我看到两个规则,可选控制只有动作.
我假设我们只对未经过身份验证的目的规则使用可选项.是对的吗?
解决方法:
重要说明:不会忽略可选模块,它们将被处理,其结果将被忽略,即,即使它们失败,也不会中止验证过程.
在许多情况下,您可能希望在身份验证期间执行操作(要执行的模块),但即使出现故障,您也不希望身份验证过程中止.
一个实际的例子是,如果您想使用pam在登录期间使用与用户密码相同的密码自动打开dm-crypt加密设备:
auth optional pam_exec.so expose_authtok quiet /usr/sbin/cryptsetup --allow-discards open UUID=... /home/username
请注意,如果在此处使用required而不是optional,则首次登录将成功,因为cryptsetup将返回0作为其退出代码,但如果用户注销然后再次登录,则登录将失败,因为设备已打开并且cryptsetup将返回非零退出代码.但是,在这种情况下,您仍然希望登录成功.
这只是我想到的一个例子,因为我实际上使用它,即,这不是理论情况,但这是许多情况中的一个,您希望失败的模块不会中止身份验证过程.