我已经启用了 Linux PAM(1.1.4 版)和cracklib(2.8.22 版)并且大部分工作正常。通过 PAM 配置文件指定的所有密码复杂性都被遵守(大写/小写、数字等),但没有遵守“difok”。无论我将此选项设置为什么,pam_cracklib 都会让任何密码通过(只要它满足我指定的其他复杂性要求)。
长话短说,我不得不修改 Linux PAM cracklib 以添加一些调试,并很快发现 pam_cracklib 无法检索 OLD 密码。它认为该字符串为 NULL,因此自然没有什么可以与新密码进行比较。
然而,当用户更改自己的密码时,它正确地验证了当前(将成为旧密码)密码,因此 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
顺便说一句:这一切都是通过前端应用程序以编程方式完成的。这不是可以在这种环境中以交互方式完成的事情。
有人对此有任何想法吗?