Linux 运维操作如何实现可审计

1次阅读

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

Linux 运维操作如何实现可审计

如何让 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 nginxauth.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 日志

ausearchaureport 是 auditd 自带的查询工具,比直接 grep /var/log/audit/audit.log 更可靠——它们能自动解析时间戳、UID、syscall 参数等结构化字段。

常用操作:

  • 查某用户所有命令: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.confargs 行包含 -r(表示转发原始事件,而非格式化后文本)。

常见疏漏:

  • 未同步时间:audit 日志时间戳基于内核,若系统时间不准,会导致与 syslog 服务器时间错位,排查时难以关联事件
  • 未限制转发速率:audispd 默认不限流,突发大量 execve(如批量脚本)可能压垮网络或远端接收端
  • 未加密传输:syslog 默认走 udp 明文,建议改用 rsyslog + TLS 或启用 audispdtcp 插件并配证书

auditd 的审计能力很强,但默认配置几乎等于没开;真正落地时,90% 的问题出在规则粒度、日志留存周期和远程传输可靠性上,而不是功能本身。

text=ZqhQzanResources