我在文件 /etc/pam.d/common-password 中有以下设置。
password requisite pam_cracklib.so retry=3 lcredit=-1 ucredit=-1 dcredit=-1
password [success=1 default=ignore] pam_unix.so obscure use_authtok try_first_pass sha512
password requisite pam_deny.so
password required pam_permit.so
password optional pam_ecryptfs.so
为什么 root 可以为其他用户设置弱密码?
root@kali:~# LANG=C passwd kali
New password:
BAD PASSWORD: it is WAY too short
BAD PASSWORD: is a palindrome
Retype new password:
passwd: password updated successfully
我没有看到任何 pam 规则允许这样做。我错过了什么吗?
答案1
在较新(并向后移植到 RHEL 6)版本的 PAM 中,您可以pam_cracklib
添加一个选项 — enforce_for_root
。默认情况下此功能处于关闭状态。只需将其添加到该行即可。
当然,如果没有很多其他限制(比如 SELinux),root 总是可以绕过 PAM 并以另一种方式设置密码(例如,直接写入适当的文件),所以考虑这更多的是让自己保持诚实的一种方式比固体限制。
为什么它会这样工作而不是期望堆栈来处理这种事情?我认为这只是一个灵活性问题,尤其是当 PAM 控制值只是简单的必需/必需/足够/可选时 — 您必须设置以上pam_rootok
的控制值sufficient
全部root 会忽略的检查,但仅限于这些。由于作为 root 成功的选项是内置的pam_cracklib
,所以这是没有必要的(假设需要允许 root 跳过检查,这显然是,即使不是在您的情况下)。