Audit
Linux audit 是Linux默认的事件审计服务
audit组件
auditd
auditd 是audit审计的守护程序,负责通过审计接口生成将应用程序和系统活动触发的审计消息写入磁盘。auditd 由systemd控制 可通过 /etc/audit/auditd.conf 进行配置。
auditctl
auditctl 可以配置审计系统 包括审计接口的日志生成参数和内核控制设置以及去定要跟踪哪些事件的规则集。
audit rule
audit rule 记录在 /etc/audit/audit.rules 中 包含一系列 auditctl 命令。在系统引导时,启动审计后会装载这些命令。
aureport
aureport 可以基于审计事件日志创建自定义报告。可以编写生成报告的脚本,其他程序可以通过脚本输出来绘制结果的图表或者执行其他操作。
ausearch
ausearch 可以使用记录的格式的键或其他特征在审计日志中搜索制定的事件。
audispd
audispd 是审计调度的守护程序 可以将事件通知中继到其他应用程序,而不是将其写入到磁盘的审计日志中
autrace
autrace 可以通过类似 strace 的方式跟踪单个进程。 但autrace会将输出记录到审计日志。
aulast
aulast 会列出最后几个登录用户的列表 类似last aulast 在审计日志中向后搜索,并给予审计日志中的时间范围显示所有登录和注销用户的列表
aulastlog
aulastlog 会使用类似 lastlog 的方式列表所有计算机用户的上次登录信息。包括登录名 端口和上次登录时间。
各个audit组件的关系如下

auditd 配置
auditd 可通过 /etc/audit/auditd.conf 配置文件进行配置。
log_file = /var/log/audit/audit.log # audit 日志存储位置
log_format = RAW #审计信息写入磁盘的方式 RAW 原格式写入磁盘 nolog 丢弃消息不写入磁盘
log_group = root # 拥有日志文件的组
priority_boost = 4 # 审计守护程序优先级 0~20
flush = INCREMENTAL # 指定是否以及以什么频率将日志写入磁盘 none 无需特殊操作 incremental 必须指定频率freq data 始终将磁盘文件的数据部分保持同步 sync 同时处理元数据和数据
freq = 20 #审计守护程序请求内核在每生成20条记录后写入磁盘
num_logs = 5 # 最大保留日志文件数 0-99 小于2不切换 增加切换次数会增加审计程序工作量造成数据积压
disp_qos = lossy # 确定审计程序和调度程序之间使用有损lossy 或者无损lossless的通讯 选择lossy时消息队列已满会丢弃一些审计信息 使用log_format = RAW时这些事件仍会写入磁盘 如果选择 lossless 会将阻止事件写入磁盘知道队列存在空位
dispatcher = /sbin/audispd #审计守护程序会将事件传输到dispatcher中
name_format = NONE # 控制如何解析计算机名称 none不使用名称 hostname 使用gethostname的值 fqd 通过dns查找接受的完全限制主机名
##name = mydomain #自定义主机名
max_log_file = 6 # 日志文件最大文件大小 M
max_log_file_action = ROTATE # 日志达到最大时的动作 ignore 不进行任何动作 syslog 发出警告到系统日志 suspend 停止写入日志 守护进程仍然保持活动 rotate 会通过 num_logs配置触发日志切换 keep_logs 也会触发日志切换 但不受num_logs限制所以会保留所有日志
space_left = 75 #剩余磁盘数值 M 会触发space_left_action配置的操作
space_left_action = SYSLOG # ignore 不进行任何操作 syslog 系统日志发送警告 emial 会向action_mail_acct 发送邮件 exec 脚本路径 会执行指定的脚本 suspend 告知审计程序停止写入磁盘但保持活动 single 触发系统降级到单用户模式 halt触发系统完全关闭
action_mail_acct = root # 剩余磁盘数值时触发邮件时发送到的邮件地址 需要正确配置邮件和网络 且存在 /usr/lib/sendmail
admin_space_left = 50 # 接受剩余磁盘空间 M 达到限制意味系统空间已不足
admin_space_left_action = SUSPEND # 取值与space_left_action相同 受到admin_space_left 控制 admin_space_left 应小于 space_left
disk_full_action = SUSPEND # 当系统空间耗尽时的操作 取值与space_left_action 相同
disk_error_action = SUSPEND # 当日志写入磁盘错误时执行的操作与 取值与space_left_action 相同
##tcp_listen_port = # 接受其他审计受程序的事件 监听端口
tcp_listen_queue = 5 # 链接数最大值 不要设置的太小 某些情况如断电后 等待的链接数可能会很高
tcp_max_per_addr = 1 # 允许从一个IP发出多少并发链接
##tcp_client_ports = 1024-65535 # 允许哪些客户端口 可以是单个端口 或者以-链接的端口范围 建议为客户端和服务器使用特权端口
tcp_client_max_idle = 0 # 指定经过多少秒后发生这种行为 对所有客户有效
cp_client_max_idle = 0
auditctl 使用
auditctl 控制audit守护程序的状态和一些基本系统参数,auditctl会使用审计策略控制系统哪些组件接受审计以及审计的范围。可以通过auditctl编写规则集并指示audit守护程序处理策略文件。 auditd守护程序默认会使用 etc/audit/audit.rules的审计策略
auditctl命令
auditctl -e 启用或者禁用审计
auditctl -f 用于控制故障标志
auditctl -r 控制审计消息的速率上线
auditctl -b 控制积压上限
auditctl -s 查询audit守护程序当前的状态
也可以在audit.rules 中指定 -e -f -r -b 选项 可以避免每次启动都重新输入这些选项
auditctl -s 示例输出
enabled 1 # 0 禁用 1 启用 2 启用并锁定配置
failure 1
pid 5238
rate_limit 0
backlog_limit 8192
lost 0
backlog 0
backlog_wait_time 60000
backlog_wait_time_actual 0
loginuid_immutable 0 unlocked
| 标志 | 取值 | 命令 |
|---|---|---|
| enable | 0 禁用 1启用 2启用并锁定配置 | auditctl -e 0|1|2 |
| failure | 设置故障标志 0静默 1 printk 2恐慌 立即暂停进程并不同步数据 | auditctl -f 0|1|2 |
| pid | 正在运行的auditd 的进程id | _ |
| rate_limit | 每秒消息数量上线 如果该值不为零且达到上限将触发故障指定操作 | auditctl -r rate |
| backlog_limit | 指定允许的未处理缓冲区数量 当缓冲区已满 将触发故障指定动作 | auditctl -b backlog |
| lost | 统计丢失的审计消息数量 | _ |
| backlog | 统计当前未处理的审计缓冲区数量 | _ |
参考
https://documentation.suse.com/zh-cn/sles/15-SP2/html/SLES-all/cha-audit-comp.html