一键合规化脚本需覆盖密码生命周期、复杂度、账户锁定、空口令/高危账户四大项,适配Debian/RHEL系路径与判断逻辑,执行后自动验证并备份配置,强制root权限运行且遵循最小权限原则。

用自动化脚本实现身份认证配置的一键合规化,核心是把分散的手动操作(如密码策略、账户锁定、SSH登录控制)固化为可重复执行的逻辑,并确保符合主流标准(如CIS、等保2.0或NIST SP 800-53)。关键不在于写得多复杂,而在于覆盖真实风险点、适配不同发行版、且执行后可验证。
覆盖身份认证四大关键项
合规检查通常聚焦以下四类配置,脚本需逐一落实:
-
密码生命周期管理:通过
/etc/login.defs设置PASS_MAX_DAYS 90、PASS_MIN_DAYS 7、PASS_WARN_AGE 14,确保新用户默认满足最小有效期与提醒要求 -
密码复杂度强制:在
/etc/pam.d/common-password(Debian/Ubuntu)或/etc/pam.d/system-auth(RHEL/CentOS)中插入password requisite pam_pwquality.so minlen=12 minclass=3 difok=3 retry=3 -
账户失败锁定:在
/etc/pam.d/sshd添加auth [default=die] pam_tally2.so deny=5 unlock_time=900 even_deny_root,实现5次失败后锁定15分钟,root也受控 -
禁用空口令与高危账户:自动扫描
/etc/shadow中第二字段为空的账户,对非root空口令账户执行passwd -e强制首次登录改密;对测试账户(如test、ftp)执行usermod -L锁定
适配不同系统版本的判断逻辑
脚本不能硬编码路径或模块名。需先探测系统类型再分支处理:
- 用
grep -q "ubuntu" /etc/os-release && echo "deb"或rpm -q centos-release >/dev/null && echo "rhel"判断发行版 - 区分 PAM 配置文件路径:
/etc/pam.d/common-password(Debian系) vs/etc/pam.d/system-auth(RHEL系) - 区分密码策略生效范围:修改
/etc/login.defs只影响新建用户;对已有用户需补跑chage -M 90 -m 7 -W 14 username
执行后自动验证是否真正生效
加固不是“跑完就结束”,脚本末尾必须加入校验环节,避免配置被覆盖或语法错误导致失效:
- 检查
sshd -T | grep -E "permitrootlogin|passwordauthentication"输出是否为no - 运行
pam_pwquality --test --string "weak123"确认复杂度模块加载正常 - 用
awk -F: '($2 == "") {print $1}' /etc/shadow验证空口令账户是否清零 - 对任意普通用户执行
chage -l username,确认Maximum number of days between password change显示为90
安全交付与最小权限原则
脚本本身要防误用、防提权、防残留:
- 脚本开头加
if [[ $EUID -ne 0 ]]; then echo "请使用 root 权限运行"; exit 1; fi强制权限校验 - 所有敏感文件修改前先备份,如
cp /etc/login.defs /etc/login.defs.harden-$(date +%Y%m%d) - 不写死用户名或IP,避免硬编码敏感信息;如需白名单用户,应从外部文件读取或交互式输入
- 执行完成后提示重启 SSH 服务(
systemctl restart sshd)并建议手动验证一次登录流程


















