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

Haw*_*ang 5 linux authentication pam

我们知道,optional是PAM配置文件中的控制值之一。

来自linux-pam.org

可选:
仅当该模块是堆栈中与该服务+类型关联的唯一模块时,该模块的成功或失败才重要。

我很困惑。

这是/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
Run Code Online (Sandbox Code Playgroud)

我看到两条规则,即optional控制和公正的行动。

我假设我们仅将optional规则用于未经身份验证的目的。是对的吗?

Mar*_*elo 6

重要提示:可选模块不会被忽略,它们将被处理,它们的结果将被忽略,即,即使它们失败,身份验证过程也不会中止。

在许多情况下,您可能希望在身份验证期间执行某个操作(要执行的模块),但即使失败,您也不希望身份验证过程中止。

一个实际的例子是,如果您想使用 pam 在登录过程中使用与用户密码相同的密码自动打开 dm-crypt 加密设备:

auth optional pam_exec.so expose_authtok quiet /usr/sbin/cryptsetup --allow-discards open UUID=... /home/username
Run Code Online (Sandbox Code Playgroud)

请注意,如果required使用 if 而不是optional此处,则第一次登录将成功,因为 cryptsetup 将返回 0 作为其退出代码,但如果用户注销然后再次登录,则登录将失败,因为设备已打开,并且 cryptsetup 将返回非零退出代码。然而,在这种情况下,您仍然希望登录成功。

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