我启用了Linux PAM(版本1.1.4)和cracklib(版本2.8.22)并且大多数工作正常。正在遵守通过PAM配置文件指定的所有密码复杂性(大写/小写,数字等),但不遵守“difok”。无论我将此选项设置为什么,pam_cracklib都会允许任何密码通过(前提是它符合我指定的其他复杂性要求)。
长话短说我不得不修改Linux PAM cracklib来添加一些调试并快速发现pam_cracklib FAILS能够检索OLD密码。它认为字符串是NULL,所以自然没有什么可以比较新密码。
然而,当用户更改自己的密码时,它正确地验证当前(将成为旧的OLD)密码,以便pam_unix正确地看到旧密码。当它到达PAM配置的pam_cracklib行时,密码似乎已经以某种方式被删除。
我想把头发弄出去试图弄清楚这是怎样/在哪里/为什么会发生这种情况。
以下是我的PAM配置文件中的相关密码行:
password requisite pam_cracklib.so debug reject_username\
minlen=6 ucredit=-1 lcredit=-1 difok=4 maxrepeat=2
password required pam_unix.so debug md5 shadow
按方式:这一切都是通过前端应用程序以编程方式完成的。这不是可以在这种环境中以交互方式完成的事情。
有没有人对此有任何想法?
答案 0 :(得分:0)
旧密码的散列版本存储在
中的/ etc /安全/ opasswd
所以我会检查他们通常应阅读的文件的权限:
-rw -------。
另外(这是我认为的问题的关键)你必须将记忆字段添加到pam_unix模块:
pam_unix.so try_first_pass remember=3 use_authtok null debug md5 shadow