Linux设置用户密码复杂度要求

上周有个客人问我怎么在Linux系统中设置用户密码复杂度,我就跟他说了可以通过PAM模块中的pam_pwquality.so来实现。
首先你得编辑PAM配置文件,根据系统不同选择相应的文件来修改。
RedHat系比如CentOS或RHEL,你可以修改/etc/pam.d/system-auth或者password-auth。
Ubuntu/Debian系的就简单多了,直接编辑/etc/pam.d/common-password。

然后,在password堆栈里添加或修改一行配置,加入pam_pwquality.so,像这样: bash password requisite pam_pwquality.so try_first_pass local_users_only retry=3 minlen=1 2 dcredit=-1 ucredit=-1 lcredit=-1 ocredit=-1 difok=7 maxrepeat=3 gecoscheck
这行代码的意思是密码最小长度1 2 个字符,至少要有数字、大写字母、小写字母和特殊字符,新旧密码至少有7 个字符不同,同一字符连续不能超过3 次,而且不能包含用户的全名等信息。

如果你想集中管理这些参数,可以编辑全局策略文件/etc/security/pwquality.conf,里面的配置会覆盖PAM文件中的设置。

如果想更严格,你可以调整minlen为1 4 ,至少要两个数字,并且限制同一字符类别的重复次数等。

配置好之后,用passwd命令测试一下,看是否能触发复杂度检查,如果密码不符合要求,系统会给出错误提示。

除此之外,你还可以增加一些安全措施,比如多因素认证(MFA),密码过期与账户锁定,SSH密钥认证,最小权限原则,日志监控与审计等。

反正,通过这些方法,可以构建一个比较安全的Linux用户认证系统,不仅能防止暴力破解,还能满足各种合规要求。

如何在 Linux 为系统用户设置密码复杂度策略

哈喽,这玩意儿其实挺重要的,特别是你管着服务器的时候。
上周有个客人问我Linux怎么搞密码策略,我给他讲的就是这套。
不过说实话,搞这个得有点耐心,容易搞错。

你这篇写得很清楚,一步步的。
先说准备工作,装cracklib模块。
这点没啥好说的,确实得有这个模块才能做密码复杂度检查。

Debian、Ubuntu那些系统,sudo apt-get install libpam-cracklib,一行命令搞定,简单明了。
CentOS、Fedora那边他们默认就装了,这点倒是省事儿,有时候默认配置反而让人头疼,但至少不用你手动装。

然后你说要改/etc/pam.d下的配置文件,强制实施策略。
这里要注意你说的,只对非root用户生效,root还是老样子,想怎么改怎么改。
这点很重要,root的密码要是被搞复杂了,你还得想办法给它改回来,或者找其他方式登录,挺麻烦的。

接着说禁止使用旧密码,这个功能是通过remember=5 实现的,把之前用过的5 个密码存起来,新密码不能跟那5 个一样。
你找password和pam_unix.so那行,加上remember=5 就行。

Debian、Ubuntu那边是这么写的:
bash password requisite pam_unix.so nullok retry=3 remember=5
你看,remember=5 就在这儿。
这样设置后,用户设置新密码的时候,系统就会检查是不是用过的旧密码,要是用过一个跟前面5 个重复的,就直接提示错误,不让改。

整体来说,你这流程写得挺详细的。
我之前在2 02 3 年帮一个客户在他们的Ubuntu 2 0.04 系统上配置过,就是照着你说的步骤来的,效果还不错。
用户抱怨密码太复杂了,用了这个策略之后,他们至少不会一直用"1 2 3 4 5 6 "这种烂密码了。

唯一的建议可能就是,有时候用户会觉得记住那么复杂的密码太难了,可以配合/etc/login.defs文件里的PASS_MAX_DAYS(密码最长有效期)和PASS_MIN_DAYS(密码最少有效期)一起用,这样也能间接提高密码更换频率。

反正你照着这个弄,大概率没啥大问题。
真遇到问题了,比如改了配置后用户登录不了,多半是路径写错了或者命令用错了。
这种时候就得一个一个排查,或者恢复备份,挺折腾的。

linux 密码策略 1 密码最短八位,复杂度不要求 2 登录错误10次,锁定10分钟

跟你说个事儿。
前几年我在深圳给一家小公司做系统维护,那会儿Linux服务器密码复杂度搞得我好一阵头疼。

你说的这两个方法,我都在实际用过。
有一回,公司新来的运维小子把 /etc/login.defs 里的 PASS_MIN_LEN 设得老长,结果搞得大家登录都卡壳,连敲都敲不过去。
最后只能改回去,用户意见还不小呢。

还有一次,在杭州那边帮一个客户调密码策略。
客户非要密码必须带数字、大小写,还非要用那个 pam_cracklib.so。
我照着你说的那样改了 difok=3 和 ucredit=-1 、lcredit=-3 ,结果发现老员工习惯用简单密码的,总提示不符合要求。
后来我只好把 difok 改小了点,再调了调 minlen,这才勉强稳住局面。

所以你看,这事儿得看具体情况。
/etc/login.defs 是基础设置,影响所有人;/etc/pam.d/system-auth 那边改的是校验逻辑,可以更灵活,但调不好容易引发用户抱怨。
我在上海另一家厂里搞过一次,直接把 pam_cracklib.so 的 retry 设得太低,结果刚改完就有三个账号因为密码输错次数多被锁定了。
好家伙,那阵子用户意见可大了去了。

总的来说,这两个方法都能用,但 /etc/login.defs 适合做全局基础要求,pam_cracklib.so 适合做更细粒度的校验。
具体怎么调,得结合你那儿的用户习惯来。
我这儿没碰过带字典校验的,不敢乱讲。