如何通过Auditctl在Linux上设置对特定UID用户进行的所有文件操作审计?
- 内容介绍
- 文章标签
- 相关推荐
本文共计979个文字,预计阅读时间需要4分钟。
要监控特定UID用户的所有文件操作,不能仅依赖路径监控,而必须使用系统调用规则进行过滤。以下是实现这一功能的步骤:
核心思路是:捕获该 UID 执行的 openat, open, creat, unlink, rename, chmod, chown, truncate 等关键文件相关系统调用,并打上可识别的 key 标签,便于后续日志检索。
✅ 步骤一:确认目标 UID 并验证 auditd 已启用
# 查看某用户名对应的 UID(例如用户 alice) id -u alice # 输出示例:1002 # 确保 auditd 正在运行 systemctl is-active auditd # 应返回 active auditctl -s | grep enabled # enabled=1 表示已启用
✅ 步骤二:添加基于 UID 的文件操作审计规则(临时生效)
运行以下命令,为 UID 1002 添加完整文件行为监控(含读、写、创建、删除、重命名、权限/属主变更):
# 监控 open/openat(含读写标志) auditctl -a always,exit -F arch=b64 -F uid=1002 -S open,openat,creat -k user_1002_file_access # 监控写入类操作(write, writev, pwrite64 等,可选增强) auditctl -a always,exit -F arch=b64 -F uid=1002 -S write,writev,pwrite64 -k user_1002_write # 监控文件创建与删除 auditctl -a always,exit -F arch=b64 -F uid=1002 -S unlink,unlinkat,mkdir,mkdirat,rmdir -k user_1002_fs_mod # 监控重命名与移动 auditctl -a always,exit -F arch=b64 -F uid=1002 -S rename,renameat -k user_1002_rename # 监控属性变更(chmod/chown/fchmod/fchown 等) auditctl -a always,exit -F arch=b64 -F uid=1002 -S chmod,fchmod,chown,fchown,setxattr,removexattr -k user_1002_attr_change
✅ 步骤三:使规则永久生效(重启不丢失)
将上述规则写入 /etc/audit/rules.d/user-1002.rules(文件名任意,但需以 .rules 结尾):
sudo tee /etc/audit/rules.d/user-1002.rules <<'EOF' -a always,exit -F arch=b64 -F uid=1002 -S open,openat,creat -k user_1002_file_access -a always,exit -F arch=b64 -F uid=1002 -S write,writev,pwrite64 -k user_1002_write -a always,exit -F arch=b64 -F uid=1002 -S unlink,unlinkat,mkdir,mkdirat,rmdir -k user_1002_fs_mod -a always,exit -F arch=b64 -F uid=1002 -S rename,renameat -k user_1002_rename -a always,exit -F arch=b64 -F uid=1002 -S chmod,fchmod,chown,fchown,setxattr,removexattr -k user_1002_attr_change EOF
然后重新加载规则:
sudo augenrules --load # 或等效命令: sudo systemctl restart auditd
验证是否载入成功:
sudo auditctl -l | grep "uid=1002"
✅ 步骤四:测试与日志检索
让 UID 1002 的用户执行操作(如 touch /tmp/testfile, rm /tmp/testfile, chmod 600 /tmp/testfile),然后立即检索:
# 按 key 搜索最近 10 分钟内该用户的全部文件操作 sudo ausearch -k user_1002_file_access --start recent --input-logs | aureport -f -i # 或查看原始日志条目(含路径、系统调用、返回值) sudo ausearch -k user_1002_file_access -i --start recent # 查看该用户所有审计事件(不限类型) sudo ausearch -ui 1002 -i --start recent
⚠️ 注意事项
- 不要滥用
all系统调用(如-S all),会导致日志爆炸、性能下降甚至丢事件。聚焦关键文件行为即可。 - 若监控 root(UID 0),需格外谨慎,避免规则干扰关键系统进程;建议优先用
-F auid!=4294967295排除未登录上下文(即排除 kernel-init 进程)。 - 日志默认存于
/var/log/audit/audit.log,确保auditd.conf中max_log_file和num_logs设置合理,防止磁盘占满。 - 某些操作(如通过
vim编辑文件)会触发多个底层调用(open + read + write + close + chmod),一条编辑动作可能产生多条审计记录——这是正常现象。
不复杂但容易忽略。
本文共计979个文字,预计阅读时间需要4分钟。
要监控特定UID用户的所有文件操作,不能仅依赖路径监控,而必须使用系统调用规则进行过滤。以下是实现这一功能的步骤:
核心思路是:捕获该 UID 执行的 openat, open, creat, unlink, rename, chmod, chown, truncate 等关键文件相关系统调用,并打上可识别的 key 标签,便于后续日志检索。
✅ 步骤一:确认目标 UID 并验证 auditd 已启用
# 查看某用户名对应的 UID(例如用户 alice) id -u alice # 输出示例:1002 # 确保 auditd 正在运行 systemctl is-active auditd # 应返回 active auditctl -s | grep enabled # enabled=1 表示已启用
✅ 步骤二:添加基于 UID 的文件操作审计规则(临时生效)
运行以下命令,为 UID 1002 添加完整文件行为监控(含读、写、创建、删除、重命名、权限/属主变更):
# 监控 open/openat(含读写标志) auditctl -a always,exit -F arch=b64 -F uid=1002 -S open,openat,creat -k user_1002_file_access # 监控写入类操作(write, writev, pwrite64 等,可选增强) auditctl -a always,exit -F arch=b64 -F uid=1002 -S write,writev,pwrite64 -k user_1002_write # 监控文件创建与删除 auditctl -a always,exit -F arch=b64 -F uid=1002 -S unlink,unlinkat,mkdir,mkdirat,rmdir -k user_1002_fs_mod # 监控重命名与移动 auditctl -a always,exit -F arch=b64 -F uid=1002 -S rename,renameat -k user_1002_rename # 监控属性变更(chmod/chown/fchmod/fchown 等) auditctl -a always,exit -F arch=b64 -F uid=1002 -S chmod,fchmod,chown,fchown,setxattr,removexattr -k user_1002_attr_change
✅ 步骤三:使规则永久生效(重启不丢失)
将上述规则写入 /etc/audit/rules.d/user-1002.rules(文件名任意,但需以 .rules 结尾):
sudo tee /etc/audit/rules.d/user-1002.rules <<'EOF' -a always,exit -F arch=b64 -F uid=1002 -S open,openat,creat -k user_1002_file_access -a always,exit -F arch=b64 -F uid=1002 -S write,writev,pwrite64 -k user_1002_write -a always,exit -F arch=b64 -F uid=1002 -S unlink,unlinkat,mkdir,mkdirat,rmdir -k user_1002_fs_mod -a always,exit -F arch=b64 -F uid=1002 -S rename,renameat -k user_1002_rename -a always,exit -F arch=b64 -F uid=1002 -S chmod,fchmod,chown,fchown,setxattr,removexattr -k user_1002_attr_change EOF
然后重新加载规则:
sudo augenrules --load # 或等效命令: sudo systemctl restart auditd
验证是否载入成功:
sudo auditctl -l | grep "uid=1002"
✅ 步骤四:测试与日志检索
让 UID 1002 的用户执行操作(如 touch /tmp/testfile, rm /tmp/testfile, chmod 600 /tmp/testfile),然后立即检索:
# 按 key 搜索最近 10 分钟内该用户的全部文件操作 sudo ausearch -k user_1002_file_access --start recent --input-logs | aureport -f -i # 或查看原始日志条目(含路径、系统调用、返回值) sudo ausearch -k user_1002_file_access -i --start recent # 查看该用户所有审计事件(不限类型) sudo ausearch -ui 1002 -i --start recent
⚠️ 注意事项
- 不要滥用
all系统调用(如-S all),会导致日志爆炸、性能下降甚至丢事件。聚焦关键文件行为即可。 - 若监控 root(UID 0),需格外谨慎,避免规则干扰关键系统进程;建议优先用
-F auid!=4294967295排除未登录上下文(即排除 kernel-init 进程)。 - 日志默认存于
/var/log/audit/audit.log,确保auditd.conf中max_log_file和num_logs设置合理,防止磁盘占满。 - 某些操作(如通过
vim编辑文件)会触发多个底层调用(open + read + write + close + chmod),一条编辑动作可能产生多条审计记录——这是正常现象。
不复杂但容易忽略。

