ansible自动化部署linux安全基线的核心是将人工加固项转化为可复用、可验证、可回滚的playbook,需覆盖等保2.0/cis等合规要求,适配系统版本,确保执行可控、结果可审计。

使用 Ansible 自动化部署 Linux 系统安全基线模板,核心是把人工加固项转化为可复用、可验证、可回滚的 Playbook。关键不在于写得多,而在于覆盖真实合规要求(如等保2.0、CIS Benchmark)、适配目标系统版本,并确保执行过程可控、结果可审计。
准备标准化的安全基线模板
安全基线不是通用脚本,需按发行版和版本细化。例如:
- CentOS 7 和 Rocky Linux 8 的密码策略配置路径、服务名、PAM 模块参数不同,需分目录管理(roles/hardening/vars/CentOS-7.yml)
- 禁用 root 远程登录、设置 umask、限制 SSH 登录用户、关闭非必要服务(如 telnet、rsh)、配置 auditd 规则等,应拆分为独立 task 文件,便于开关或跳过
- 推荐基于 CIS Benchmarks 或等保三级“主机安全部分”逐条映射,每条任务加注释说明对应条款编号(如 # CIS 5.4.4: Ensure permissions on /etc/shadow are configured)
构建可验证的加固 Playbook
仅执行配置不够,必须加入检查与修复分离逻辑:
- 用 ansible_facts 获取当前状态(如 ansible_distribution, ansible_distribution_version),动态加载变量
- 每个加固任务后紧跟一个 assert 或自定义 check 任务,验证结果(例如:检查 /etc/ssh/sshd_config 中 PermitRootLogin 是否为 no,权限是否为 600)
- 支持 dry-run 模式:用 --check --diff 预览变更,避免误操作;生产环境建议先在单台机器上加 --limit=target-host 测试
安全执行与最小权限控制
Ansible 本身不能成为攻击入口:
- 禁止用 root 账户直连,改用普通用户 + become: yes,并在 ansible.cfg 中设 become_method = sudo,限制 sudoers 允许的命令(如仅允许 /bin/sh -c 和指定配置文件修改)
- 敏感变量(如审计日志服务器地址、密钥轮换周期)统一存于 vault.yml,用 ansible-vault encrypt 加密,运行时通过 --ask-vault-pass 或 vault-id 解密
- Playbook 执行前自动拉取最新基线代码并校验 SHA256(可用 stat 模块检查文件哈希),防止模板被篡改
集成持续合规与报告输出
基线不是一次部署就结束:
- 将加固 Playbook 封装为定期任务(如每周 cron 调用 ansible-pull 拉取最新规则并执行),配合 --start-at-task="verify" 快速做合规巡检
- 用 callback_plugins(如 community.general.yaml)生成结构化加固报告,记录每台主机的变更项、失败项、跳过原因
- 对接 ELK 或 Grafana:将 auditd 日志 + Ansible 执行结果聚合分析,识别反复失败项(如某台机器始终无法启用 SELinux),定位环境差异










