跳转到内容
搜索 RunEntLinux 文档

仅搜索 RunEntLinux 通用文档,各发行版文档使用各自的搜索入口。

    浏览当前文档目录

    系统审计 (auditd)

    auditd(Linux Audit Daemon)是 Linux 内核级别的安全审计框架,能够记录系统调用、文件访问、用户操作等关键事件。它是满足安全合规要求(如 PCI-DSS、HIPAA、等保)的重要工具。

    大多数企业 Linux 发行版已预装 auditd,如未安装:

    Terminal window
    sudo dnf install audit audit-libs -y
    Terminal window
    sudo systemctl enable --now auditd

    查看服务状态:

    Terminal window
    sudo systemctl status auditd
    组件说明
    auditd审计守护进程,负责将审计事件写入日志
    auditctl审计规则管理工具(临时规则)
    ausearch审计日志搜索工具
    aureport审计日志报告生成工具
    /etc/audit/auditd.confauditd 服务配置文件
    /etc/audit/rules.d/持久化审计规则目录
    /var/log/audit/audit.log审计日志文件

    auditctl 用于在运行时添加、删除和查看审计规则。通过 auditctl 添加的规则是临时的,重启后会丢失。

    Terminal window
    sudo auditctl -l
    Terminal window
    sudo auditctl -s

    auditd 支持三类规则:

    1. 文件系统规则(-w):监控文件或目录的访问
    2. 系统调用规则(-a):监控特定的系统调用
    3. 控制规则(-e, -b 等):控制审计系统行为
    -w 路径 -p 权限 -k 关键字

    权限标志:

    标志说明
    r读取
    w写入
    x执行
    a属性变更
    Terminal window
    # 监控 /etc/passwd 的所有修改
    sudo auditctl -w /etc/passwd -p wa -k identity
    # 监控 /etc/shadow 的所有访问
    sudo auditctl -w /etc/shadow -p rwa -k identity
    # 监控 /etc/sudoers 的修改
    sudo auditctl -w /etc/sudoers -p wa -k sudoers_change
    # 监控 /etc/ssh/sshd_config 的修改
    sudo auditctl -w /etc/ssh/sshd_config -p wa -k sshd_config
    # 监控 /etc/hosts 的修改
    sudo auditctl -w /etc/hosts -p wa -k hosts_change
    Terminal window
    # 监控 /etc/audit/ 目录下所有文件的修改
    sudo auditctl -w /etc/audit/ -p wa -k audit_config
    # 监控 cron 配置
    sudo auditctl -w /etc/cron.d/ -p wa -k cron_change
    sudo auditctl -w /etc/crontab -p wa -k cron_change
    -a action,filter -S 系统调用 -F 字段=值 -k 关键字

    常用参数:

    参数说明
    -a always,exit总是在系统调用退出时记录
    -S指定系统调用名称或编号
    -F arch=b6464 位系统架构
    -F uid=0过滤用户 ID
    -F auid>=1000过滤审计 UID(真实登录用户)
    -F auid!=-1排除未登录用户(系统进程)
    -k关键字标签,用于后续搜索
    Terminal window
    # 监控 sudo 使用
    sudo auditctl -a always,exit -F arch=b64 -S execve -F path=/usr/bin/sudo -k privilege_escalation
    # 监控 su 使用
    sudo auditctl -a always,exit -F arch=b64 -S execve -F path=/usr/bin/su -k privilege_escalation
    # 监控 passwd 命令
    sudo auditctl -a always,exit -F arch=b64 -S execve -F path=/usr/bin/passwd -k password_change
    Terminal window
    # 监控用户和组管理命令
    sudo auditctl -a always,exit -F arch=b64 -S execve -F path=/usr/sbin/useradd -k user_management
    sudo auditctl -a always,exit -F arch=b64 -S execve -F path=/usr/sbin/userdel -k user_management
    sudo auditctl -a always,exit -F arch=b64 -S execve -F path=/usr/sbin/usermod -k user_management
    sudo auditctl -a always,exit -F arch=b64 -S execve -F path=/usr/sbin/groupadd -k user_management
    Terminal window
    sudo auditctl -a always,exit -F arch=b64 -S unlink -S unlinkat -S rename -S renameat -F auid>=1000 -F auid!=-1 -k file_deletion
    Terminal window
    sudo auditctl -a always,exit -F arch=b64 -S connect -F auid>=1000 -F auid!=-1 -k network_connect
    Terminal window
    # 删除所有临时规则
    sudo auditctl -D
    # 删除特定文件监控规则
    sudo auditctl -W /etc/passwd -p wa -k identity

    临时规则重启后会丢失。要使规则持久化,需要写入 /etc/audit/rules.d/ 目录下的文件。

    Terminal window
    sudo vi /etc/audit/rules.d/custom.rules

    添加如下内容:

    Terminal window
    # 清除已有规则
    -D
    # 设置审计缓冲区大小
    -b 8192
    # 设置失败处理模式(0=静默,1=打印,2=panic)
    -f 1
    # ========== 文件访问监控 ==========
    # 身份认证文件
    -w /etc/passwd -p wa -k identity
    -w /etc/shadow -p wa -k identity
    -w /etc/group -p wa -k identity
    -w /etc/gshadow -p wa -k identity
    # SSH 配置
    -w /etc/ssh/sshd_config -p wa -k sshd_config
    -w /etc/ssh/sshd_config.d/ -p wa -k sshd_config
    # 权限提升配置
    -w /etc/sudoers -p wa -k sudoers_change
    -w /etc/sudoers.d/ -p wa -k sudoers_change
    # 审计配置自身
    -w /etc/audit/ -p wa -k audit_config
    -w /var/log/audit/ -p wa -k audit_log
    # 网络配置
    -w /etc/hosts -p wa -k network_config
    -w /etc/sysconfig/network-scripts/ -p wa -k network_config # 仅 EL8/EL9;EL10 已移除 network-scripts,连接在 /etc/NetworkManager/system-connections/
    -w /etc/NetworkManager/system-connections/ -p wa -k network_config
    # 定时任务
    -w /etc/crontab -p wa -k cron_change
    -w /etc/cron.d/ -p wa -k cron_change
    -w /var/spool/cron/ -p wa -k cron_change
    # ========== 命令执行监控 ==========
    # 特权命令
    -a always,exit -F arch=b64 -S execve -F path=/usr/bin/sudo -k privilege_escalation
    -a always,exit -F arch=b64 -S execve -F path=/usr/bin/su -k privilege_escalation
    # 用户管理
    -a always,exit -F arch=b64 -S execve -F path=/usr/sbin/useradd -k user_management
    -a always,exit -F arch=b64 -S execve -F path=/usr/sbin/userdel -k user_management
    -a always,exit -F arch=b64 -S execve -F path=/usr/sbin/usermod -k user_management
    # 文件删除
    -a always,exit -F arch=b64 -S unlink -S unlinkat -S rename -S renameat -F auid>=1000 -F auid!=-1 -k file_deletion
    # 系统时间修改
    -a always,exit -F arch=b64 -S adjtimex -S settimeofday -S clock_settime -k time_change
    # ========== 锁定规则(放在最后) ==========
    # 取消注释以下行可防止规则在运行时被修改(需要重启才能更改规则)
    # -e 2
    Terminal window
    sudo augenrules --load

    或重启 auditd:

    Terminal window
    sudo service auditd restart

    验证规则已加载:

    Terminal window
    sudo auditctl -l

    ausearch 是审计日志的强大搜索工具。

    Terminal window
    # 搜索身份文件变更事件
    sudo ausearch -k identity
    # 搜索权限提升事件
    sudo ausearch -k privilege_escalation
    Terminal window
    # 搜索今天的事件
    sudo ausearch -k identity -ts today
    # 搜索最近 1 小时的事件
    sudo ausearch -k identity -ts recent
    # 搜索指定时间范围
    sudo ausearch -ts 03/24/2026 09:00:00 -te 03/24/2026 18:00:00
    Terminal window
    # 搜索指定用户的操作
    sudo ausearch -ua 1000
    # 搜索 root 用户的操作
    sudo ausearch -ua 0
    Terminal window
    # 搜索登录事件
    sudo ausearch -m USER_LOGIN
    # 搜索认证事件
    sudo ausearch -m USER_AUTH
    # 搜索系统调用事件
    sudo ausearch -m SYSCALL -k file_deletion
    Terminal window
    # 以可读格式输出
    sudo ausearch -k identity -i

    -i 参数会将 UID、GID、系统调用号等转换为可读的名称。

    Terminal window
    sudo ausearch -f /etc/passwd
    sudo ausearch -f /etc/shadow -i

    aureport 可以生成各类审计统计报告。

    Terminal window
    sudo aureport --summary
    Terminal window
    # 认证报告
    sudo aureport -au
    # 登录报告
    sudo aureport -l
    # 失败的认证报告
    sudo aureport -au --failed
    # 文件访问报告
    sudo aureport -f
    # 可执行文件报告
    sudo aureport -x
    # 用户报告
    sudo aureport -u
    # 系统调用报告
    sudo aureport -s
    # 异常事件报告
    sudo aureport --anomaly
    # 按关键字生成报告
    sudo aureport -k
    Terminal window
    sudo aureport -au -ts today
    sudo aureport -l -ts 03/24/2026 09:00:00 -te 03/24/2026 18:00:00

    可以使用管道将 ausearch 的结果传给 aureport:

    Terminal window
    # 查看今天的失败登录详情
    sudo ausearch -m USER_LOGIN --failed -ts today | aureport -l
    # 查看特定关键字的文件访问统计
    sudo ausearch -k identity | aureport -f --summary
    Terminal window
    sudo vi /etc/audit/auditd.conf

    关键参数:

    # 日志文件路径
    log_file = /var/log/audit/audit.log
    # 日志格式(RAW 或 ENRICHED)
    log_format = ENRICHED
    # 单个日志文件最大大小(MB)
    max_log_file = 50
    # 达到最大大小后的处理(ROTATE, SYSLOG, SUSPEND, KEEP_LOGS)
    max_log_file_action = ROTATE
    # 保留的日志文件数量
    num_logs = 10
    # 磁盘空间不足时的处理
    space_left = 75
    space_left_action = SYSLOG
    admin_space_left = 50
    admin_space_left_action = SUSPEND
    disk_full_action = SUSPEND
    disk_error_action = SUSPEND
    1. 确认 auditd 已安装并运行:

      Terminal window
      sudo dnf install audit -y
      sudo systemctl enable --now auditd
      sudo auditctl -s
    2. 创建审计规则文件:

      Terminal window
      sudo tee /etc/audit/rules.d/security.rules <<'EOF'
      -D
      -b 8192
      -f 1
      # 身份文件监控
      -w /etc/passwd -p wa -k identity
      -w /etc/shadow -p wa -k identity
      -w /etc/group -p wa -k identity
      -w /etc/sudoers -p wa -k sudoers_change
      -w /etc/sudoers.d/ -p wa -k sudoers_change
      # SSH 配置监控
      -w /etc/ssh/sshd_config -p wa -k sshd_config
      # 特权命令监控
      -a always,exit -F arch=b64 -S execve -F path=/usr/bin/sudo -k privilege_escalation
      -a always,exit -F arch=b64 -S execve -F path=/usr/bin/su -k privilege_escalation
      # 用户管理命令监控
      -a always,exit -F arch=b64 -S execve -F path=/usr/sbin/useradd -k user_mgmt
      -a always,exit -F arch=b64 -S execve -F path=/usr/sbin/userdel -k user_mgmt
      -a always,exit -F arch=b64 -S execve -F path=/usr/sbin/usermod -k user_mgmt
      # 文件删除监控
      -a always,exit -F arch=b64 -S unlink -S unlinkat -S rename -S renameat -F auid>=1000 -F auid!=-1 -k file_deletion
      EOF
    3. 加载规则:

      Terminal window
      sudo augenrules --load
      sudo auditctl -l
    4. 测试审计是否正常工作:

      Terminal window
      # 修改一个被监控的文件
      sudo touch /etc/passwd
      # 搜索对应的审计记录
      sudo ausearch -k identity -ts recent -i
    5. 生成每日审计报告:

      Terminal window
      # 汇总报告
      sudo aureport --summary -ts today
      # 认证报告
      sudo aureport -au -ts today
      # 关键字报告
      sudo aureport -k -ts today
    6. 可选:设置每日自动报告(添加 cron 任务):

      sudo tee /etc/cron.daily/audit-report <<'EOF'
      #!/bin/bash
      aureport --summary -ts yesterday -te today > /var/log/audit/daily-report-$(date +%Y%m%d).txt
      aureport -au --failed -ts yesterday -te today >> /var/log/audit/daily-report-$(date +%Y%m%d).txt
      EOF
      sudo chmod +x /etc/cron.daily/audit-report

    auditd 是 Linux 系统安全审计的基石。通过合理配置审计规则,可以全面追踪系统中的关键操作,为安全事件调查和合规审计提供可靠的数据支撑。