在基于Debian的Linux服务器上部署密码质量检查可以帮助确保您的用户为其帐户分配合理的安全密码,但设置本身可能有点误导。
例如,设置最小密码长度为12个字符并不一定意味着您所有用户的密码实际上都有12个或更多字符。
让我们沿着复杂大道漫步,看看这些设置是如何工作的,并检查一些值得考虑的问题。
包含我们将要查看的设置的文件将是:
- /etc/pam.d/common-password.在Debian-Base系统上
- /etc/security/pwquality.conf.conf.在Redhat.
复杂性设置
这是它的工作原理。您可以设置最小密码长度以确保实力,但这可能无法与您的期望完全相同。实际上,具有最多字符的密码不一定是最安全或更容易使用和记住。事实上,您的用户可以使用较短的密码来设置,如果它们包含某些限制和类别的字符类别,这使得它们更加安全地破解并获得信用。
除了长度之外,您还可以要求以下复杂性设置:
- 大写字符
- 小写字符
- 数字
- 其他角色(例如,标点符号)
- 以上的混合
- 对任何特定类中字符数(大写,小写等)的字符数的限制
- 对可以使用相同角色的倍增的限制
- 必须与上一个密码中使用的字符数量不同
- 限制密码重新使用
设置包括:
- 明伦=最小密码长度
- MINCLASS.=必须使用的最小字符类型数(即,大写,小写,数字,其他)
- maxrepeat.=可以重复单个字符的最大次数
- maxclassrepeat.=可以在同一类中的行中的最大字符数
- lcredit.=将产生信用的最大小写字符数
- ucredit.=将产生信用的最大大写字符数
- dcredit.=将生成信用的最大数字数
- 焦点=将产生信用的最大数量
- 迪福克=必须与旧密码不同的字符数
- 记得=系统记住的密码数,以便不能再次使用它们
- Gecoscheck.=是否检查用户的passwd条目GECOS字符串中的单词(如果值不是0,则启用)
- 口述检查=是否检查CrackLib字典中的单词(如果值不是0,则启用)
- usercheck.=是否检查密码是否包含某种形式的用户名(如果值不是0,则启用)
- 强制执行=如果失败检查,则拒绝新密码,并且该值不是0
- dictpath.=指向cracklib词典的路径。默认值是使用cracklib默认值。
Red Hat系统上的这些设置可能如下所示。这个信用设置意味着您的用户将获得使用可以减少密码长度要求的字符类型混合的信用。
$ grep“=”/etc/security/pwquality.conf
#difok=1
Minlen = 12.
信用证=-1
Ucredit = 1
Lcredit = 1
ocredit = 1
#minclass = 0
#maxrepeat = 0
#maxclassrepeat = 0
#gecoscheck = 0
#dictcheck = 1
#usercheck = 1
#Enforcing = 1
#口述路径=
Debian系统上的相同设置可能如下所示:
$ grep ^ password common-password
密码要求pam_PW质量.soretry=3 minlen=12 difok=1 remember=3 lcredit=1 ucredit=1 ocredit=1 dcredit=-1
请注意,无论您设置的值如何明伦,密码不能少于6个字符。也就是说,即使你明伦等于4并为许多类型的字符提供信用,将拒绝少于六个字符的密码。
因为复杂性而获得赞誉
“积分”的想法(例如,lcredit.和ucredit.)非常有趣。基本上,如果对于字符混合更复杂,则可能是较短的密码。
作为一个例子,像“hijlmqrazp”这样的密码可能会通过一个Minlen = 10.测试。如果dcredit.另一方面设置为2,密码“HijlMQ99”也将通过。为什么?因为你得到了数字的两个学分。因此,八个字符加积分在没有信用的情况下高达10个字符。如果dcredit.设置为1,您需要一个额外的角色。但是,我们还可以授予大写,小写和非字母数字字符等信用,如标点符号。
但是,请注意,您只能为许多不同的字符获得信誉。也许你只会获得一位数或两个大写字符的信用。也许你没有为小写字符获得任何信用。这一切都取决于您的设置。
混合字符课程
另一个发挥作用的环境是MINCLASS.设置,确定必须使用多少类字符来接受密码。如果MINCLASS.如果设置为2,则包含所有小写、大写、数字或任何其他类型字符的密码将不起作用。如果设置为2,MINCLASS.需要您使用来自两个类的字符,如大写和小写,或小写和数字。
借MINCLASS.设置为4,密码必须包含所有四种类型的字符 - 就像“howzit2b?” - 而且,如果我们获得大写,数字或其他字符的信用,即使与之相同明伦设置为12。
您还可以对任何特定类的字符数设置上限。设置maxclassrepeat.设置为4和密码不能连续包含超过四个小写,大写,数字或其他字符。
负值的含义
设置任何一个lcredit.那ucredit.那dcredit., 要么焦点设置为负数意味着您必须具有用于可接受的密码的一些类型的字符。设置dcredit.例如,至-1将意味着您必须至少包含一个数字。
其他远程力量检查
Linux的密码质量检查包括许多其他检查,有助于确保密码相当安全。它可以检查密码是否是parindrome,如“racecar”,新密码是否与旧密码相同,但只有旧密码的变化,如果旧密码彼此过于相似或旋转,以及密码是否包含用户的名称。(它达到了它实际上很难为自己分配一个非常糟糕的密码可能很难。)
例如,如果用户不符合所有指定的条件,则更改密码更改尝试可能如下所示:
$ passwd.
更改SHS的密码。
当前密码:
新密码:
密码错误:密码是palindrome
新密码:
密码错误:密码包含少于1个大写字母
新密码:
错误密码:密码包含的非字母数字字符少于1个
passwd:为服务耗尽了最大的重试次数
passwd:密码不变
密码质量测试
如果更改以下Perl脚本的顶行中的设置,则会为将通过您的优质测试的密码进行感觉。在此示例中,密码的最小长度已设置为12.给出一个信用卡为小写和大写字母,但对于特殊字符无,无需(仅用于演示差异)。另外,一个数字必须包括在内(设置-1)。
#!/ usr / bin / perl -w
# - 在此处设置复杂性偏好 -
$ minlen = 12;
$ lcredit = 1;
$ ucredit = 1;
$ dcredit = -1;
$ ocredit = 0;
# - 初始化计数器 -
$score=0;
$lcase=0;
$ucase=0;
$ digits = 0;
$其他=0;
#--设置失败为false--
$ fall = 0;
# - 检查参数 -
if($#argv <0){
print“需要参数\n”;
出口;
} else {
$ password = $ argv [0];
}
#--确定是否有任何字符设置是必需的(如果为负)
if($ lcredit <0){#所需的小写字符#
$ lneeded = -1 * $ lcredit;
$ lextra = $ lneeded;
} else {
$ lneeded = 0;
$ lextra = $ lcredit;
}
if($ ucredit <0){#需要的大写字符#
$uneeded=-1*$ucredit;
$ uextra = $ uneeded;
} else {
$uneeded=0;
$uextra=$ucredit;
}
if($ dcredit <0){#需要的数字#
$ dneeded = -1 * $ dcredit;
$dextra=$d需要;
} else {
$ dneeded = 0;
$ dextra = $ dcredit;
}
if($ ocredit <0){#所需的特殊字符#
$ Oneeded = -1 * $ ocredit;
$oextra=$oneeded;
} else {
$ Oneeded = 0;
$ oextra = $ ocredit;
}
$得分=长度($密码);#1点为每个字符
# - 密码必须至少包含6个字符
如果($score<6){
打印“密码必须包含至少6个字符\ n”;
出口;
}
# - 计算每种类型的字符 -
foreach$char(拆分/,$password){
if($ char =〜/ d /){
$ digits ++;#数字
}埃尔西夫!~/\w/){
$其他++;# 特殊的角色
}elsif($char eq lc($char)){
$ lcase ++;#小写
elsif($ char eq uc($ char)){
$ Ucase ++;#大写
} else {
打印“错误:无法识别的角色。请修复此脚本!\ n”;
}
}
if($ lcase <$ lneeded){
打印“密码失败:需要$ lneeded小写字符\ n”;
$ fall = 1;
}
如果($ucase<$uneeded){
print“密码失败:需要$uneeded大写字符\n”;
$ fall = 1;
}
if($ digits <$ dneeded){
打印“密码失败:需要$ DNEEDED DIGIT(s)\ n”;
$ fall = 1;
}
if($其他<$ oneeded){
打印“密码失败:需要$ odeed特殊字符\ n”;
$ fall = 1;
}
if($ fall> 0){
出口;
}
# - 减少允许的号码 -
如果($lcase>$lextra){
$ lcase = $ lextra;
}
if($ ucase> $ uextra){
$ Ucase = $ uextra;
}
if($ digits> $ dextra){
$ digits = $ $ dextra;
}
if($其他> $ oextra){
$other=$oextra;
}
打印“$score+$lcase+$ucase+$digits+$other\n”;
$score=$score+$lcase+$ucase+$digits+$other;
if($ score> = $ minlen){
打印“密码传递得分$ score \ n”;
} else {
打印“密码失败,分数为$score\n”;
}
注意密码“2Good4me?“虽然只有9个字符,但还是通过了。这是因为我们每个人都有一个大写字母G的学分,一个是小写字母的学分,一个是数字的学分。如果我们的成绩是“13”的话,我们就可以通过了?“也是。“9+1+1+1+0”行显示学分列表:
$PW2Good4me?
9 + 1 + 1 + 1 + 0
密码以12分通过
密码复杂性和PAM
通过可插入身份验证模块(PAM)提供对密码复杂性的支持。如果您有一个名为/etc/pam.d/system-auth文件在Redhat系统上,寻找看起来像下面所示的线条。
$ grep password /etc/pam.d/system-auth
密码必需pam_pwquality.so try_first_pase local_users_only
密码足够的pam_unix.so sha512 shadow nullok try_first_pass use_authttok
密码足够的pam_sss.so使用_ authtok
需要密码pam_否认。所以
在像Ubuntu这样的Debian系统上,此命令将显示PAM是否已安装并准备好使用:
$apt缓存策略*pam pwquality*
libpam-pwquality:
安装了:1.4.2-1Build1.
候选人:1.4.2-1Build1.
版本表:
*** 1.4.2-1Build1 500.
500http://us.archive.ubuntu.com/ubuntu重点/主要amd64软件包
100 / var / lib / dpkg / status
如果系统上的响应显示“Installed:(none)”,则可以使用以下命令进行安装:
$ sudo apt安装libpam-pquality