答案1
由于cracklib是开源的,答案可以在源代码。
“过于简单化/系统化”意味着有太多字符前面是其字母顺序邻居之一。因此“ab”或“ba”被认为是坏的,但“ac”或“ca”是可以的,因为省略了b。
前此补丁来自 2010-03-02,它最多允许四个字符表现出这种特征的。例如,“bar12345”将失败,因为字符“a”、“2”、“3”、“4”和“5”是前面字符的字母邻居。
slm 在他的回答中发现M1uG*xgRCthKWwjIjWc*010iS
可以,但M1uG*xgRCthKWwjIjWc*010iSt
不行。我们来分析一下。以下是 crashlib-check 认为表示系统密码的字符:
M1uG*xgRCthKWwjIjWc*010iS
^^ ^^
它低于四个最大值,但添加了 t:
M1uG*xgRCthKWwjIjWc*010iSt
^^ ^^ ^
将其推至极限之上,因为 T 跟随 S(看起来测试不区分大小写)。
该补丁更改了最大限制,使其取决于密码总长度,以避免此类误报。
答案2
在 Fedora 19 上
当我运行它时,我就OK了。我使用的是 Fedora 19。
$ echo 'M1uG*xgRCthKWwjIjWc*010iSthY9buc' | cracklib-check
M1uG*xgRCthKWwjIjWc*010iSthY9buc: OK
这是版本信息:
$ rpm -qfi /usr/sbin/cracklib-check | grep -E "Version|Release"
Version : 2.8.22
Release : 3.fc19
笔记:我也会尝试使用单引号而不是双引号,因为您正在处理*
's 它们可能会以奇怪的方式在您身上扩展。
CentOS 5 和 6
在 CentOS 6 上尝试你的示例很好,得到了 OK,但它确实失败了,正如你在 CentOS 5.9 上所描述的那样。
$ echo 'M1uG*xgRCthKWwjIjWc*010iSthY9buc' | cracklib-check
M1uG*xgRCthKWwjIjWc*010iSthY9buc: it is too simplistic/systematic
版本信息:
$ rpm -qfi /usr/sbin/cracklib-check | grep -E "Version|Release"
Version : 2.8.9
Release : 3.3
一个错误?
你偶然发现的似乎是一个错误。如果您输入字符串并运行越来越多的字符串,cracklib-check
您会发现当您到达第 26 个字符时,它开始失败:
# 25
$ cracklib-check <<<"M1uG*xgRCthKWwjIjWc*010iS"
M1uG*xgRCthKWwjIjWc*010iS: OK
# 26
$ cracklib-check <<<"M1uG*xgRCthKWwjIjWc*010iSt"
M1uG*xgRCthKWwjIjWc*010iSt: it is too simplistic/systematic
t
如果我将最后一个字符从 a 更改为表示v
它继续有效,请更深入地研究这一点。
$ cracklib-check <<<"M1uG*xgRCthKWwjIjWc*010iSvhY9b"
M1uG*xgRCthKWwjIjWc*010iSvhY9b: OK
所以看起来在 的版本中cracklib-check
被子字符串挂断了Sth
。
您提供的字符串块肯定有一些奇怪的地方。如果我拿走尾端件并省略前部,我也会让这部分失败。
$ cracklib-check <<<"jIjc*010Sth"
jIjc*010Sth: it is too simplistic/systematic
同样的字符串也会在 Fedora 19 和 CentOS 6 上引起问题!
更新#1基于 @太平鸟的非常好的侦查,我们现在知道,如果超过 4 个字符彼此太相邻,那么所使用的启发式就会出错。 A补丁被引入这改变了这种启发式方法,以便考虑所考虑的密码的整体长度来消除这些误报。
结论?
根据我的一些有限的测试,似乎这里有一些奇怪的启发法在起作用。某些看似正常的字符串却会出现问题。
如果您尝试对此进行编码,我建议包装密码的生成和评估,然后在生成安抚密码后跳出循环cracklib-check
。
或者至少我建议升级到新版本,其中包括@maxwing 在他的答案中提到的修复程序。
密码生成替代方案
普世根我还要补充一下我通常使用的pwgen
生成密码。这可能对您也有帮助。
$ pwgen -1cny 32
iWu0iPh8aena9raSoh{v6me)eh:eu6Ei
乌兰多姆
tr
您还可以使用、/dev/urandom
和的一些脚本魔法fold
来获取极高质量的随机密码。
$ tr -dc '[:graph:]' </dev/urandom | fold -w 32 | head -n 1
;>$7\`Hl$=zn}R.b3h/uf7mY54xp}zSF
该fold
命令可以控制长度。作为替代方案,您也可以这样做:
$ echo $(tr -dc '[:graph:]' </dev/urandom | head -c 32)
/_U>s[#_eLKAl(mrE@oo%X~/pcg$6-kr