linux – 为什么我们在PAM中使用可选项,即使它被忽略了?

我们知道,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将返回非零退出代码.但是,在这种情况下,您仍然希望登录成功.

这只是我想到的一个例子,因为我实际上使用它,即,这不是理论情况,但这是许多情况中的一个,您希望失败的模块不会中止身份验证过程.

上一篇:LocalBroadcastManager 的实现原理,Handler还是 Binder?


下一篇:ssh – SFTP与MySQL用户通过而不是PAM