我正在实施一项安全策略,该策略将强制用户在更改自己的密码时引入更严格的密码:
配置/etc/pam.d/passwd
文件是:
#%PAM-1.0
auth include common-auth
account include common-account
password include common-password
session include common-session
因此,我对此文件进行了更改/etc/pam.d/common-password
。
默认common-password
文件包含以下两行:
password requisite pam_pwcheck.so nullok cracklib
password required pam_unix2.so use_authtok nullok
我需要向 pam_pwcheck (没问题)和另一个 PAM 模块 (pam_cracklib) 添加几个选项,以使密码更强。接下来,这是我的最终/etc/pam.d/common-password
文件,包括passwd
:
password requisite pam_cracklib.so minclass=3 retry=3
password requisite pam_pwcheck.so nullok cracklib minlen=10 remember=5
password required pam_unix2.so use_authtok nullok
当我配置了两个 PAM 模块时,就会出现问题:如果我输入正确的密码,它就可以正常工作。如果我引入一个必须拒绝的错误密码pam_cracklib
(例如,仅包含小写字母的密码),它可以正常工作(毫无问题地拒绝密码)。
但是,当我输入有效cracklib
但无效的密码pwcheck
(包含大写字母、小写字母和 7 个字符长度的数字的密码)时,它会拒绝该密码,但会显示此错误:
Bad password: too short
passwd: Authentication token manipulation error
因此,pam_pwcheck
打印其错误消息 ( Bad password: too short
),但 PAM 链发生了一些错误。
你知道我的配置有什么问题吗?
PS“安全”要求根本不是我的,所以请避免对此发表评论;-)。
答案1
尝试重构您的 PAM 链,如下所示的文件/etc/pam.d/common-password
:
password required pam_pwcheck.so
password required pam_cracklib.so use_authtok minlen=10 retry=3 minclass=3
password required pam_pwcheck.so remember=5 use_authtok use_first_pass
password required pam_unix2.so nullok use_authtok use_first_pass
我找到了上面的内容,并从标题为以下的 Novell 文档中对其进行了稍微修改:同时使用 pam_pwcheck 和 pam_cracklib。
另外我使用这些作为资源:
答案2
我终于让它工作了,只需颠倒前两个模块的顺序:
password requisite pam_pwcheck.so nullok cracklib minlen=10 remember=5
password requisite pam_cracklib.so minclass=3 retry=3
password required pam_unix2.so use_authtok nullok
现在,我面临另一个错误,但我会在另一个问题中提出。
答案3
对我来说,我使用的是 Fedora 25systemd-nspawn
容器,在我重新passwd
安装sudo dnf reinstall passwd
.