应启用 auditd 服务并配置 execve 系统调用监控规则,写入 /etc/audit/rules.d/ 并重启以持久化;配合 ausearch/aureport 分析日志,联动 rsyslog 加密外发至远程服务器确保审计连续性。

如何让 shell 命令执行记录可追溯
Linux 默认不持久化记录用户执行的命令,history 只保存在内存或当前会话的 ~/.bash_history 中,且易被覆盖、清空或绕过。真要审计,得从系统级日志入手。
核心做法是启用 auditd 服务,并配置规则捕获关键系统调用。比如监控所有 execve 系统调用,就能记录每个进程启动时的完整命令行参数(包括脚本、参数、环境变量等):
sudo auditctl -a always,exit -F arch=b64 -S execve -k command_exec
注意:32 位系统需用 b32;-k 后的标签用于后续日志过滤;该规则仅对当前运行生效,需写入 /etc/audit/rules.d/ 下的规则文件(如 cmd.rules)并重启 auditd 才能持久化。
- 普通用户也能触发该规则,无需 sudo —— 审计是内核级行为,不依赖权限提升
-
execve记录的是“实际执行的程序路径”,不是 alias 或函数名,所以别指望它显示ll,只会看到/bin/ls --color=auto - 高频命令(如循环中反复调用
date)可能撑爆日志,建议搭配-F uid!=0过滤掉 root 自身维护行为,或用auditctl -e 2锁定规则防篡改
为什么不能只靠 /var/log/secure 或 auth.log
这些日志只记录登录、sudo、PAM 认证事件,不记录用户登录后具体执行了什么命令。例如:sudo systemctl restart nginx 在 auth.log 中只体现为一次 sudo 授权成功,而真正执行的 systemctl 和其子进程调用链完全不可见。
更隐蔽的问题是:用户可通过以下方式绕过常规日志捕获:
- 用
sh -c "command"或python3 -c "import os; os.system('...')"启动命令,绕过 shell 的 history 机制 - 直接调用二进制(如
/usr/bin/curl)而非别名或函数,跳过 bash 的命令解析层 - 使用非交互式 shell(如通过 ssh 直接执行命令)时,
~/.bash_history根本不写入
只有 auditd 能覆盖所有这些路径,因为它工作在 syscall 层。
如何安全导出和分析 audit 日志
ausearch 和 aureport 是 auditd 自带的查询工具,比直接 grep /var/log/audit/audit.log 更可靠——它们能自动解析时间戳、UID、syscall 参数等结构化字段。
PHP是一种功能强大的网络程序设计语言,而且易学易用,移植性和可扩展性也都非常优秀,本书将为读者详细介绍PHP编程。 全书分为预备篇、开始篇和加速篇三大部分,共9章。预备篇主要介绍一些学习PHP语言的预备知识以及PHP运行平台的架设;开始篇则较为详细地向读者介绍PKP语言的基本语法和常用函数,以及用PHP如何对MySQL数据库进行操作;加速篇则通过对典型实例的介绍来使读者全面掌握PHP。 本书
常用操作:
- 查某用户所有命令:
ausearch -ui 1001 -m execve | aureport -f -i(-i表示解析 UID/GID 为用户名) - 查某个时间段的敏感操作:
ausearch -ts yesterday -te now -m execve -f /etc/shadow - 导出为 CSV 供 SIEM 分析:
aureport -m --start yesterday --format csv > /tmp/audit_export.csv
注意:/var/log/audit/audit.log 默认权限是 600,只有 root 可读;若需审计员定期拉取日志,应通过 sudo 配置受限命令(如只允许运行 ausearch),而非开放整个日志文件读取权限。
auditd 与 syslog 联动的关键配置点
单纯把 audit 日志留在本地磁盘风险高:磁盘满、误删、攻击者提权后清除日志都可能导致审计断档。必须外发到远程 syslog 服务器。
启用方式是在 /etc/audisp/plugins.d/syslog.conf 中将 enable 改为 yes,再确保 /etc/audisp/plugins.d/syslog.conf 的 args 行包含 -r(表示转发原始事件,而非格式化后文本)。
常见疏漏:
- 未同步时间:audit 日志时间戳基于内核,若系统时间不准,会导致与 syslog 服务器时间错位,排查时难以关联事件
- 未限制转发速率:
audispd默认不限流,突发大量 execve(如批量脚本)可能压垮网络或远端接收端 - 未加密传输:syslog 默认走 UDP 明文,建议改用
rsyslog+ TLS 或启用audispd的tcp插件并配证书
auditd 的审计能力很强,但默认配置几乎等于没开;真正落地时,90% 的问题出在规则粒度、日志留存周期和远程传输可靠性上,而不是功能本身。









