为什么root不受pam约束

seb*_*elk 1 password root pam kali-linux

我在文件 /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
Run Code Online (Sandbox Code Playgroud)

为什么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
Run Code Online (Sandbox Code Playgroud)

我没有看到任何允许它的 pam 规则。我错过了什么吗?

mat*_*tdm 5

在较新的(并反向移植到 RHEL 6)版本的 PAM 中,pam_cracklib您要添加一个选项— enforce_for_root. 默认情况下这是关闭的。只需将它添加到该行,然后就可以了。

当然,没有很多其他限制(比如 SELinux),root 总是可以绕过 PAM 并以另一种方式设置密码(例如,直接写入适当的文件),所以考虑这更多的是一种让自己保持诚实的方式比固体限制。

为什么它以这种方式工作,而不是期望堆栈处理这种事情?我认为这只是一个灵活性问题,尤其是当 PAM 控制值只是简单的必需/必需/足够/可选时 - 您必须将pam_rootok控制值sufficient置于root 将忽略的所有检查之上,但是只有那些。由于作为 root 成功的选项是内置的pam_cracklib,所以没有必要(假设允许 root 跳过检查是需要的,这显然是,即使不是你的情况)。