pam_cracklib 'minlen' 无法按我期望的方式工作。PAM 允许密码长度甚至小于使用 'minlen' 选项设置的长度。它为“大写”、“小写”、“数字”和“其他字符”赋予信用(默认为 1)。
因此,如果 minlen 设置为 8,则以下密码将有效:
- 'abcdefg'(长度 = 7+1 个小写字母使用积分)
- 'abcde1'(长度 = 6 + 使用小写字符的 1 个积分 + 使用数字的 1 个积分)
- 'Abcd1'(长度 = 5 + 使用小写字符 1 个积分 + 使用数字 1 个积分 + 使用大写字符 1 个积分)
- 'Ab1$'(长度 = 4 + 使用小写字符 1 个积分 + 使用数字 1 个积分 + 使用大写字符 1 个积分 + 使用其他字符 1 个积分)
我不希望 PAM 为这些类型的字符提供信用,并且希望严格执行指定的 minlen,而不管密码中使用了哪种类型的字符。我也尝试了以下设置,但没有帮助:
password required pam_cracklib.so lcredit=0 dcredit=0 ucredit= ocredit=0 minlen=8
答案1
您不必使用pam_cracklib
来强制执行最小密码长度;pam_unix
很乐意这样做。只需使用min=8
或minlen=8
(它min
在旧版本的 PAM 中;请查看您的pam_unix
手册页)。
答案2
该配置应该可以工作。如果您以超级用户权限执行此操作root
,则需要将enforce_for_root
参数添加到pam_cracklib.so
行中。否则,它会抱怨BAD PASSWORD
,但仍会允许它。