Linux Audit 系统配置介绍

针对 Linux Audit 系统(auditd),常用设置主要集中在配置文件调优规则策略制定日志管理以及最佳实践四个方面。

以下是 Audit 最常用的设置和技巧:

配置文件调优

1. 核心配置文件调优 (auditd.conf)

主配置文件位于 /etc/audit/auditd.conf。默认配置通常能满足基本需求,但在生产环境中,建议调整以下参数以防日志丢失或占用过多磁盘空间。

bash 复制代码
vim /etc/audit/auditd.conf

常用参数设置:

  • log_file = /var/log/audit/audit.log
    • 日志存储路径。默认即可,确保磁盘空间充足。
  • max_log_file = 8 (或更大,如 100)
    • 单个日志文件的最大容量(单位:MB)。当达到这个大小时,Auditd 会自动轮转日志。
  • max_log_file_action = ROTATE
    • 当日志达到最大容量时的动作。
    • ROTATE:轮转(保留旧日志,创建新文件,数量由 num_logs 决定)。推荐。
    • KEEP_LOGS:不覆盖,不断增加日志文件。
    • IGNORE:不记录,继续写到当前文件(可能导致日志损坏)。
  • num_logs = 5
    • 保留的轮转日志文件数量。例如设置为 5,加上当前正在使用的 1 个,总共最多占用 6 倍 max_log_file 的空间。
  • space_left = 20% (或具体数值如 75M)
    • 当磁盘剩余空间低于此值时触发警告。
  • space_left_action = SYSLOG (或 email)
    • 磁盘空间不足时的动作。SYSLOG 会向系统日志发送警告;如果安装了邮件服务,可以设置为 email 并配置 action_mail_acct
  • admin_space_left = 10%
    • 极低空间的警戒线。
  • admin_space_left_action = SUSPEND (或 HALT/SINGLE)
    • 极其重要的设置
    • SUSPEND:暂停记录日志(默认),防止系统崩溃。
    • HALT:直接关机(适用于极高安全要求的系统,防止日志被覆盖)。
    • SINGLE:切换到单用户模式。
  • flush = INCREMENTAL
    • 数据写入磁盘的频率。INCREMENTAL 配合 freq 参数可以平衡性能和数据安全。对于高频操作,设为 DATASYNC 更安全但更耗性能。

规则策略制定

1. 常用监控规则策略

规则通常写在 /etc/audit/rules.d/audit.rules 中。以下是根据安全合规性(如 CIS Benchmark)整理的常用规则集合。

A. 文件完整性监控

监控关键系统文件是否被篡改(如密码文件、SSH配置、Web目录)。

bash 复制代码
# 监控 /etc/passwd 和 /etc/shadow (写和属性变更)
-w /etc/passwd -p wa -k identity
-w /etc/shadow -p wa -k identity

# 监控 SSH 配置
-w /etc/ssh/sshd_config -p wa -k sshd_config

# 监控 sudoers 文件
-w /etc/sudoers -p wa -k sudoers
-w /etc/sudoers.d/ -p wa -k sudoers

# 监控 Web 目录 (可选)
-w /var/www/html -p wa -k web_data
B. 系统调用监控 (更底层、更详细)

监控特定权限的提升或变更操作。

bash 复制代码
# 监控时间修改 (防止有人回溯系统时间)
-a always,exit -F arch=b64 -S adjtimex -S settimeofday -S stime -S clock_settime -k time_change

# 监控用户/组相关操作 (useradd, groupadd 等)
-a always,exit -F arch=b64 -S creat -S open -S openat -S truncate -S ftruncate -F exit=-EACCES -F auid>=1000 -F auid!=4294967295 -k access
-a always,exit -F arch=b64 -S unlink -S unlinkat -S rename -S renameat -F auid>=1000 -F auid!=4294967295 -k delete

# 监控权限变更 (chmod, chown)
-a always,exit -F arch=b64 -S chmod -S fchmod -S chown -S fchown -S lchown -S setxattr -S lsetxattr -S fsetxattr -S chmodat -S fchmodat -k perm_mod

# 监控特权管理 (sudo)
-a always,exit -F arch=b64 -S execve -C uid!=euid -F euid=0 -k exec_priv
-a always,exit -F arch=b64 -S execve -C gid!=egid -F egid=0 -k exec_priv
C. 登录与权限锁定

防止未登录用户(UID < 1000 或 4294967295)的噪音,只关注普通用户操作。

*注意:auditctl 的规则中,-F auid!=4294967295 是用来排除 unset (未设置) 的 auid,这是过滤系统进程的关键。*

2. 忽略特定规则 (排除噪音)

有时候系统会产生大量无用的审计日志(例如某个特定的高频程序),可以使用 -a never,exit 来忽略。

bash 复制代码
# 忽略特定系统调用的日志记录 (例如忽略特定用户的进程)
# 语法:-a <action>,<filter> -S <syscall> -F <field=value>
-a never,exit -S all -F pid=<特定PID>

注意:在 /etc/audit/rules.d/ 中配置忽略规则时,通常将忽略规则放在最前面。

日志管理

1. 日志查看与分析技巧

有了设置和规则,最重要的就是如何查看数据。

1. 实时查看审计日志

bash 复制代码
tail -f /var/log/audit/audit.log

2. 使用 ausearch 精准查询

  • 查看失败的登录尝试:
bash 复制代码
    ausearch -m USER_LOGIN -ts today -sv no
    
  • 查看关于 /etc/passwd 的所有变更:
bash 复制代码
    ausearch -f /etc/passwd -i
复制代码
`-i `参数很重要,它会把数字翻译成可读的文本。
  • 查看某个 Key 标记的事件(如设置的 sshd_config):
bash 复制代码
    ausearch -k sshd_config -i

3. 生成汇总报告 (aureport)

bash 复制代码
# 查看今天的总体摘要
aureport -ts today -i

# 查看最近谁登录成功过
aureport -l -ts today -i

# 查看文件修改记录
aureport -f -ts today

实践总结(重点看)

1. 基础规范

  1. 使用 Key (-k) 标记 :每一条规则都尽量加上 -k 标签,否则在海量日志中你找不到头绪。
  2. 定期检查磁盘空间 :审计日志如果不加控制,可以轻松写满硬盘。务必设置好 max_log_file_action
  3. 永久化规则 :不要只运行 auditctl 命令,一定要修改 /etc/audit/rules.d/audit.rules 并执行 augenrules --load
  4. 保护 Auditd 自身:防止恶意用户关闭审计服务。
bash 复制代码
    # 监控 auditd 自身的控制命令
    -w /sbin/auditctl -p x -k audit_tools
    -w /sbin/auditd -p x -k audit_tools

2. 添加规则

在 Linux 中,auditctl 命令用于控制审计系统。添加规则主要有两种方式:临时添加 (立即生效,重启失效)和永久添加(写入配置文件,重启生效)。

临时添加规则 (使用 auditctl)
bash 复制代码
基本语法:
auditctl -a <action,list> <filter> -S <syscall> -F <field=value> -k <key_name>
  • -a: 添加规则。
  • -S: 系统调用名称(如 open, write, chmod)。
  • -F: 过滤条件(如路径、用户ID等)。
  • -k: 给规则打一个唯一的标签(方便后续查找)。

常用场景示例:

  • 监控特定文件的写入操作(如监控 /etc/passwd):
bash 复制代码
    # -w 指定路径,-p 指定权限,-k 指定关键字
    auditctl -w /etc/passwd -p wa -k passwd_changes

解释:监控 /etc/passwd 文件的写入 和属性变更 操作,并标记为 passwd_changes

  • 监控特定目录的所有访问(如监控 /var/www/html):
bash 复制代码
    auditctl -w /var/www/html -p rwa -k web_access

解释:监控该目录的读、写和属性变更。

  • 监控某个系统调用(如删除文件操作 unlink):
bash 复制代码
    auditctl -a always,exit -F arch=b64 -S unlink -S unlinkat -k delete_file

解释:监控 64 位系统的 unlink 和 unlinkat 系统调用。

  • 禁止某个用户(UID 为 1000)执行特定操作(并阻断):
bash 复制代码
    auditctl -a always,exit -F arch=b64 -S unlink -F uid=1000
永久添加规则 (写入配置文件)

为了让规则在重启后依然生效,需要将规则写入 /etc/audit/rules.d/ 目录下的文件中(通常以 .rules 结尾)。

  • 编辑或创建一个规则文件:
bash 复制代码
    vim /etc/audit/rules.d/audit.rules
  • 将之前使用 auditctl 的命令(去掉 auditctl)写入文件。例如:
bash 复制代码
    -w /etc/passwd -p wa -k passwd_changes
    -w /var/www/html -p rwa -k web_access
  • 重启审计服务以加载新规则:
bash 复制代码
    systemctl restart auditd

3. 删除规则

临时删除规则
  • 删除所有现有规则(清空):
bash 复制代码
    auditctl -D
  • 根据关键字 删除规则:
    如果你在添加规则时使用了 -k 参数,可以通过它删除:
bash 复制代码
    auditctl -W <path> -k <key_name>
    # 例如:
    auditctl -W /etc/passwd -k passwd_changes
永久删除规则
  • 编辑规则文件:
bash 复制代码
    vim /etc/audit/rules.d/audit.rules
  • 删除文件中对应的行。

  • 重启服务或重新加载规则:

bash 复制代码
    # 强制重新加载规则(不重启服务)
    augenrules --load
    # 或者重启
    systemctl restart auditd

4. 查看规则

查看当前生效的规则

可以使用以下命令查看内核中当前加载的审计规则:

bash 复制代码
auditctl -l

# 或者以更详细的格式显示
auditctl -l -v
查看状态

查看 Auditd 服务是否正在运行以及一些基本统计:

bash 复制代码
auditctl -s
查看日志 (查看审计记录)

添加规则是为了记录日志,查看日志通常使用 ausearchaureport

  • 查看特定关键字的日志(最常用):
bash 复制代码
    # 搜索标记为 'passwd_changes' 的日志
    ausearch -k passwd_changes
  • 查看最近的日志并解析:
bash 复制代码
    ausearch -ts recent | aureport -i

或者直接看原始日志:

bash 复制代码
    ausearch -ts recent
  • 查看特定文件的日志:
bash 复制代码
    ausearch -f /etc/passwd

总结表格

操作 命令 说明
添加(临时) auditctl -w /path -p permissions -k key 监控文件/目录
添加(永久) 编辑 /etc/audit/rules.d/*.rules 重启生效
删除(全部) auditctl -D 清空所有当前规则
查看规则 auditctl -l 列出当前加载的规则
查看日志 ausearch -k <key> 根据标签查找记录

注意: 执行这些操作通常需要 root 权限 (sudo)。

相关推荐
小义_2 小时前
【RH134知识点问答题】第6章 管理 SELinux 安全性
linux·网络·云原生·rhel
魏波.2 小时前
主流 Linux 发行版有哪些?
linux
REDcker2 小时前
RTSP 直播技术详解
linux·服务器·网络·音视频·实时音视频·直播·rtsp
丁劲犇2 小时前
CentOS 7.6 TCP连接奇慢故障排查:中文注释引发的sysctl配置异常
linux·tcp/ip·centos·速度慢
m0_737302582 小时前
云服务器安全核心痛点与防护框架
服务器
代码游侠2 小时前
学习笔记——Linux内核与嵌入式开发1
linux·运维·前端·arm开发·单片机·嵌入式硬件·学习
阿猿收手吧!2 小时前
【C++】异常处理:catch块执行后程序如何继续
服务器·网络·c++
微尘hjx2 小时前
【Gstreamer 应用程序开发手册 01】关于GSTREAMER
linux·音视频·媒体
腾讯蓝鲸智云2 小时前
【运维自动化-节点管理】节点管理跟配置平台的联动关系
运维·服务器·经验分享·自动化·sass·paas