19.8.7 操作审计与合规要求

操作审计与合规要求的目标是建立“可追溯、可验证、可度量”的操作链路,覆盖人、资产、命令、变更与数据访问。审计体系需与账号、权限、工单、监控告警联动,保证任何关键操作都具备身份确认、授权依据、行为记录与可回放能力。

文章图片

审计范围应覆盖登录、权限变更、配置修改、数据导出、发布变更、运维脚本执行与批量操作等高风险行为。审计事件需要带有统一元数据:操作人、来源IP、时间、目标资产、变更内容、工单号与关联任务,形成全链路证据。

主机侧操作审计(auditd + 会话记录)#

安装与启动

# Ubuntu/Debian
sudo apt-get update
sudo apt-get install -y auditd audispd-plugins

# RHEL/CentOS
sudo yum install -y audit audit-libs
sudo systemctl enable --now auditd

规则示例:记录用户登录、sudo、关键文件修改

# /etc/audit/rules.d/ops.rules
# 记录用户登录与鉴权
-w /var/log/auth.log -p wa -k authlog
-w /var/log/secure   -p wa -k authlog

# 记录sudoers变更
-w /etc/sudoers -p wa -k sudoers
-w /etc/sudoers.d/ -p wa -k sudoers

# 记录关键配置变更
-w /etc/ssh/sshd_config -p wa -k sshd

# 记录执行敏感命令(如useradd、passwd)
-a always,exit -F arch=b64 -S execve -F exe=/usr/sbin/useradd -k user_mgmt
-a always,exit -F arch=b64 -S execve -F exe=/usr/bin/passwd -k user_mgmt
# 加载规则并验证
sudo augenrules --load
sudo auditctl -l

查看与解释

# 搜索登录相关审计
sudo ausearch -k authlog -ts today

# 生成可读报告
sudo aureport -au --summary   # 用户登录汇总
sudo aureport -x --summary    # 命令执行汇总

会话记录(tty录屏示例)

# /etc/profile.d/ttyrec.sh
export HISTTIMEFORMAT="%F %T "
export PROMPT_COMMAND='history -a'
script -q -f /var/log/ttyrec/$(whoami)_$(date +%F_%H%M%S).log

排错要点
- auditd 不记录:检查 auditctl -s 状态、规则是否加载、磁盘是否满。
- 日志过大:调整 /etc/audit/auditd.confmax_log_filenum_logs
- 规则冲突:使用 auditctl -D 清空后重新加载。

数据库侧审计(MySQL 插件示例)#

安装与启用(MySQL Enterprise Audit 或 MariaDB Audit Plugin)

# 以 MariaDB 审计插件为例
sudo yum install -y MariaDB-audit
# /etc/my.cnf.d/audit.cnf
[mysqld]
plugin_load_add = server_audit
server_audit_logging = ON
server_audit_events = CONNECT,QUERY,QUERY_DDL,QUERY_DML
server_audit_excl_users = "replica,backup"
server_audit_file_path = /var/log/mysql/audit.log
sudo systemctl restart mysqld

验证

SHOW VARIABLES LIKE 'server_audit%';

排错
- 无日志:确认插件加载成功、日志路径权限(mysql用户可写)。
- 性能影响:缩小事件类型或按库/用户过滤。

容器与 Kubernetes 审计#

API Server 审计配置示例

# /etc/kubernetes/audit-policy.yaml
apiVersion: audit.k8s.io/v1
kind: Policy
rules:
  - level: Metadata
    resources:
    - group: ""
      resources: ["pods", "secrets"]
  - level: RequestResponse
    users: ["admin@example.com"]
    verbs: ["create", "delete", "patch", "update"]
# kube-apiserver 启动参数示例
--audit-log-path=/var/log/kubernetes/audit.log
--audit-policy-file=/etc/kubernetes/audit-policy.yaml
--audit-log-maxsize=100
--audit-log-maxbackup=10

查看示例

sudo tail -f /var/log/kubernetes/audit.log

排错
- 无审计日志:确认 APIServer 参数生效、路径可写、Policy YAML 格式正确。
- 日志过大:降低 level 或限制资源类型。

合规留存与防篡改(集中日志 + WORM)#

rsyslog 转发示例

# /etc/rsyslog.d/60-audit.conf
module(load="imfile")
input(type="imfile" File="/var/log/audit/audit.log" Tag="auditd" Severity="info" Facility="local6")
*.* @@logcollector.example.com:514
sudo systemctl restart rsyslog

对象存储版本化与WORM建议
- 采用对象存储版本化/不可变策略。
- 设置生命周期规则:热存储 90 天,归档 1-3 年。

告警与合规指标示例#

异常检测规则(示例思路)
- 同一账号 5 分钟内连续失败登录 ≥ 5 次。
- 非工单窗口进行敏感变更(如变更 /etc/sudoers)。
- 非工作时间批量执行部署脚本。

KPI 示例
- 审计覆盖率 ≥ 95%
- 违规操作整改闭环周期 ≤ 7 天
- 高风险操作全链路记录率 = 100%

练习与实操#

  1. /etc/ssh/sshd_config 设置审计规则,修改后查看 ausearch -k sshd 输出并解释字段含义。
  2. 在 K8s 中创建/删除一个 Pod,观察审计日志中 verbuserobjectRef 字段变化。
  3. 将 auditd 日志通过 rsyslog 转发到测试日志平台,模拟网络断开并验证本地缓存与重传行为。
  4. 编写一条规则,捕捉 useradd 命令执行,并生成 aureport -x 汇总报告。