0

我已经启用了 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

顺便说一句:这一切都是通过前端应用程序以编程方式完成的。这不是可以在这种环境中以交互方式完成的事情。

有人对此有任何想法吗?

4

1 回答 1

0

旧密码的散列版本存储在

/etc/security/opasswd

所以我会检查他们通常应该阅读的文件上的权限:

-rw--------。

另外(我认为这是问题的症结所在)您必须将记住字段添加到 pam_unix 模块:

pam_unix.so try_first_pass remember=3 use_authtok null debug   md5     shadow
于 2013-10-29T21:50:24.153 回答