如何在Ubuntu/Debian Linux上强制用户使用安全密码
我的Linux Shell用户可以使用passwd命令修改密码。
如何强制用户选择安全密码,以防止用户使用诸如abc123,password,123456之类的愚蠢密码?
如何在Debian或者Ubuntu Linux服务器上设置密码质量要求?
您需要安装libpam_cracklib软件包,其中包含一个PAM模块,该模块会测试密码,以确保在Linux上使用passwd命令时在更改密码期间密码不会太弱。
使用libpam_cracklib保护密码
libpam_cracklib检查的强度以下列方式工作。
首先,调用Cracklib例程以检查密码是否属于字典;如果不是这种情况,则需要进行另一组强度检查。
这些检查是:
- 新密码是回文吗?
- 仅更改大小写,新密码是否与旧密码相同?
- 新密码与旧密码过于相似吗?这主要由一个参数difok控制,该参数是新旧密码之间足以接受新密码的许多字符更改(插入,删除或者替换)。默认为5个更改。
- 新密码是否太小?这由6个参数minlen,maxclassrepeat,dcredit,ucredit,lcredit和ocredit控制。
- 新密码是旧密码的轮换版本吗?
- 可选检查相同的连续字符。
- 可选检查太长的单调字符序列。
- 可选检查密码是否包含某种形式的用户名。
如何在Ubuntu/Debian上强制用户使用安全密码
/etc/passwd文件和/etc/shadow文件在Linux上用于存储用户信息,包括密码。
安装
执行以下命令以在基于Ubuntu或者Debian Linux的系统上安装libpam_cracklib:
$ sudo apt install libpam-cracklib
或者
$ sudo apt-get install libpam-cracklib
输出示例:
安装名为Cracklib的PAM模块
配置
您需要编辑文件/etc/pam.d/common-password,执行:
$ sudo cp /etc/pam.d/common-password /root/ $ sudo nano /etc/pam.d/common-password
或者
$ sudo cp /etc/pam.d/common-password /root/ $ sudo vi /etc/pam.d/common-password
现在,您可以强制用户使用包含复杂字符(包括小写字母,数字,大写字母,空格字符和标点符号)的强密码。
找到这行:
password requisite pam_cracklib.so retry=3 minlen=8 difok=3
并如下更新:
password requisite pam_cracklib.so retry=3 minlen=16 difok=3 ucredit=-1 lcredit=-2 dcredit=-2 ocredit=-2
其中:
- retry = 3:最多3次提示用户,然后返回错误。预设值为1。
- minlen = 16:新密码的最小可接受大小。
difok = 3
:对于新密码中与旧密码不同的字符更改次数,此参数将更改默认值5。- ucredit = -1:新密码必须至少包含1个大写字符。
- lcredit = -2:新密码必须至少包含2个小写字符。
- dcredit = -2:新密码必须至少包含2位数字。
- ocredit = -2:新密码必须至少包含2个符号。
负数(N> 0)与正数(N
当然,这些是示例值。
负数(例如-2)(例如ucredit = -2)表示必须设置新密码的最小大写字母数。
正数是新密码中包含数字的最大信用额度。
如果您的位数少于或者N,则每一位数将为满足当前最小数值而计数+1。
dcredit的默认值为1,这是minlen的建议值,该值小于10。
您可能需要根据设置更改/调整这些值,以避免蛮力攻击。
测试一下
现在,如果用户尝试设置新的简单(弱)密码:
$ sudo passwd Hyman
这是将满足我们要求的示例密码:
5I!L0ve@PiaZza6YeS
或者
s^8Kn<bzg9Ruv,8s
总结
在Debian或者Ubuntu Linux系统上,您可以使用libpam-cracklib通过安全检查和约束条件自动设置安全密码。
您学习了如何使用PAM模块来测试密码,以确保在更改密码时密码不会太弱。