Haw*_*ang 5 linux authentication pam
我们知道,optional是PAM配置文件中的控制值之一。
可选:
仅当该模块是堆栈中与该服务+类型关联的唯一模块时,该模块的成功或失败才重要。
我很困惑。
这是/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规则用于未经身份验证的目的。是对的吗?
重要提示:可选模块不会被忽略,它们将被处理,它们的结果将被忽略,即,即使它们失败,身份验证过程也不会中止。
在许多情况下,您可能希望在身份验证期间执行某个操作(要执行的模块),但即使失败,您也不希望身份验证过程中止。
一个实际的例子是,如果您想使用 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 将返回非零退出代码。然而,在这种情况下,您仍然希望登录成功。
这只是我想到的一个例子,因为我实际使用它,即,这不是理论上的情况,但这是您希望失败的模块不会中止身份验证过程的许多情况之一。