如何强制用户在 Debian 和 Ubuntu 中使用强密码

强密码必须至少有 14 个字符,包括至少 1 个特殊字符、1 个数字字符、1 个大写字母和 1 个小写字母。 更重要的是,密码不应该容易预测,也不应该基于字典单词。 然而,一些非技术用户不会理解或不关心安全性。 他们将继续使用易于预测的密码,例如 pass123、welcome123、 [email protected] 等等,只需几次尝试即可轻松破解。 此外,他们不会更改密码多年。 作为系统管理员,您的工作是实施强密码策略,以保护系统免受基于字典的暴力攻击。 这个简短的教程将引导您了解如何强制用户在基于 DEB 的发行版(如 Debian、Ubuntu、Linux Mint 等)中使用强密码,使用 可插拔认证模块 (PAM).

我已经在 Ubuntu 16.04 LTS 服务器版中测试了本指南。 虽然,此处发布的说明对于 Debian 以及其他基于 Debian 和 Ubuntu 的发行版(例如 Linux Mint、Elementary OS 等)是相同的。

下载免费电子书:“Ubuntu 16.04 入门”

强制用户在 Debian、Ubuntu、Linux Mint 中使用强密码

可插拔认证模块 (PAM) 在基于 DEB 的系统中默认安装。 但是,您需要安装一个名为 libpam-cracklib. 为此,请从终端运行以下命令:

$ sudo apt-get install libpam-cracklib

在基于 DEB 的系统中,密码策略定义在 /etc/pam.d/common-password 文件。 在进行任何更改之前,请备份此文件。

$ sudo cp /etc/pam.d/common-password /etc/pam.d/common-password.bak

现在,编辑 /etc/pam.d/common-password 文件:

$ sudo nano /etc/pam.d/common-password

找到以下行并编辑或更改它,如下所示。

password required pam_cracklib.so try_first_pass retry=3 minlen=12 lcredit=1 ucredit=1 dcredit=2 ocredit=1 difok=2 reject_username

编辑 /etc/pam.d/common-password 文件

让我们分解这条线,看看每个选项会做什么。

  • 重试=N – 更改密码的最大重试次数。 N 表示编号。 此参数的默认值为 1。
  • minlen=N – 新密码的最小可接受大小(如果未禁用信用,则加一,这是默认设置)。 除了新密码中的字符数外,还为每种不同类型的字符(其他、大写、小写和数字)赋予信用(长度为 +1)。 默认值为 9。
  • 信用=N – 定义密码中包含小写字母的最大信用。 默认值为 1。
  • ucredit=N – 定义密码中包含大写字母的最大数量。 默认值为 1。
  • dcredit=N – 定义密码中包含数字的最大信用。 默认值为 1。
  • 信用=N – 定义密码中包含其他字符的最大信用。 默认值为 1。
  • 迪福克=N – 定义必须与以前的密码不同的字符数。
  • 拒绝用户名 – 限制用户使用他们的名字作为密码。

希望您对上述参数有一个基本的了解。

如上述文件中所定义,用户现在应使用密码复杂度得分为 12 的密码。1 个小写字母将获得一个“信用”,1 个大写字母将获得 1 个信用,至少 2 位数字将获得 1 个信用,并且1 个其他角色获得 1 个学分。

但是,您可以通过分配负值来禁用信用,并强制用户使用具有最小长度的不同字符的组合。

检查以下示例:

password required pam_cracklib.so minlen=8 lcredit=-1 ucredit=-1 dcredit=-2 ocredit=-1 difok=2 reject_username

如上所述,用户必须使用 8 个字符的密码复杂度分数,包括 1 个小写字母、1 个大写字母、2 个数字和 1 个其他字符。

请注意,这些限制仅适用于普通用户,不适用于 root 用户。 根用户可以自由使用任何类型的密码。

检查或验证密码复杂性

定义密码策略后,检查它是否有效。

让我们分配一个不符合密码策略的简单密码,看看会发生什么。

要更改或为当前登录的用户分配密码,请运行:

$ passwd

样本输出:

Changing password for sk. (current) UNIX password:  New password:  BAD PASSWORD: it is WAY too short New password:  BAD PASSWORD: it does not contain enough DIFFERENT characters New password:  BAD PASSWORD: it is based on a dictionary word passwd: Have exhausted maximum number of retries for service passwd: password unchanged