如何在Ubuntu/Debian Linux上强制用户使用安全密码

时间:2020-01-09 10:43:34  来源:igfitidea点击:

我的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模块来测试密码,以确保在更改密码时密码不会太弱。