auditd权限审计需围绕“谁、何时、以何身份、对何资源做了什么”构建可追溯链,核心是用auid锁定原始登录用户,聚焦/etc、/root等敏感路径的-w规则,-p限定动作类型,规则写入/etc/audit/rules.d/后执行augenrules --load加载并用auditctl -l验证。

Linux 用户权限审计不是“打开 auditd 就完事”,而是围绕“谁、在何时、以何种身份、对哪些关键资源做了什么”构建可追溯链条。核心在于用 auditd 捕获系统调用级事件,再通过 auid(原始登录用户 ID)锁定真实操作者,避免被 sudo、su 或 shell 切换掩盖。
精准监控敏感路径:从规则写法到落地验证
监控不能泛泛而谈,必须聚焦高风险位置并明确动作类型:
-
/etc 目录:用
-w /etc -p wa -k etc_audit,只捕获写入(write)和属性变更(attribute),不加r(读),防止日志爆炸 -
/root 目录:权限必须是 700,规则设为
-w /root -p rwxa -k root_access,覆盖所有可能的越权尝试 -
数据库敏感文件:别写软链接路径,先用
ls -i /var/lib/mysql/mydb/users.sql查真实 inode 路径,规则中必须填这个绝对路径 - 规则写入
/etc/audit/rules.d/后,执行sudo augenrules --load加载,再用sudo auditctl -l | grep key_name确认生效
锁定真实操作者:auid 是唯一可靠标识
uid 可被切换,euid/suid 易伪造,只有 auid(audit UID)记录用户最初登录时的身份,不受 su/sudo 影响:
在无 root/sudo 权限的环境(云容器、VPS、隔离主机)中安装并配置 OpenClaw 浏览器工具的 headless Chrome。适用场景:...
- 查某次操作是谁发起的:运行
sudo ausearch -k etc_audit | aureport -f -i | grep "auid!=" - 过滤掉未认证会话(如 cron、systemd):规则中加
-F auid!=4294967295 - 只看普通用户行为:加
-F auid>=1000,排除系统账户(UID - 若需关联命令行,必须启用 execve 审计:
sudo auditctl -a always,exit -F arch=b64 -S execve
高效查日志:不用翻 audit.log,用 ausearch + aureport 组合
原始日志是二进制且字段密集,直接查看效率低,应依赖审计工具链还原上下文:
- 查最近 30 分钟对 /etc 的所有写操作:
sudo ausearch -k etc_audit --start 30m | aureport -f -i - 确认是否为指定用户触发:
sudo ausearch -k etc_audit -m SYSCALL -i | grep "auid=1001" - 导出 CSV 格式便于分析:
sudo aureport -f -k etc_audit --format csv --start today - 配合时间戳快速定位:
--timefmt '%Y-%m-%d %H:%M:%S'在脚本输出中统一格式
权限加固与日志留存同步落地
审计只是手段,前提是基础防护到位,日志本身也得防篡改:
- /root 必须是 700,/etc 推荐 755,/var/log 建议 750(属组 syslog 或 adm)
- 编辑
/etc/audit/auditd.conf,设max_log_file = 50(MB)、num_logs = 10、max_log_file_action = rotate - 将 audit 日志转发至 rsyslog:
if $programname == 'auditd' then /var/log/audit/audit.log & stop - 定期检查
sudo auditctl -s输出,确保enabled = 1,且pid非零










