debian系统中过期账号自动锁定需配置pam策略并设置/etc/shadow第8字段,同时通过pam_time.so、定期权限检查及auditd监控实现安全加固。

Debian系统中,过期账号的自动锁定和/etc/shadow文件的安全加固,核心在于合理配置PAM策略、密码老化参数及文件权限控制,而非依赖第三方工具。
设置账号过期后自动锁定
Debian默认不自动锁定过期账号,需通过PAM模块强制实现。编辑/etc/pam.d/common-auth,在文件开头附近添加:
auth [default=die] pam_shells.so
auth [default=die] pam_nologin.so
auth [default=die] pam_time.so
更直接有效的方式是启用pam_account_required.so并配合/etc/security/time.conf定义过期后拒绝登录。但最简实践是:确保/etc/shadow中账号的expire date字段(第8字段)设为具体日期后,再通过以下PAM规则生效:
- 在
/etc/pam.d/common-account中追加一行:
account required pam_time.so - 创建
/etc/security/time.conf,加入:
*;Al0000-2400;Ac;And&!;D(示例:2025年1月1日前未更新密码则拒绝) - 实际生产中推荐组合使用
pam_faillock.so与shadow过期字段:在common-auth中启用faillock,在common-account中添加
account [default=bad success=ok user_unknown=ignore] pam_faillock.so deny=3 unlock_time=900
强化/etc/shadow文件访问控制
/etc/shadow必须严格限制读取权限,仅root可访问。检查并修复命令:
- 运行
ls -l /etc/shadow,确认输出为-rw-r----- 1 root shadow 1234 Jan 1 12:00 /etc/shadow;若非此权限,执行:sudo chmod 640 /etc/shadow && sudo chown root:shadow /etc/shadow - 确保
shadow组中无非必要用户:getent group shadow,仅保留root或必要管理账户 - 禁用对
/etc/shadow的SGID或SUID位(不应存在):sudo chmod g-s,o-s /etc/shadow
统一配置密码老化与账号生命周期
通过/etc/login.defs和chage协同控制账号状态:
- 编辑
/etc/login.defs,设置全局策略:
PASS_MAX_DAYS 90
PASS_MIN_DAYS 1
PASS_WARN_AGE 7
INACTIVE 30
EXPIRE 2030/12/31
其中INACTIVE表示密码过期后多少天锁定账号(设为30即过期+30天后passwd字段置空,登录失败) - 对已有用户批量应用:
sudo chage -M 90 -m 1 -W 7 -I 30 -E 2030-12-31 username - 验证效果:
chage -l username查看“Password inactive”和“Account expires”字段
定期审计与自动化检测
避免策略失效,应建立轻量级检查机制:
- 编写脚本检查过期但未锁定的账号:
awk -F: '$8 != "" && $8 /dev/null | while read u; do chage -l "$u" | grep -q "Password inactive.*never\|Account expires.*never" || echo "$u needs review"; done - 将
/etc/shadow权限检查加入cron(如每周日早6点):0 6 * * 0 [ "$(stat -c "%U:%G:%a" /etc/shadow)" = "root:shadow:640" ] || echo "shadow perm alert" | mail -s "Debian security check" admin@example.com - 启用
auditd监控关键文件变更:sudo auditctl -w /etc/shadow -p wa -k shadow_access,后续用ausearch -k shadow_access追溯修改记录










