核心是批量设置默认acl(d:u:auditor:r-x)以确保新日志目录/文件自动继承,同时对现有目录设u:auditor:r-x、对日志文件设u:auditor:r--,并用find递归应用;需注意logrotate等工具可能破坏acl继承,应配置create参数或触发式更新。

在 Linux 运维中,用 setfacl 为审计员赋予所有业务日志目录的只读 ACL 权限,核心是:**批量设置默认 ACL(default ACL)+ 显式只读权限(r-x 或 r--)+ 递归应用到现有文件和子目录**。关键在于区分“目录”和“文件”的权限语义,避免审计员误删或写入。
明确审计员所需的实际权限组合
只读 ≠ 单纯加 r。对目录需可进入、可列出内容(r-x),对普通日志文件只需读取(r--)。ACL 不会自动区分类型,所以推荐:
- 对日志目录设
u:auditor:r-x(允许 cd 和 ls) - 对日志文件设
u:auditor:r--(仅 cat/tail 查看) - 同时加
d:u:auditor:r-x(默认 ACL),确保新创建的日志目录/文件自动继承
一次性批量设置现有日志目录及其内容
假设所有业务日志目录统一在 /var/log/app/ 下(如 /var/log/app/order、/var/log/app/payment):
先给每个日志目录设默认 ACL 和当前权限:
find /var/log/app -type d -exec setfacl -m u:auditor:r-x,d:u:auditor:r-x {} \;
再给已存在的日志文件设只读(跳过目录):
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
find /var/log/app -type f -exec setfacl -m u:auditor:r-- {} \;
✅ 这样既生效于当前结构,又保证后续新建日志文件/子目录自动获得对应权限。
验证与日常维护要点
检查是否生效:
-
getfacl /var/log/app/order/—— 看是否有user:auditor:r-x和default:user:auditor:r-x -
getfacl /var/log/app/order/app.log—— 看是否有user:auditor:r-- - 切到
auditor用户测试:ls /var/log/app/order/(应成功)、cat app.log(应成功)、touch test.log(应 Permission denied)
⚠️ 注意:若日志轮转工具(如 logrotate)以 root 身份创建新文件,且未保留 ACL,则新文件可能丢失 auditor 权限 —— 此时需在 logrotate 配置中添加 create 644 root root 并确认 copytruncate 或 nocopy 行为不影响 ACL 继承。
补充:如果日志路径不固定,建议用配置驱动方式
运维中路径常变动,硬编码 find 不可持续。更稳妥的做法是:
- 维护一个清单文件
/etc/log-dirs-audit.list,每行一个日志目录路径 - 写小脚本定期执行(例如加入 cron):
while IFS= read -r dir; do
[ -d "$dir" ] || continue
setfacl -Rm u:auditor:r-x,d:u:auditor:r-x "$dir" 2>/dev/null
find "$dir" -type f -exec setfacl -m u:auditor:r-- {} \;
done <p>配合 <code>inotifywait</code> 或 systemd path unit 可实现变更触发式更新,适合合规性要求高的环境。</p>










