服务器安全加固自动化脚本核心是标准化、可重复、少出错,聚焦关冗余服务、锁登录入口、控权限、打补丁、留审计痕迹,按系统类型与用途差异化裁剪,动态适配规则,强制密钥登录,限定sudo命令白名单,修复关键文件权限,启用auditd与远程日志,更新补丁后验证生效,并备份配置确保可回滚。

写服务器安全加固自动化脚本,核心是把人工加固步骤标准化、可重复、少出错。重点不是堆功能,而是聚焦最小必要操作:关冗余服务、锁登录入口、控权限、打补丁、留审计痕迹。
明确加固范围,先做最小化裁剪
脚本不能“一把梭”,得按系统类型(如 CentOS 7/8、Ubuntu 20.04+、Rocky Linux)和用途(Web 服务器、数据库、跳板机)区分策略。比如 Web 服务器默认禁用 FTP、Telnet、rsh;数据库服务器则需额外限制 MySQL/PostgreSQL 的远程访问和匿名用户。
- 用 os-release 或 uname -r 判断发行版和内核版本,动态加载对应规则
- 通过 systemctl list-unit-files --state=enabled 扫描开机自启服务,只保留 sshd、crond、rsyslog 等必需项
- 用 ss -tlnp 检查监听端口,对非业务端口(如 25、111、631)直接 stop + disable 对应服务
强化身份认证与访问控制
密码登录是最大风险面,脚本必须默认关闭密码认证,强制密钥登录,并设登录失败锁定机制。
宝塔面板11.3.0是一款针对Linux服务器设计的可视化管理工具,通过重构核心模块实现资源占用显著降低,尤其适合低配置服务器环境。它将复杂的命令行操作转化为直观的图形界面,帮助开发者快速完成网站部署、环境配置及日常运维工作,无需专业技术背景即可高效管理服务器。
- 修改 /etc/ssh/sshd_config:设置 PermitRootLogin no、PasswordAuthentication no、MaxAuthTries 3、LoginGraceTime 60
- 用 faillock(RHEL/CentOS)或 pam_faildelay(Debian/Ubuntu)启用 PAM 登录失败锁定,例如 faillock --user xxx --reset 清除误锁
- 为普通用户配置 sudoers 时,用 visudo -f /etc/sudoers.d/admin 单独管理,禁止 NOPASSWD 全权限,限定命令白名单(如 /bin/systemctl restart nginx)
文件权限与日志审计要落地
很多脚本只改配置不验效果,结果权限仍宽松、日志没归档。加固必须验证+持续记录。
- 批量修复关键文件权限:chmod 600 /etc/shadow /etc/gshadow、chmod 644 /etc/passwd /etc/group、chmod 644 /etc/ssh/sshd_config
- 启用 auditd 并追加规则,例如监控敏感目录:-w /etc/passwd -p wa -k identity,再用 ausearch -k identity 验证是否生效
- 配置 rsyslog 将 auth、sudo、cron 日志发往远程日志服务器(或本地归档),并设置 logrotate 保留至少 90 天
补丁更新与加固后验证不可跳过
脚本最后一步不是“完成”,而是确认加固真实生效。否则可能因配置冲突导致 SSH 断连或服务异常。
- 执行 yum update -y 或 apt upgrade -y 后,用 rpm -q --changelog kernel | head -10(RHEL)或 apt changelog linux-image-$(uname -r)(Ubuntu)检查关键补丁是否已装
- 重启 sshd 前先开一个备用会话,运行 sshd -t 校验配置语法,再 systemctl restart sshd
- 加固完成后自动跑一次基线检查:对比 CIS Benchmark 条目,输出未达标项(如 “SSH PermitEmptyPasswords 未设为 no”),生成简明报告存到 /var/log/hardening-report.log
不复杂但容易忽略的是回滚能力——脚本开头应备份原始配置(如 /etc/ssh/sshd_config.bak),并在出错时提示手动恢复路径。真正的安全加固,不在脚本多炫酷,而在每一步都经得起重放和审计。










