CentOS修改密码不生效:排查与修复指南
问题现象描述
在CentOS系统中使用passwd
命令修改用户密码后,新密码无法通过SSH登录或本地验证,系统仍然要求输入旧密码。
常见原因及解决方法
1. 密码策略限制
检查/etc/login.defs
和/etc/security/pwquality.conf
文件:
# 查看最小密码长度
grep PASS_MIN_LEN /etc/login.defs
# 验证密码复杂度规则
cat /etc/security/pwquality.conf
若密码不符合策略要求,需调整参数或设置更高强度的密码。
2. PAM模块配置异常
检查/etc/pam.d/passwd
文件配置:
# 查看PAM验证链
cat /etc/pam.d/passwd
# 典型有效配置示例:
# password sufficient pam_unix.so sha512 shadow nullok try_first_pass
若存在pam_deny.so
或错误模块引用,需修正配置后执行systemctl daemon-reload
。
3. SELinux安全策略拦截
# 临时禁用SELinux排查问题
setenforce 0
# 检查SELinux日志
grep AVC /var/log/audit/audit.log | audit2allow
若问题消失,需通过semanage
调整策略或恢复默认文件上下文。
4. 文件权限异常
# 验证shadow文件权限
ls -l /etc/shadow
# 正确权限应为640且属主root
chmod 640 /etc/shadow
chown root:shadow /etc/shadow
# 检查文件锁定属性
lsattr /etc/shadow
chattr -i /etc/shadow
操作验证步骤
- 执行
passwd [username]
后立即检查/var/log/secure
日志 - 通过
su - [username]
本地验证密码变更 - 重启SSH服务后测试远程登录:
systemctl restart sshd
深度排查建议
- 使用
strace -f passwd [username]
跟踪系统调用 - 检查
/etc/nsswitch.conf
认证源配置 - 确认未启用LDAP/AD等外部认证服务