PAM 中的“AND 运算符”

PAM 中的“AND 运算符”

我需要阻止用户在/home/users尚未安装加密时通过 Kerberos 进行身份验证。(这是为了避免破坏 ecryptfs 挂载点)

目前我有这些行/etc/pam.d/common-auth

auth    required                        pam_group.so use_first_pass
auth    [success=2 default=ignore]      pam_krb5.so minimum_uid=1000 try_first_pass
auth    [success=1 default=ignore]      pam_unix.so nullok_secure try_first_pass

exit 1如果 ecyptfs 挂载尚未准备好,我计划使用 pam_exec.so 来执行一个脚本。

这样做:

auth    required        pam_exec.so     /etc/security/check_ecryptfs

如果 ecryptfs 因某种原因失败,将永久锁定我。在这种情况下,我希望至少能够以本地(非 kerberos)用户身份登录以解决问题。

是否存在某种 AND 运算符,其中我可以说通过 kerberos+ldap 登录仅在两个 kerberos 身份验证都有效时才有效ecryptfs 挂载成功了吗?

答案1

我不知道 PAM 有任何 AND 运算符,但您可以使用控制语句实现相同的效果。根据我的评论,这很不靠谱,但应该可以完成工作。

在您的检查脚本中,返回一个特定的 PAM 错误代码(可能是PAM_SYSTEM_ERR),然后在您的文件中使用控制语句,common-auth如下所示:

auth    required                        pam_group.so use_first_pass
auth    [success=ok default=1]          pam_exec.so /etc/security/check_ecryptfs
auth    [success=2 default=ignore]      pam_krb5.so minimum_uid=1000 try_first_pass
auth    [success=1 default=ignore]      pam_unix.so nullok_secure try_first_pass

pam_exec 模块的控制语句应导致 PAM 在成功时转到下一个模块 (pam_krb5),如果 pam_exe 返回任何其他返回代码,则跳转到 pam_unix。不过,您需要确保您的模块确实返回了成功代码。请参阅来源

进一步参考:

相关内容