我需要阻止用户在/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。不过,您需要确保您的模块确实返回了成功代码。请参阅来源。
进一步参考:
- pam.d 手册页(特别是控制语句部分)
- PAM 模块编写者指南