数据归档目录权限审计与修正需聚焦归属、权限值、粘滞位三项指标,按冷备、日志、自助三类场景设定差异化基线,通过轻量脚本自动比对、仅修异常、全程留痕,并补充高危文件检查。

数据归档目录的权限审计与修正,关键不是“全扫一遍”,而是盯住归属、权限值、粘滞位三个刚性指标,用脚本自动比对基线、只修异常项、全程留痕可回溯。
明确归档目录的权限基线标准
不同用途的归档目录需差异化定义,避免一刀切:
- 企业级冷备归档(如
/archive/financial):属主backup:archivers,权限750,禁止其他用户访问 - 日志归档目录(如
/var/log/archive):属主root:syslog,权限755,但必须启用chattr +a追加写保护 - 用户自助归档区(如
/home/*/archive):属主用户名:用户名,权限750,.ssh子目录单独校验为700 - 所有归档目录顶层必须禁用
world-writable(即不能含o+w),且tmp类路径(如/archive/tmp)须带 sticky bit(1777)
编写轻量基线比对脚本
保存为 /usr/local/bin/audit-archive-perms.sh,内容如下:
#!/bin/bash
BASELINE=(
"/archive/financial backup:archivers 750"
"/var/log/archive root:syslog 755"
"/archive/tmp root:root 1777"
)
for item in "${BASELINE[@]}"; do
read -r path owner_group mode /dev/null)
current_mode=$(stat -c "%a" "$path" 2>/dev/null)
if [[ "$current_owner" != "$owner_group" || "$current_mode" != "$mode" ]]; then
echo "$(date '+%F %T') [MISMATCH] $path: owner=$current_owner, mode=$current_mode → expected $owner_group:$mode" >> /var/log/archive-perm-audit.log
# 生产环境建议先 dry-run,确认无误后再取消注释下一行
# chown "$owner_group" "$path" && chmod "$mode" "$path"
fi
done
赋予执行权限:chmod +x /usr/local/bin/audit-archive-perms.sh
通过 cron 定期执行并保障结果可信
运行 sudo crontab -e,添加:
0 3 * * 1 /usr/local/bin/audit-archive-perms.sh
表示每周一凌晨3点执行。同时确保:
- 日志目录存在且安全:
mkdir -p /var/log && chown root:root /var/log/archive-perm-audit.log && chmod 600 /var/log/archive-perm-audit.log - 日志防篡改:
chattr +a /var/log/archive-perm-audit.log - 若需自动修复,务必在脚本中加入
--dry-run开关或先人工验证一周日志再启用chown/chmod
补充检查:归档目录内敏感子项
在脚本末尾追加检查逻辑,专盯高危信号:
# 检查归档目录下是否存在可执行的 shell 脚本(常见后门落点) find /archive -type f \( -name "*.sh" -o -name "*.py" \) -perm /u+x,g+x,o+x 2>/dev/null | while read f; do echo "$(date '+%F %T') [ALERT] Executable script found: $f" >> /var/log/archive-perm-audit.log done # 检查是否含 SUID/SGID 文件(非归档场景不应出现) find /archive -type f \( -perm -4000 -o -perm -2000 \) 2>/dev/null | while read f; do echo "$(date '+%F %T') [ALERT] SUID/SGID file in archive: $f" >> /var/log/archive-perm-audit.log done
不复杂但容易忽略











