在CentOS系统中配置Shadow密码套件是提升系统安全性的关键步骤,Shadow套件通过将密码信息从/etc/passwd文件中分离出来,存储在/etc/shadow文件中,有效防止了密码被未授权访问,本文将详细介绍如何在CentOS系统中正确配置Shadow密码套件,包括安装、配置、权限管理及安全加固等环节。

安装Shadow套件
在CentOS系统中,Shadow套件通常作为基础软件包的一部分已预安装,若未安装,可通过yum或dnf包管理器进行安装,执行以下命令检查是否已安装Shadow套件:
rpm -qa | grep shadow
若输出结果包含shadow、shadow-utils等包,则说明已安装,若未安装,可通过以下命令安装:
sudo yum install shadow-utils
安装完成后,系统会自动创建/etc/shadow文件,并设置适当的文件权限,默认情况下,/etc/shadow文件仅允许root用户读取,确保了密码信息的安全性。
理解Shadow文件结构
/etc/shadow文件是系统安全的核心,其每行记录对应一个用户,字段之间用冒号分隔,典型记录如下:
username:password:lastchg:min:max:warn:inactive:expire:flag
各字段含义如下:
- username:用户名。
- password:加密后的密码,若为或,表示密码被锁定或未设置。
- lastchg:上次修改密码的天数,从1970年1月1日开始计算。
- min:密码最小使用天数,防止频繁修改密码。
- max:密码最大使用天数,强制用户定期更换密码。
- warn:密码过期前警告天数。
- inactive:密码过期后账户被锁定前的宽限天数。
- expire:账户过期天数,从1970年1月1日开始计算,过期后账户无法登录。
- flag:保留字段,通常为空。
配置密码策略
通过修改/etc/login.defs文件,可以全局设置密码策略,该文件定义了新建用户时的默认密码规则,以下是常用配置项:
- PASS_MAX_DAYS:密码最大使用天数,默认为9999,建议设置为90-180天。
- PASS_MIN_DAYS:密码最小使用天数,默认为0,建议设置为7天。
- PASS_WARN_AGE:密码过期前警告天数,默认为7天。
- ENCRYPT_METHOD:密码加密方法,推荐使用
SHA512。
修改/etc/login.defs文件,设置密码每90天过期,且提前7天警告:
PASS_MAX_DAYS 90
PASS_MIN_DAYS 7
PASS_WARN_AGE 7
ENCRYPT_METHOD SHA512
修改后,新建用户将遵循这些策略,对于已存在的用户,可通过chage命令单独调整密码策略。

使用chage命令管理密码策略
chage命令用于修改用户密码过期信息,以下是常用选项:
- -M max:设置密码最大使用天数。
- -m min:设置密码最小使用天数。
- -W warn:设置密码过期前警告天数。
- -E expire:设置账户过期日期。
- -I inactive:设置密码过期后宽限天数。
为用户example设置密码每60天过期,提前10天警告,且账户在2026-12-31过期:
sudo chage -M 60 -W 10 -E 2026-12-31 example
查看用户当前的密码策略信息:
sudo chage -l example
锁定与解锁用户账户
为增强安全性,可暂时锁定不活跃的用户账户,使用passwd命令的-l选项锁定账户:
sudo passwd -l example
锁定后,用户无法通过密码登录,但可能仍可通过其他认证方式(如SSH密钥)登录,解锁账户使用-u选项:
sudo passwd -u example
若需永久禁用账户,可将/etc/shadow文件中对应字段的密码改为或。
设置密码复杂度要求
通过pam_pwquality模块,可强制用户设置复杂密码,编辑/etc/security/pwquality.conf文件,添加以下配置:
minlen = 8
minclass = 3
dcredit = -1
ucredit = -1
ocredit = -1
lcredit = -1
配置项说明:

- minlen:密码最小长度。
- minclass:必须包含的字符类别(大写、小写、数字、特殊字符)数量。
- dcredit:至少包含的数字数量(负值表示至少)。
- ucredit:至少包含的大写字母数量。
- ocredit:至少包含的特殊字符数量。
- lcredit:至少包含的小写字母数量。
配置后,用户在修改密码时需满足上述要求,否则会被系统拒绝。
定期审计与监控
定期检查/etc/shadow文件,确保密码策略被正确执行,使用awk命令查找即将过期的密码:
sudo awk -F: '$5 < 30 {print $1 "密码将在" $5 "天后过期"}' /etc/shadow
可通过faillog和lastlog命令监控失败登录尝试,及时发现异常行为:
sudo faillog sudo lastlog
相关问答FAQs
Q1: 如何查看某个用户的密码过期时间?
A1: 使用chage命令结合-l选项即可查看。sudo chage -l username会显示该用户的密码上次修改时间、过期时间、警告时间等信息。
Q2: 如果忘记root密码,如何重置?
A2: 重置root密码需通过单用户模式或恢复模式实现,具体步骤如下:
- 重启系统,在GRUB引导界面按
e键编辑启动参数。 - 找到以
linux或linux16开头的行,在行末添加rd.break。 - 按
Ctrl+X启动系统,进入紧急模式。 - 重新挂载
/sysroot为可写模式:mount -o remount,rw /sysroot。 - 切换到
/sysroot环境:chroot /sysroot。 - 使用
passwd命令重置root密码,完成后执行touch /.autorelabel以恢复SELinux上下文。 - 输入
exit两次,系统将重启并应用新密码。