M1uG*xgRCthKWwjIjWc*010iSthY9buc
根据passwd和cracklib-check,如何将随机字符串检测为过于简单/系统化而不适合密码?在您的机器上尝试一下,看看
echo "M1uG*xgRCthKWwjIjWc*010iSthY9buc" | cracklib-check
请注意,这不是我的密码,而是来自同一随机密码生成器的另一个随机生成的字符串,该字符串产生相同的结果。
/dev/urandom
来生成密码?
M1uG*xgRCthKWwjIjWc*010iSthY9buc
根据passwd和cracklib-check,如何将随机字符串检测为过于简单/系统化而不适合密码?在您的机器上尝试一下,看看
echo "M1uG*xgRCthKWwjIjWc*010iSthY9buc" | cracklib-check
请注意,这不是我的密码,而是来自同一随机密码生成器的另一个随机生成的字符串,该字符串产生相同的结果。
/dev/urandom
来生成密码?
Answers:
由于cracklib是开源的,因此可以在源代码中找到答案。
“过于简单化/系统化”表示太多的字符以其字母邻居之一开头。因此,“ ab”或“ ba”被认为是不好的,但是“ ac”或“ ca”是可以的,因为省略了b。
在2010年3月2日发布此补丁之前,它最多允许四个字符展现此特征。例如,“ bar12345”将失败,因为字符“ a”,“ 2”,“ 3”,“ 4”和“ 5”是前面字符的字母邻居。
slm在他的回答中发现M1uG*xgRCthKWwjIjWc*010iS
可以,但M1uG*xgRCthKWwjIjWc*010iSt
不能。让我们分析一下。这是cracklib-check认为是系统密码的指示的字符:
M1uG*xgRCthKWwjIjWc*010iS
^^ ^^
低于最大值4,但加上了t:
M1uG*xgRCthKWwjIjWc*010iSt
^^ ^^ ^
由于T跟随S(似乎测试不区分大小写),因此将其推到极限之上。
补丁程序会更改最大限制,因此它取决于密码的总长度,以避免类似这样的误报。
Ww
)?
当我运行它时,我会确定的。我正在使用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
注意:我也尝试使用单引号而不是双quto,因为您正在使用*
,它们可能会以奇怪的方式在您身上扩展。
在CentOS 6上尝试示例很好,可以了,但确实没有如您在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
要说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根据@wingwing的非常好侦听,我们现在知道,如果> 4个字符彼此相邻,则使用的启发式方法就会被触发。引入了一个修补程序,该修补程序更改了该启发式方法,因此考虑了所考虑的密码的总长度,以消除这些误报。
根据我的一些有限测试,似乎这里有些奇怪的启发式方法在起作用。某些看起来不错的字符串正在将其绊倒。
如果您要对此进行整理,我建议您包装密码的生成和评估,然后在生成令人安心的密码后打破循环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
Tm7U:n=@*+4$*gf$6hOngEHJ;mnh$+R6
在同一台机器上,像这样的字符串完全可以。
M1uG*xgRCthKWwjIjWc*010iSthY9buc: OK