配置服务器权限基线自动化检查需建立可重复、可验证、可修复的闭环机制,聚焦高风险路径如/etc/shadow(600)、/etc/sudoers(440)、/root(700)等,用stat比对权限,支持YAML自定义规则、彩色终端输出、JSON/CSV导出及白名单自动修复,并嵌入Git、定时任务、CI/CD与实时监控流程。

配置服务器权限基线自动化检查,关键在于建立可重复、可验证、可修复的闭环机制,而不是堆砌工具或跑一次脚本就完事。核心是把“该是什么样”定义清楚,再让机器自动比对、告警、(谨慎地)修正。
明确要管哪些路径和权限
先聚焦高风险项,避免泛泛而谈。以下路径必须纳入基线清单:
- /etc/shadow:权限必须为 600,属主属组均为 root
- /etc/sudoers 和 /etc/sudoers.d/ 目录下文件:统一设为 440(root:root),禁写权限
- /etc/passwd 和 /etc/group:建议 644;若环境敏感,/etc/group 可收紧为 640
- /root 目录:权限严格控制为 700
- /tmp 和 /var/tmp:必须启用 sticky bit,即 1777
- /etc/ssh/sshd_config:推荐 600 或 644,严禁 666、646 等宽松权限
用轻量脚本实现自动比对
不依赖复杂平台,单个 Bash 脚本即可启动。核心逻辑是用 stat 获取真实权限,而非解析 ls -l 输出(易错位):
- 执行 stat -c "%a %U:%G %n" /etc/shadow 获取八进制权限、属主属组及路径
- 逐项比对预设基线值,如发现当前是 644 而期望是 600,则标记为异常
- 对不存在的文件给出提示但不停止扫描;符号链接默认跳过,加 --follow 参数才解析目标文件
- 支持 YAML 自定义规则,例如:
/etc/myapp/config.conf:
mode: "640"
owner: "myapp"
group: "myapp"
输出与修复要兼顾人机可用
结果不能只给运维看,也要方便系统集成:
- 终端输出带颜色高亮:合规项绿色,越权项红色,一眼识别风险
- 加 --json 参数生成标准 JSON,含时间戳、路径、当前权限、期望权限、是否合规字段,供 SIEM 或监控平台消费
- 加 --csv 输出表格格式,适合导入 Excel 做趋势分析或审计留痕
- 加 --fix(需 root 权限)自动修复,但仅作用于白名单路径(如 /etc/shadow、/etc/sudoers),防止误改系统关键结构
嵌入日常运维才真正生效
自动化不是独立动作,而是流程一环:
- 脚本本身放入 Git 版本库,每次权限基线变更都留记录、走评审
- 用 systemd timer 或 cron 每日定时运行,失败时邮件或企业微信告警
- 在 CI/CD 流水线中加入检查步骤,例如 Ansible 执行前校验 /etc/sudoers 权限是否仍为 440
- 配合 inotifywait 监控 /etc 目录变更,一旦非 root 用户修改了 shadow 文件,立即触发告警

















