我知道在 Linux(至少是 debian)上,每个密码都经过哈希处理并存储在/etc/shadow
.
不过,多亏了libpam-cracklib
您可以添加一些密码规则。例如,/etc/pam.d/common-password
您可以设置Difok
一个参数,指示旧密码和新密码之间可以相同的字母数。
但是,当我输入新密码时,Linux 如何知道与旧密码的相似性,因为它不知道我的真实密码(它只有一个哈希值)?
谢谢 !
答案1
当您要求 PAM 模块更改密码(或参与更改密码)时,该模块可以检索用户指定的新密码和旧密码:克里斯托弗指出,passwd
要求提供旧密码和新密码(除非您将其作为root
其他用户的密码运行并更改)。该模块可以使用该信息来比较两个密码,而无需以某种方式反转当前哈希或枚举变体。
涉及的PAM功能包括pam_sm_chauthtok
和pam_get_item
,其文档(以及其中引用的其他页面)应该可以帮助您了解正在发生的事情。你可以在libpam-cracklib
中看到它是如何完成的源代码。