吐槽一下,本身在word上整理的,发现不能直接拷贝到CSDN,有些序号也改变了,很无奈。。
Test1~9,主要针对minlen、ucredit、lcredit、dcredit、ocredit、minclass这几个参数的测试
Test10,主要针对difok参数的设置
Test11~13,主要对minlen测试
Teset1
- Ab1-kk √
- Ab1-k ×(score为9,应该是由于字符个数小于6个导致的)
Teset2
- Ab1-kkkk√value=4*2+4=12
- Ab1-kkk × value=4*2+3=11
- Ab1kkkkkk ×字符种类不满足
Teset3
- Ab1-kkkk √ value=4*2+4+1=13,”*2”表示四类字符,额外+1;
- Ab1-kkk √value=4*2+3+1=12,加1原因红色框,当小于等于2个小写时候,有几个就额外加几!!!
- Ab1-kk×value=4*2+3+1=11
Ab1kkkkkk ×
Teset4
- Ab1kkkkkk ×(虽然score为13,但是缺少特殊字符,minclass其实没用)
Teset5
Teset6
- Ab1-kkkk ×value=8(不会额外加1)
- Ab1-kkkkkkk × value=11(不会额外加1)
- Ab1-kkkkkkkk √value=12
Teset7
- qwertyuiopas√(不会校验字符类别,但是会校验不同的字符,具体密码允许几个不同字符还未知)
- qqqqqqqqqqqq x(应该有另外一条规则限定密码都是相同字符的情况)
- q1q1q1q1q1q1 x
- qwerqwerqwer x(有4个不同字符失败)
- qwertqwertqw√(有5个不同字符成功)
Teset8(验证minclass)
含义是密码所含有字符类型的个数。
- 如果四种字符都设置为0,且minclass=2,则表示密码至少含有2种字符。
- 如果四种字符都设置为非0,且minclass=2,四种字符非0要求密码有4种类型,而minclass=2要求至少有2种类型,综合两者,密码需要四种类型。
- qwertyuiopasx(只有1种类型是失败的,但如果不设置minclass=2,则是成功的)
- qwertyuiopaS√(两种字符类型,则成功)
Teset9
- Ab1-x
- Ab1-kx
- abcdef—321 x (三类字符,所以失败)
- Ab1-kk √ 密码至少包含6个字符,pam默认规则;也必须包含四种字符。
Teset10(difok测试)
- 初始密码qazwsxeedcRFV
- 改为qazwsxedcRGB,x(2个字符不同)
- 改为qazwsxedcTGB, √(3个字符不同)
Teset11
- 设置密码qazwsxEDx(有点奇怪,score为8为啥失败了??)
- 设置密码qazwsxedcR√(score得分为10才可以,感觉minlen为8失效了)
Teset12
- qazwsxedcx(score为9)
- qazwsxedcr√(score为10)
如果ucredit、lcredit、dcredit、ocredit都为0,貌似pam要求score得分至少为10,这有待确认。如果是这样的话,minlen小于10无效。
Teset13
- qazwsxedcrfvtgx(score为14)
- qazwsxedcrfvtgb√(score为15)
与test12比较,如果ucredit、lcredit、dcredit、ocredit都设置为0,minlen大于10是可以的生效的,测试的是15
总结:
- 密码总共有四种字符
- 不具体设置ucredit、lcredit、dcredit、ocredit四种字符的个数,则默认为1
- minlen不是所设置密码的最小位数,实际是最小scores,pam会根据规则计算所设置密码的“得分”情况;
- ucredit、lcredit、dcredit、ocredit的个数N,可见test3。
- 如果大于0,说明会存在extra add 1的情况,举例
若ucredit=2lcredit=2dcredit=2ocredit=2,密码为”aaBB11-cD”,得分为:
Value=密码个数(9) +ucredit(2)+ lcredit(2)+dcredit (2)+ocredit(1) = 16
注1:网上各种博客所说的“N>0表示最多出现的次数”是不恰当的,实际表示的意思为最多额外加的score,比如上述的的例子ucredit=2,所设置密码有3个大写字母,那么score最多额外加2,这才是“最多”的真正含义,当然ocredit=1,实际密码出现了一个特殊字符,那么也就额外加1了。
- 如果小于0,表示所设置的密码至少存在N个,没有额外加1的动作;
- Pam_cracklib.so还有隐含规则
- 密码最小个数为6
- 将四种字符个数都设置为0的情况下,经过测试,密码设置需要有至少5个不同字符。
- Minclass是要求最小类别的数量,如果ucredit、lcredit、dcredit、ocredit都非0,则该参数设置与否是失效的,因为密码要求四种字符。
- 参考文档
http://www.linux-pam.org/Linux-PAM-html/sag-pam_cracklib.html