为什么要审计

出事的时候——比如服务器被入侵、有数据外泄、有人误删——你需要回答:

  • 做的
  • 什么时候做的
  • 改了什么

没有审计 → 全靠猜。审计不会防止坏事,但让事后能定位

auditd:内核级审计

Linux 自带的审计框架,由 auditd 服务收集事件到 /var/log/audit/audit.log

# 装
sudo apt install auditd audispd-plugins        # Debian/Ubuntu
sudo dnf install audit                          # RHEL 系

sudo systemctl enable --now auditd

监控关键文件

# 监控 /etc/passwd 的所有写入
sudo auditctl -w /etc/passwd -p wa -k passwd_change

# 监控 /etc/shadow
sudo auditctl -w /etc/shadow -p wa -k shadow_change

# 监控 sudoers
sudo auditctl -w /etc/sudoers -p wa -k sudoers_change

# 监控敏感目录读
sudo auditctl -w /etc/ssh -p rwa -k ssh_config

# 看当前规则
sudo auditctl -l

-p 后跟权限:r 读 / w 写 / x 执行 / a 属性。

持久化规则

写进 /etc/audit/rules.d/audit.rules

# 关键配置文件
-w /etc/passwd -p wa -k passwd_change
-w /etc/shadow -p wa -k shadow_change
-w /etc/sudoers -p wa -k sudoers_change
-w /etc/ssh/sshd_config -p wa -k ssh_config

# sudo 调用
-a always,exit -F arch=b64 -S execve -F path=/usr/bin/sudo -k sudo_exec

# 用户 / 组管理命令
-w /usr/sbin/useradd -p x -k user_mgmt
-w /usr/sbin/userdel -p x -k user_mgmt
-w /usr/sbin/usermod -p x -k user_mgmt
sudo systemctl restart auditd
sudo auditctl -l       # 验证

查询审计日志

# 看最近事件
sudo ausearch -ts recent

# 按 key 查(前面 -k 标记的)
sudo ausearch -k passwd_change
sudo ausearch -k sudo_exec --start today

# 按 UID 查
sudo ausearch -ui 1000

# 按命令查
sudo ausearch -x /usr/bin/passwd

# 按时间
sudo ausearch -ts "05/09/2026" --end "05/10/2026"

aureport:摘要报告

sudo aureport                    # 总览
sudo aureport --auth             # 认证事件
sudo aureport --login            # 登录事件
sudo aureport --failed           # 失败事件
sudo aureport -f -i              # 文件事件(含解释)
sudo aureport --summary          # 系统级汇总

实战:检测 sudo 滥用

# 看谁 sudo 跑了啥
sudo ausearch -k sudo_exec --start today \
  | grep -E 'comm|exe|uid'

系统日志同样重要

除了 auditd,正常系统日志也是事后追查的关键:

# 谁登过
last -F | head
last alice

# 失败的登录
lastb | head

# sudo 调用
sudo grep sudo /var/log/auth.log | tail

# SSH 连接
sudo grep sshd /var/log/auth.log | grep "Accepted" | tail

日志安全:防止被改

# 日志文件加 append-only 属性(除非清除属性,否则只能追加)
sudo chattr +a /var/log/auth.log

# 看属性
lsattr /var/log/auth.log

更彻底:日志发到独立服务器——攻击者拿下机器后改不了已发走的日志。

用 rsyslog 远程:

# /etc/rsyslog.d/50-remote.conf
*.* @@log-server.example.com:514

用 SIEM 集中管理

中大型环境用 SIEM(Security Information and Event Management):

  • ELK Stack(Elasticsearch + Logstash + Kibana)
  • Splunk
  • Wazuh
  • OSSIM / AlienVault
  • Graylog

它们能:

  • 聚合多机日志
  • 实时关联告警
  • 长期归档查询
  • 可视化报表

合规视角

不同合规框架对审计的要求不一样,本文不解读条款——常见涉及:

  • 等保 2.0 三级以上
  • SOC 2 Trust Service Criteria
  • PCI DSS
  • GDPR / 个保法

具体要求咨询法务和审计师。工程层面,先把 auditd 开起来 + 日志远程留存——是绝大多数框架的最低要求。

下一篇起进入模块九:实战项目。