linux用户访问审计必须使用auditd捕获execve系统调用,且需同时指定arch=b64和arch=b32规则;规则须存于/etc/audit/rules.d/下以.rules结尾的文件中,并用augenrules --load加载;查日志必须用ausearch+aureport,不可直接cat audit.log。

Linux 中用户访问审计不能靠 .bash_history 或简单改 /etc/profile,那些方式漏掉 su、ssh 非交互调用、exec 绕过等关键路径。真正能覆盖所有用户进程级操作的,只有 auditd 对 execve 系统调用的捕获。
auditctl 添加 execve 规则必须指定 arch 参数
不加 -F arch=b64 或 -F arch=b32,规则在多数现代系统上根本不会触发 —— 因为内核按 ABI 区分系统调用入口,x86_64 系统默认只匹配 64 位调用,32 位程序(如某些容器内进程或旧工具)会被完全忽略。
- 64 位主规则:
auditctl -a always,exit -F arch=b64 -S execve -k command_exec - 兼容 32 位(建议加上):
auditctl -a always,exit -F arch=b32 -S execve -k command_exec - 不要用
-F uid!=0这类过滤写在规则里:容易因语法错误导致整条规则加载失败,漏记所有命令;过滤留到查日志时做更安全
/etc/audit/rules.d/ 下的规则文件必须以 .rules 结尾且 augenrules --load
auditctl 添加的规则重启后消失,必须落盘。但直接写进 /etc/audit/rules.d/audit.rules 不一定生效 —— 某些发行版(如 RHEL 8+、Ubuntu 20.04+)要求用 augenrules 加载,否则服务启动时跳过该文件。
PyCharm 2026.2.0.1 Linux版提供 JetBrains 官方 2026.2.0.1 版本安装包,适合需要指定 PyCharm 版本进行 Python 项目开发、运行和调试的用户。
- 新建文件,例如:
/etc/audit/rules.d/execve.rules(名字任意,但后缀必须是.rules) - 内容只需两行(不含注释):
-a always,exit -F arch=b64 -S execve -k command_exec<br>-a always,exit -F arch=b32 -S execve -k command_exec
- 执行
augenrules --load,而非systemctl restart auditd;后者可能因规则语法错误静默失败,而augenrules会报错提示具体哪一行出问题
查用户命令不能直接 cat /var/log/audit/audit.log
原始日志是二进制结构化事件流,字段密集、无换行、含 null 字节,cat 或 grep 直接读会丢数据、乱码甚至卡死终端。必须用 ausearch 解析后再转人可读格式。
- 查 UID 1000 用户的所有命令:
ausearch -ui 1000 -m execve --raw | aureport -f -i - 查某次登录会话(比如
loginuid=1000)的完整操作链:ausearch -loginuid 1000 -m execve --raw | aureport -f -i - 查含敏感词的命令(如
passwd):ausearch -m execve | grep -i passwd—— 注意这是对ausearch输出文本流的过滤,不是审计引擎层过滤
最易被忽略的一点:execve 规则记录的是「进程启动」,不是「命令输入」。它能拿到完整参数(如 rm -rf /tmp/*),但无法还原 shell 的上下文(比如当前工作目录、重定向符号、管道链)。如果需要关联 tty、session ID 或环境变量,得配合 -w /var/run/utmp 和 -w /var/log/wtmp 规则一起分析,否则单看 execve 日志,你不知道这条命令是在哪个终端、哪次登录中执行的。










