LINUX设置密码复杂度的文件⼀etc⼀pam.d⼀system-auth,具体需要怎么改?

2025-03-12 09:07:48
推荐回答(3个)
回答1:

一、准备工作:

安装 PAM 的 cracklib 模块,cracklib 能提供额外的密码检查能力。

二、具体操作:

Debian、Ubuntu 或 Linux Mint 系统上:

代码如下:


$ sudo apt-get install libpam-cracklib


CentOS、Fedora、RHEL 系统已经默认安装了 cracklib PAM 模块,所以在这些系统上无需执行上面的操作。

为了强制实施密码策略,需要修改 /etc/pam.d 目录下的 PAM 配置文件。一旦修改,策略会马上生效。

注意:此教程中的密码策略只对非 root 用户有效,对 root 用户无效。

策略设置:

1、禁止使用旧密码

找到同时有 “password” 和 “pam_unix.so” 字段并且附加有 “remember=5” 的那行,它表示禁止使用最近用过的5个密码(己使用过的密码会被保存在 /etc/security/opasswd 下面)。

Debian、Ubuntu 或 Linux Mint 系统上:

代码如下:

$ sudo vi /etc/pam.d/common-password
password [success=1 default=ignore] pam_unix.so obscure sha512 remember=5


CentOS、Fedora、RHEL 系统上:

代码如下:


$ sudo vi /etc/pam.d/system-auth
password sufficient pamunix.so sha512 shadow nullok tryfirstpass useauthtok remember=5

二、设置最短密码长度

找到同时有 “password” 和 “pam_cracklib.so” 字段并且附加有 “minlen=10” 的那行,它表示最小密码长度为(10 - 类型数量)。这里的 “类型数量” 表示不同的字符类型数量。PAM 提供4种类型符号作为密码(大写字母、小写字母、数字和标点符号)。如果密码同时用上了这4种类型的符号,并且 minlen 设为10,那么最短的密码长度允许是6个字符。

Debian、Ubuntu 或 Linux Mint 系统上:

代码如下:

$ sudo vi /etc/pam.d/common-password
password requisite pam_cracklib.so retry=3 minlen=10 difok=3

CentOS、Fedora、RHEL 系统上:

代码如下:

$ sudo vi /etc/pam.d/system-auth
password requisite pam_cracklib.so retry=3 difok=3 minlen=10

三、设置密码复杂度

找到同时有 “password” 和 “pam_cracklib.so” 字段并且附加有 “ucredit=-1 lcredit=-2 dcredit=-1 ocredit=-1” 的那行,表示密码必须至少包含一个大写字母(ucredit),两个小写字母(lcredit),一个数字(dcredit)和一个标点符号(ocredit)。

Debian、Ubuntu 或 Linux Mint 系统上:

代码如下:

$ sudo vi /etc/pam.d/common-password
password requisite pam_cracklib.so retry=3 minlen=10 difok=3 ucredit=-1 lcredit=-2 dcredit=-1 ocredit=-1

CentOS、Fedora、RHEL 系统上:

代码如下:

$ sudo vi /etc/pam.d/system-auth
password requisite pam_cracklib.so retry=3 difok=3 minlen=10 ucredit=-1 lcredit=-2 dcredit=-1 ocredit=-1

四、设置密码过期期限

编辑 /etc/login.defs 文件,可以设置当前密码的有效期限,具体变量如下所示:

代码如下:

$ sudo vi /etc/login.defs
PASSMAXDAYS 150 PASSMINDAYS 0 PASSWARNAGE 7

这些设置要求用户每6个月改变密码,并且会提前7天提醒用户密码快到期了。

如果想为每个用户设置不同的密码期限,使用 chage 命令。下面的命令可以查看某个用户的密码限期:

代码如下:


$ sudo chage -l xmodulo
Last password change : Dec 30, 2013 Password expires :
never Password inactive : never Account expires :
never Minimum number of days between password change :
0 Maximum number of days between password change :
99999 Number of days of warning before password expires : 7


默认情况下,用户的密码永不过期。

五、下面的命令用于修改 xmodulo 用户的密码期限:

代码如下:

$ sudo chage -E 6/30/2014 -m 5 -M 90 -I 30 -W 14 xmodulo

上面的命令将密码期限设为2014年6月3日。另外,修改密码的最短周期为5天,最长周期为90天。密码过期前14天会发送消息提醒用户,过期后帐号会被锁住30天。

设置完后,验证效果如下:

回答2:

提高密码复杂等级的方法:

  1. 单纯的数字、字母,甚至重复使用一个字符,这样虽然密码位数比较长,好像很难被破解出来。其实不然,单纯的数字和字符很容易被破译。因此,我们在设置密码的时候尽包含字母、数字、各种符号,如果区分大小写的话,那么还应交替使用大小写,这样组成的密码将会安全许多。

  2. 设置密码时,普通人的习惯都是从顺序较小的a、b、c、d或者1、2、3开始,这一点刚好满足了暴力破解的破解顺序,因为它们就是按照字母和数字的自然排序进行计算。因此,如果我们将密码的第一位设为z等排在后面的内容,这样破解的机率会少了许多。

在使用电脑的过程中,我们无时无刻不在与密码打交道。很多黑客之所以成功盗QQ、破解邮箱,就是因为我们设置的密码过于简单。如果自己设置的密码被别人猜到或破译,那么则会重要资料、个人隐私被泄露。因此如何设置一个安全的密码是与每个都相关的一件大事。

回答3:

password requisite pam_cracklib.so retry=3 difok=a minlen=b ucredit=-c lcredit=-d dcredit=-e ocredit=-1
为了全面,我把ocredit也加进去了,其中ocredit表示标点符号,我设置-1表示至少要一个