19.4.使用审计跟踪 ================= 由于审计跟踪以 BSM 二进制格式存储,因此可以使用几个内置工具来修改这些跟踪文件或将其转换为文本。要将跟踪文件转换为简单的文本格式,请使用 ``praudit``\ 。要精选用于分析、归档或打印目的的审计跟踪文件,请使用 ``auditreduce``\ 。此工具支持多种选择参数,包括事件类型、事件类别、用户、事件的日期或时间,以及作用于的文件路径或对象。 例如,以纯文本形式转储指定审计日志的全部内容: .. raw:: latex \diilbookstyleinputcell .. code:: shell-session # praudit /var/audit/AUDITFILE 其中 *AUDITFILE* 是要转储的审计日志。 审计跟踪由一系列由令牌组成的审计记录组成,\ ``praudit`` 按顺序打印令牌,每行打印一个。每个令牌都属于特定类型,例如 ``header``\ (审计记录标题)或 ``path``\ (来自名称查找的文件路径)。以下是一个 ``execve`` 事件的示例: .. raw:: latex \diilbookstyleinputcell .. code:: shell-session header,133,10,execve(2),0,Mon Sep 25 15:58:03 2006, + 384 msec exec arg,finger,doug path,/usr/bin/finger attribute,555,root,wheel,90,24918,104944 subject,robert,root,wheel,root,wheel,38439,38032,42086,128.232.9.100 return,success,0 trailer,133 此审计代表一个成功的 ``execve`` 调用,其中命令 ``finger doug`` 已执行。\ ``exec arg`` 令牌包含由 shell 提供给内核的已处理命令行。\ ``path`` 令牌包含内核查找的可执行文件的路径。\ ``attribute`` 令牌说明了二进制文件并包括文件模式。\ ``subject`` 令牌存储了审计用户 ID、有效用户 ID 和组 ID、真实用户 ID 和组 ID、进程 ID、会话 ID、端口 ID 和登录地址。注意,审计用户 ID 和真实用户 ID 是不同的,因为在运行此命令之前,用户 ``robert`` 切换到了 ``root`` 帐户,但是使用原始的经过身份验证的用户进行审计。\ ``return`` 令牌表示成功执行,\ ``trailer`` 结束记录。 还可以通过包含 ``-x`` 来使用 XML 输出格式。 由于审计日志可能非常大,因此可以使用选择记录子集 ``auditreduce``\ 。这个例子选择了所有为存储在 **AUDITFILE** 中的用户 ``trhodes`` 产生的审计记录: .. raw:: latex \diilbookstyleinputcell .. code:: shell-session # auditreduce -u trhodes /var/audit/AUDITFILE | praudit ``audit`` 组的成员有权读取 ``/var/audit`` 中的审计跟踪。默认情况下,该组为空,因此只有 ``root`` 用户可以读取审计跟踪。可以将用户添加到 ``audit`` 组中以授予审计复核权限。由于跟踪审计日志内容的能力提供了对用户和进程行为的重要洞察,因此建议谨慎执行审计审查权限的授权。 19.4.1.使用审计管道进行实时监控 ------------------------------- 审计管道是克隆的伪设备,它允许应用程序利用实时审计记录流。这主要是入侵检测和系统监控应用程序的作者感兴趣的。然而,审计管道设备是使管理员实时监控的便捷方式,而不会遇到审计跟踪文件所有权或日志轮替中断事件流的问题。要跟踪实时审计事件流: .. raw:: latex \diilbookstyleinputcell .. code:: shell-session # praudit /dev/auditpipe 默认情况下,审计管道设备节点只能由 ``root`` 用户访问。要使 ``audit`` 组成员可以访问,请将 ``devfs`` 规则添加到 **/etc/devfs.rules** : .. raw:: latex \diilbookstyleinputcell .. code:: shell-session add path 'auditpipe*' mode 0440 group audit 有关配置 ``devfs`` 文件系统的更多信息,请参阅 `devfs.rules(5) `__\ 。 **警告** 审计事件反馈周期很容易产生,其中查看每个审计事件会导致生成更多审计事件。例如,如果所有网络 I/O 都经过审计,并且 ``praudit`` 从 SSH 会话运行,则会以高速率生成连续的审计事件流,因为每个被打印的事件都会生成另一个事件。出于这个原因,建议在审计管道设备上从会话运行 ``praudit``\ ,而不进行细粒度的 I/O 审计。 19.4.2.轮替和压缩审计跟踪文件 ----------------------------- 审计跟踪由内核写入并由审计守护进程 `auditd(8) `__ 管理。管理员不应尝试使用 `newsyslog.conf(5) `__ 或其他工具直接轮替审核日志。相反,应该用 ``audit`` 关闭审计、重新配置审计系统和执行日志轮替。下面的命令使审计守护进程创建一个新的审计日志并通知内核切换到使用新的日志。旧日志将被终止并重命名,此时管理员可能会对其进行操作: .. raw:: latex \diilbookstyleinputcell .. code:: shell-session # audit -n 如果 `auditd(8) `__ 当前未运行,此命令将失败并生成错误消息。 将以下行添加到 ``/etc/crontab`` 将安排每十二小时轮替一次: .. raw:: latex \diilbookstyleinputcell .. code:: shell-session 0 */12 * * * root /usr/sbin/audit -n 更改将在 ``/etc/crontab`` 保存后生效。 如 `The audit_control File `__ 中所述,可以使用 ``audit_control`` 中的 ``filesz`` 根据文件大小自动轮替审计跟踪文件。 由于审计跟踪文件可能会变得非常大,因此通常希望在审计守护程序关闭跟踪后对其进行压缩或归档。\ ``audit_warn`` 脚本可用于对各种与审计相关的事件执行自定义操作,包括在轮替审计跟踪时彻底终止它们。例如,可以将以下内容添加到 ``/etc/security/audit_warn`` 以在关闭时压缩审计跟踪: .. raw:: latex \diilbookstyleinputcell .. code:: shell-session # # Compress audit trail files on close. # if [ "$1" = closefile ]; then gzip -9 $2 fi 其他归档活动可能包括将跟踪文件复制到中央服务器、删除旧跟踪文件或精选审计跟踪以删除不需要的记录。仅当完全终止审计跟踪文件时才会运行此脚本。它不会在不正确关闭后未终止的路径上运行。