如何通过Auditctl在Linux上设置对特定UID用户进行的所有文件操作审计?

2026-04-30 14:322阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计979个文字,预计阅读时间需要4分钟。

如何通过Auditctl在Linux上设置对特定UID用户进行的所有文件操作审计?

要监控特定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.confmax_log_filenum_logs 设置合理,防止磁盘占满。
  • 某些操作(如通过 vim 编辑文件)会触发多个底层调用(open + read + write + close + chmod),一条编辑动作可能产生多条审计记录——这是正常现象。

不复杂但容易忽略。

标签:Linux

本文共计979个文字,预计阅读时间需要4分钟。

如何通过Auditctl在Linux上设置对特定UID用户进行的所有文件操作审计?

要监控特定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.confmax_log_filenum_logs 设置合理,防止磁盘占满。
  • 某些操作(如通过 vim 编辑文件)会触发多个底层调用(open + read + write + close + chmod),一条编辑动作可能产生多条审计记录——这是正常现象。

不复杂但容易忽略。

标签:Linux