Ansible可通过幂等playbook实现Linux安全基线自动化配置,覆盖账户认证、SSH加固、服务网络、日志审计、文件系统五大类;采用Role结构提升复用性,结合变量控制多环境策略,并通过备份、预检、验证与报告保障安全可控。

Ansible 可以高效、可复现地完成 Linux 系统安全基线配置,避免人工操作遗漏和不一致。关键在于将合规要求(如等保2.0、CIS Benchmark)转化为幂等、模块化的 playbook,并通过变量控制不同环境的差异化策略。
覆盖核心安全基线项
一个实用的安全基线模板应至少包含以下几类配置:
-
账户与认证:强制密码复杂度(
pam_pwquality)、限制失败登录次数(pam_faillock)、禁用空密码、锁定 root 远程 SSH 登录、设置密码最大有效期(/etc/login.defs和chage) - SSH 加固:禁用协议 v1、关闭 root 登录、限制允许用户/组、启用密钥认证、修改默认端口(可选)、禁用空密码登录
-
系统服务与网络:关闭非必要服务(
telnet、rsh、ftp等)、配置防火墙(firewalld或iptables默认拒绝入站)、禁用 IPv6(若无需)、关闭 ICMP 响应(net.ipv4.icmp_echo_ignore_all) -
日志与审计:启用
auditd并加载合规规则(如 CIS audit rules)、集中日志转发(rsyslog + TLS)、保护日志文件权限(600或640) -
文件系统与权限:设置
/tmp、/var/tmp为noexec,nosuid,nodev;加固关键目录(/etc/shadow权限设为000,/etc/passwd设为644);启用umask 027
采用角色化(Role)结构提升复用性
把不同安全模块拆分为独立 role,例如:role/security-hardening、role/ssh-secure、role/auditd-config。每个 role 包含 tasks、handlers、defaults 和 vars,便于按需组合调用。
在主 playbook 中通过 roles: 列表声明所需加固项,再用 vars_files 或 inventory group_vars 指定环境变量(如 enable_ssh_port_change: true、max_password_age: 90),实现一套代码适配开发、测试、生产等多环境。
确保幂等性与安全回滚能力
所有任务必须使用 Ansible 原生模块(如 user、lineinfile、sysctl、copy with backup: true),避免 shell 执行不可控命令。对关键配置文件(如 /etc/ssh/sshd_config)启用备份,便于快速还原。
建议在 playbook 开头加入预检 task:检查是否已应用过基线(如通过标记文件 /etc/.security-baseline-applied),或校验关键参数当前值(command: grep ... | awk + failed_when),跳过已符合项,减少干扰。
集成验证与报告输出
部署完成后,可调用 community.general.expect 或自定义脚本执行简单合规检测(如确认 PermitRootLogin no 是否生效),并将结果写入 JSON 文件。结合 ansible-runner 或 CI/CD 流水线,自动触发基线扫描工具(如 lynis 或 oscap)生成 PDF/HTML 报告,作为交付物存档。
不复杂但容易忽略的是:每次更新基线模板后,应在隔离环境完整重跑并比对前后 diff 输出,确保无意外覆盖或冲突。










