Ansible实现系统权限巡检修复闭环:定义角色化基线(如/etc/shadow 600)、Playbook一体化检测修复(stat校验+file收敛)、cron定时执行+失败告警+CI/CD预检。

用Ansible定期巡检并修复系统权限漂移,关键不是“一次修好”,而是建立可验证、可回滚、能自动触发的闭环机制。核心动作就三步:定义基线、定时比对、按需修复。
先建可信权限基线
没有基线,就分不清什么是漂移。不能靠经验或记忆,必须固化为代码:
- 针对不同角色服务器(如DB节点、Web节点)分别定义最小权限集,例如:/etc/shadow必须600、/usr/bin/sudo必须4755、/etc/passwd必须644
- 用
rpm -V sudo(RHEL系)或debsums -c(Debian系)校验系统关键文件原始权限是否被改动 - 对高风险目录批量快照:
find /etc /usr/local/bin -type f -printf "%M %u:%g %p\n" | sort > /var/log/perm-baseline-$(date +\%F),存入Git做版本比对
用Playbook实现巡检+修复一体化
一个Playbook同时承担检测与收敛职责,避免脚本割裂导致状态不一致:
- 先用
stat模块检查目标路径权限,通过failed_when触发告警条件,例如:stat /etc/shadow | json_query('stat.mode') != '0600' - 修复任务使用
file模块,明确指定owner、group、mode,并设force: no防止覆盖非空ACL - 对/home目录等敏感路径,加
when: ansible_facts['users'] | length > 1等条件判断,避免误操作影响协作用户
接入定时与反馈机制
巡检不跑起来,基线就是废纸。要让它真正运转:
- 用
cron模块在所有节点部署每日凌晨2点执行的定时任务:ansible-playbook /opt/ansible/fix-perms.yml --limit @/var/log/perm-failures.log - 修复失败时,用
lineinfile把异常路径写入日志,并触发邮件通知;成功后自动清理上一轮失败记录 - 在CI/CD流水线中加入预检步骤:
ansible-playbook fix-perms.yml --check,确保变更前可见、可控、可评估
整个过程不需要人工登录每台机器,也不依赖临时脚本。Ansible的幂等性保证反复运行安全,声明式语法让意图清晰可读,配合Git版本管理,每一次权限调整都有据可查。


















