跳到内容跳到页面导航:上一页 [access key p]/下一页 [access key n]
documentation.suse.com / SUSE Linux Enterprise Server 文档 / 安全和强化指南 / Linux 审计框架 / 了解 Linux 审计
适用范围 SUSE Linux Enterprise Server 15 SP4

41 了解 Linux 审计

此版本的 SUSE Linux Enterprise Server 随附的 Linux 审计框架提供符合 CAPP(受控访问保护配置文件)规范的审计系统,该系统能够可靠地收集任何安全相关事件的信息。您可以通过检查审计记录来确定是否发生任何安全策略违规以及由谁造成。

提供审计框架是 CC-CAPP/EAL(通用准则受控访问保护配置文件/评估保障级别)认证的一项重要要求。信息技术安全信息通用准则 (CC) 是适用于独立安全评估的国际标准。通用准则可帮助客户评判他们想要部署在任务关键型设置中的任何 IT 产品的安全级别。

通用准则安全评估有两套评估要求:功能要求和保障要求。功能要求描述受评估产品的安全属性,汇总于受控访问保护配置文件 (CAPP) 中。保障要求汇总于评估保障级别 (EAL) 中。EAL 描述要使评估者确信安全属性存在、有效且得到实施所必须执行的任何活动。此类活动的示例包括记录开发人员寻找安全漏洞的活动、执行的修补过程和测试。

通过本指南,您可基本理解审计的工作原理以及设置方法。有关通用准则本身的详细信息,请参见通用准则网站

Linux 审计为您提供了详细分析系统上发生的情况的方法,可帮助您提高系统的安全性。但是,它本身并不提供额外的安全性 — 它不能防范系统的代码出现故障或系统被以任何方式恶意利用。审计只可用于跟踪这些问题,并帮助您采取额外的安全措施(例如 AppArmor)来防止这些问题。

审计包括多个组件,每个组件都为总体框架提供着关键功能。审计内核模块会截获系统调用并记录相关事件。auditd 守护程序会将审计报告写入磁盘。各种命令行实用程序会处理审计追踪的显示、查询和存档。

审计可让您执行以下操作:

将用户与进程相关联

审计会将进程映射到启动它们的用户 ID。这样,管理员或安全员便可以确切地跟踪哪个用户拥有哪个进程,并判断该用户是否可能正在系统上执行恶意操作。

重要
重要:重命名用户 ID

审计不会处理 UID 的重命名。因此,请避免重命名 UID(例如,将tuxuid=1001 重命名为 uid=2000),而是将 UID 作废。否则,您将需要更改 auditctl 数据(审计规则),并且在正确检索旧数据时会遇到问题。

查看审计追踪

Linux 审计提供了用于将审计报告写入磁盘并将其转换成直观易懂的格式的工具。

查看特定的审计事件

审计提供了可供您过滤特定相关事件的审计报告的实用程序。您可以过滤:

  • 用户

  • 审计 ID

  • 远程主机名

  • 远程主机地址

  • 系统调用

  • 系统调用参数

  • 文件

  • 文件操作

  • 成功或失败

应用选择性审计

审计提供了用于过滤相关事件的审计报告以及调整审计以仅记录选定事件的方法。您可以创建自己的规则集,让审计守护程序仅记录您想关注的事件。

保证报告数据的可用性

审计报告由 root 拥有,因此只能由 root 去除。未获授权的用户无法去除审计日志。

防止审计数据丢失

如果内核耗尽了内存,将会超出审计守护程序的积压或速率上限,在此情况下,审计可能会触发系统关闭,以防止事件脱离审计的控制。这种关闭是审计内核组件触发的系统立即暂停,不会将最新日志同步到磁盘。默认配置是在系统日志中记录一条警告,而不是暂停系统。

如果系统在记录日志时耗尽了磁盘空间,可将审计系统配置为执行正常关闭。默认配置会告知审计守护程序在耗尽磁盘空间时停止日志记录。

41.1 Linux 审计组件简介

下图说明各审计组件相互之间的交互方式:

Linux 审计组件简介
图 41.1︰ Linux 审计组件简介

实线箭头表示组件之间的数据流,虚线箭头表示组件之间的控制线。

auditd

审计守护程序负责将通过审计内核接口生成并由应用程序和系统活动触发的审计消息写入磁盘。审计守护程序的启动方式由 systemd 控制。审计系统功能(启动后)由 /etc/audit/auditd.conf 控制。有关 auditd 及其配置的详细信息,请参见第 41.2 节 “配置审计守护程序”

auditctl

auditctl 实用程序可控制审计系统。它可控制审计接口的日志生成参数和内核设置,以及用于确定要跟踪哪些事件的规则集。有关 auditctl 的详细信息,请参见第 41.3 节 “使用 auditctl 控制审计系统”

审计规则

/etc/audit/audit.rules 文件包含一系列 auditctl 命令,在系统引导时,启动审计守护程序后会紧接着装载这些命令。有关审计规则的详细信息,请参见第 41.4 节 “将参数传递到审计系统”

aureport

aureport 实用程序可让您基于审计事件日志创建自定义报告。您可以轻松编写生成报告的脚本,而各种其他应用程序可以使用脚本的输出来绘制这些结果的图表以及执行其他操作。有关 aureport 的详细信息,请参见第 41.5 节 “了解审计日志和生成报告”

ausearch

ausearch 实用程序可以使用所记录的格式的各种键或其他特征在审计日志文件中搜索特定的事件。有关 ausearch 的详细信息,请参见第 41.6 节 “使用 ausearch 查询审计守护程序日志”

audispd

审计调度程序守护程序 (audispd) 可用于将事件通知中继到其他应用程序,而不是将其写入磁盘上的审计日志中(或除了执行此操作之外)。有关 audispd 的详细信息,请参见第 41.9 节 “中继审计事件通知”

autrace

autrace 实用程序以类似于 strace 的方式跟踪单个进程。autrace 的输出将记录到审计日志。有关 autrace 的详细信息,请参见第 41.7 节 “使用 autrace 分析进程”

aulast

列显最后几个登录用户的列表,类似于 lastaulast 在整个审计日志(或给定的审计日志文件)中向后搜索,并基于审计日志中的时间范围显示所有登录和注销用户的列表。

aulastlog

以类似于 lastlog 的方式列显所有计算机用户的上次登录信息。将列显登录名、端口和上次登录时间。

41.2 配置审计守护程序

在您可以实际开始生成并处理审计日志之前,需先配置审计守护程序本身。/etc/audit/auditd.conf 配置文件确定审计系统在守护程序启动后的运行方式。对于大多数用例而言,SUSE Linux Enterprise Server 随附的默认设置应已足够。如果是 CAPP 环境,则需要调整其中的大部分参数。下面的列表简要介绍了可用参数:

log_file = /var/log/audit/audit.log
log_format = RAW
log_group = root
priority_boost = 4
flush = INCREMENTAL
freq = 20
num_logs = 5
disp_qos = lossy
dispatcher = /sbin/audispd
name_format = NONE
##name = mydomain
max_log_file = 6
max_log_file_action = ROTATE
space_left = 75
space_left_action = SYSLOG
action_mail_acct = root
admin_space_left = 50
admin_space_left_action = SUSPEND
disk_full_action = SUSPEND
disk_error_action = SUSPEND
##tcp_listen_port =
tcp_listen_queue = 5
tcp_max_per_addr = 1
##tcp_client_ports = 1024-65535
tcp_client_max_idle = 0
cp_client_max_idle = 0

根据您是否希望环境满足 CAPP 的要求,在配置审计守护程序时需要额外加强限制。在您需要使用特定的设置才能满足 CAPP 要求的位置,我们会提供CAPP 环境注释告知您如何调整配置。

log_filelog_formatlog_group

log_file 指定审计日志应储存到什么位置。log_format 确定审计信息写入磁盘的方式,log_group 定义拥有日志文件的组。log_format 的可能的值为 raw(完全按照内核发送消息时的格式储存消息)或 nolog(丢弃消息,不将其写入磁盘)。如果您使用 nolog 模式,发送到审计调度程序的数据将不受影响。默认设置为 raw。如果您希望能够使用 aureportausearch 工具创建报告以及对审计日志进行查询,应保留该设置。可采用文本描述或使用组 ID 来指定 log_group 的值。

注意
注意:CAPP 环境

在 CAPP 环境中,需让审计日志驻留在其自身的分区中。这样,您便可以确保审计守护程序的空间检测结果准确,并且可以避免其他进程消耗此空间。

priority_boost

确定审计守护程序应获得的优先级提升量。可能的值为 0 到 20。最终合理的值按如下方式计算:0 - priority_boost

flushfreq

指定是否、如何以及以什么频率将审计日志写入磁盘。flush 的有效值为 noneincrementaldatasyncnone 告知审计守护程序将审计数据写入磁盘时无需进行特殊的操作。incremental 告知审计守护程序显式将数据刷写到磁盘。如果使用 incremental,则必须指定频率。freq20 告知审计守护程序请求内核在每生成 20 条记录后将数据刷写到磁盘。data 选项始终将磁盘文件的数据部分保持同步,而 sync 选项会同时处理元数据和数据。

注意
注意:CAPP 环境

在 CAPP 环境中,请确保审计追踪始终是完全最新且完整的。因此,请将 flush 参数与 syncdata 结合使用。

num_logs

指定当提供 rotate 作为 max_log_file_action 时要保留的日志文件数。可能的值为 099。小于 2 的值表示不轮换日志文件。如果增加要轮换的文件数,会增大审计守护程序所需的工作量。执行这种轮换时,auditd 无法始终快速地处理来自内核的新数据,这可能造成积压状况(触发 auditd 根据故障标志做出反应,如第 41.3 节 “使用 auditctl 控制审计系统”中所述)。在这种情况下,建议提高积压上限。为此,可以更改 /etc/audit/audit.rules 文件中 -b 参数的值。

disp_qosdispatcher

审计守护程序在启动期间会启动调度程序。审计守护程序会将审计消息中继到 dispatcher 中指定的应用程序。此应用程序必须高度受信任,因为它需要以 root 身份运行。disp_qos 会确定是否允许在审计守护程序与调度程序之间进行 lossy(有损)或 lossless(无损)通讯。

如果您选择 lossy,当消息队列已满时,审计守护程序可能会丢弃一些审计消息。如果将 log_format 设为 raw,这些事件仍会写入磁盘,但可能不会传递到调度程序。如果您选择 lossless,将阻止审计记录到磁盘,直到消息队列中出现空位。默认值为 lossy

name_formatname

name_format 控制如何解析计算机名称。可能的值为 none(不使用名称)、hostnamegethostname 返回的值)、fqd(通过 DNS 查找接收的完全限定主机名)、numeric(IP 地址)和 useruser 是一个自定义字符串,需要使用 name 参数来定义。

max_log_filemax_log_file_action

max_log_file 接受数字值,该值指定在触发可配置的操作之前,日志文件可以达到的最大文件大小(以兆字节为单位)。要执行的操作在 max_log_file_action 中指定。max_log_file_action 的可能的值为 ignoresyslogsuspendrotatekeep_logsignore 告知审计守护程序在达到大小限制时不要执行任何操作,syslog 告知审计守护程序发出警告并将警告发送到系统日志,suspend 导致审计守护程序停止向磁盘写入日志,并使守护程序本身仍保持活动状态。rotate 使用 num_logs 设置触发日志轮换。keep_logs 也会触发日志轮换,但不使用 num_log 设置,因此始终保留所有日志。

注意
注意:CAPP 环境

要在 CAPP 环境中保留完整的审计追踪,应使用 keep_logs 选项。如果使用单独的分区来保存审计日志,请调整 max_log_filenum_logs 以使用该分区上的全部可用空间。请注意,要轮换的文件越多,重新接收审计事件所需的时间就越长。

space_leftspace_left_action

space_left 接受表示剩余磁盘空间的数字值(以兆字节为单位),用于触发审计守护程序执行的可配置操作。该操作在 space_left_action 中指定。此参数的可能的值为 ignoresyslogemailexecsuspendsinglehaltignore 告知审计守护程序忽略警告且不执行任何操作,syslog 指示审计守护程序向系统日志发送警告,emailaction_mail_acct 下指定的帐户发送电子邮件。指定 exec 加上脚本路径会执行给定的脚本。请注意,您无法向脚本传递参数。suspend 告知审计守护程序停止写入磁盘但保持活动状态,而 single 会触发系统降级到单用户模式。halt 触发系统完全关闭。

注意
注意:CAPP 环境

请确保将 space_left 设置为一个适当的值,使管理员有足够的时间对警报做出反应,并允许释放足够的磁盘空间以使审计守护程序能够继续工作。释放磁盘空间涉及到调用 aureport -t,并在单独的存档分区或资源上存档最旧的日志。space_left 的实际值取决于您的部署大小。将 space_left_action 设置为 email

action_mail_acct

指定应将任何警报消息发送到的电子邮件地址或别名。默认设置为 root,但只要在系统上正确配置了电子邮件和网络,并且 /usr/lib/sendmail 存在,您就可以输入任何本地或远程帐户。

admin_space_leftadmin_space_left_action

admin_space_left 接受表示剩余磁盘空间的数字值(以兆字节为单位)。达到此限制意味着系统已出现磁盘空间不足的情况,管理员需抓住这个最后的机会对此警报做出反应,释放磁盘空间来保存审计日志。admin_space_left 的值应小于 space_left 的值。admin_space_left_action 的可能的值与 space_left_action 的相同。

注意
注意:CAPP 环境

请将 admin_space_left 设置为允许记录管理员操作的值。操作应设置为 single

disk_full_action

指定当系统耗尽了用于保存审计日志的磁盘空间时需要执行的操作。有效值为 ignoresyslogrotateexecsuspendsinglehalt。有关这些值的说明,请参见space_leftspace_left_action

注意
注意:CAPP 环境

由于当实在没有更多空间来保存任何审计日志时会触发 disk_full_action,您应该将系统降级到单用户模式 (single) 或将其彻底关闭 (halt)。

disk_error_action

指定当审计守护程序在将日志写入磁盘或轮换日志期间遇到任何类型的磁盘错误时需要执行的操作。可能的值与 space_left_action 的相同。

注意
注意:CAPP 环境

根据有关处理任何类型的硬件故障的站点策略,使用 syslogsinglehalt

tcp_listen_porttcp_listen_queuetcp_client_portstcp_client_max_idletcp_max_per_addr

该审计守护程序可以接收来自其他审计守护程序的审计事件。TCP 参数可让您控制传入连接。使用 tcp_listen_port 指定一个介于 1 到 65535 之间的端口,auditd 将监听该端口。tcp_listen_queue 可让您配置等待中连接数的最大值。确保不要将值设置得太小,因为在某些情况下(例如在断电后),等待中的连接数可能会很高。tcp_client_ports 定义允许哪些客户端端口。请指定单个端口,或以短划线分隔的数字指定端口范围(例如,1-1023 表示所有特权端口)。

指定单个允许的客户端端口可能导致客户端难以重启动其审计子系统,因为在连接关闭 TIME_WAIT 状态超时之前,客户端无法与同一主机地址和端口重新创建连接。如果客户端不再响应,auditd 将会控诉。请使用 tcp_client_max_idle 指定经过多少秒后将发生这种行为。请记住,此设置对所有客户端都有效,因此应高于任意单个客户端检测信号设置,最好是高两倍。tcp_max_per_addr 是表示允许从一个 IP 地址发出多少并发连接的数字值。

提示
提示

我们建议为客户端和服务器使用特权端口,以防止非 root (CAP_NET_BIND_SERVICE) 程序绑定到这些端口。

完成 /etc/audit/auditd.conf 中的守护程序配置后,下一步是重点控制守护程序执行的审计量,并为守护程序指派足够其顺利运行的资源和限制。

41.3 使用 auditctl 控制审计系统

auditctl 负责控制审计守护程序的状态和某些基本系统参数。它控制对系统执行的审计量。auditctl 使用审计规则来控制系统的哪些组件需要接受审计及对其进行的审计范围。可在 auditctl 命令行中或者通过撰写规则集并指示审计守护程序处理此文件,将审计规则传递给审计守护程序。auditd 守护程序默认配置为检查 /etc/audit/audit.rules 下的审计规则。有关审计规则的更多细节,请参见第 41.4 节 “将参数传递到审计系统”

用于控制基本审计系统参数的主要 auditctl 命令包括:

  • auditctl -e,用于启用或禁用审计

  • auditctl -f,用于控制故障标志

  • auditctl -r,用于控制审计消息的速率上限

  • auditctl -b,用于控制积压上限

  • auditctl -s,用于查询审计守护程序的当前状态

  • auditctl -S,指定要审计的系统调用。在系统上运行 auditctl -S 之前,请添加 -F arch=b64 以防止出现体系结构不匹配警告。

您还可以在 audit.rules 文件中指定 -e-f-r-b 选项,这样您就无需在审计守护程序每次启动时都重新输入这些选项。

每当您使用 auditctl -s 查询审计守护程序的状态,或使用 auditctl -eFLAG 更改状态标志时,都会列显一条状态消息(包括有关上述每个参数的信息)。下面的示例重点列出了典型的审计状态消息。

例 41.1︰ auditctl -s 的示例输出
enabled 1
failure 1
pid 790
rate_limit 0
backlog_limit 64
lost 0
backlog 0
backlog_wait_time 15000
loginuid_immutable 0 unlocked
表 41.1︰ 审计状态标志

标志

含义 [可能的值]

命令

enabled

设置启用标志。[0..2] 0=禁用,1=启用,2=启用并锁定配置。请注意,此标志只禁用日志记录系统调用,系统仍会记录其他事件。(请参见 audit-devel 中的 man 3 audit_set_enabled。)

auditctl -e [0|1|2]

flag

设置故障标志。[0..2] 0=静默,1=printk,2=恐慌(立即暂停且不将等待中数据同步到磁盘)

auditctl -f [0|1|2]

pid

正在运行 auditd 的进程 ID。

rate_limit

设置每秒消息数上限。如果该值不为零且每秒消息数超过该上限,将触发故障标志中指定的操作。

auditctl -r RATE

backlog_limit

指定允许的未处理审计缓冲区的最大数目。如果所有缓冲区已满,将触发故障标志中指定的操作。

auditctl -b BACKLOG

lost

统计当前丢失的审计消息数。

backlog

统计当前未处理的审计缓冲区数。

41.4 将参数传递到审计系统

您可以在外壳中使用 auditctl 单独调用用于控制审计系统的命令,也可以使用 auditctl - R 从文件中批量读取此类命令。启动审计守护程序后,init 脚本会使用后一种方法从 /etc/audit/audit.rules 文件装载规则。规则按照从上到下的顺序执行。其中每条规则将扩展为单独的 auditctl 命令。规则文件中使用的语法与 auditctl 命令使用的语法相同。

通过在命令行上执行 auditctl 对运行中审计系统所做的更改在系统重启动后不会保留。要持久保留更改,请将更改添加到 /etc/audit/audit.rules 文件;如果更改当前尚未装载到审计中,请使用 systemctl restart auditd 命令重启动审计系统以装载修改后的规则集。

例 41.2︰ 示例审计规则 — 审计系统参数
-b 10001
-f 12
-r 103
-e 14

1

指定未处理审计缓冲区的最大数目。根据日志记录活动的级别,您可能需要调整缓冲区的数目,以免系统上的审计负载过于繁重。

2

指定要使用的故障标志。有关可能的值,请参见表 41.1 “审计状态标志”

3

指定内核每秒可发出的最大消息数目。有关详细信息,请参见表 41.1 “审计状态标志”

4

启用或禁用审计子系统。

使用审计,您可以跟踪以任何形式通过文件系统对重要文件、配置或资源进行的访问。您可以添加针对这些内容的监测项,并为每种监视项指派相应的键,以方便在日志中识别。

例 41.3︰ 示例审计规则 — 文件系统审计
-w /etc/shadow1
-w /etc -p rx2
-w /etc/passwd -k fk_passwd -p rwxa3

1

-w 选项告知审计添加指定文件(在本例中为 /etc/shadow)的监测项。请求此文件访问权限的所有系统调用都将经过分析。

2

此规则添加对 /etc 目录的监测项,并对读取和执行此目录的访问操作应用权限过滤 (-p rx)。请求这两种权限中的任何一种权限的任何系统调用都将经过分析。系统仅将创建新文件和删除现有文件的操作记录为目录相关的事件。要获取此特定目录下各文件的更具体的事件,应该为每个文件单独添加一条规则。在添加包含文件监测项的规则之前,相应文件必须存在。不支持在创建文件时审计文件。

3

此规则向 /etc/passwd 添加一个文件监测项,并对读取、写入、执行和属性更改权限应用权限过滤。-k 选项可让您指定一个键,以便日后用来过滤此特定事件的审计日志(例如使用 ausearch 过滤)。您可对不同的规则使用相同的键,这样便能在搜索规则时将规则分组。还可以将多个键应用于一条规则。

系统调用审计甚至可让您以低于应用程序级别的级别来跟踪系统的行为。设计这些规则时,请考虑到审计大量系统调用可能会增加系统负载,并导致磁盘空间耗尽。请仔细考虑哪些事件需要跟踪,以及如何过滤事件才会使结果更具体。

例 41.4︰ 示例审计规则 — 系统调用审计
-a exit,always -S mkdir1
-a exit,always -S access -F a1=42
-a exit,always -S ipc -F a0=23
-a exit,always -S open -F success!=04
-a task,always -F auid=05
-a task,always -F uid=0 -F auid=501 -F gid=wheel6

1

此规则对 mkdir 系统调用激活审计。-a 选项会添加系统调用规则。每当输入 mkdir 系统调用(exitalways)时,此规则就会触发一个事件。-S 选项指定应对其应用此规则的系统调用。

2

此规则添加对 access 系统调用的审计,但仅当该系统调用的第二个参数 (mode) 为 4 (R_OK) 时会进行审计。exit,always 告知审计在输入此系统调用时添加其审计环境,并在审计此系统调用后输出报告。

3

此规则添加 IPC 多路转换系统调用的审计环境。特定的 ipc 系统调用将作为第一个 syscall 参数传递,可使用 -F a0=IPC_CALL_NUMBER 选择该系统调用。

4

此规则审计失败的 open 调用尝试。

5

此规则是任务规则(关键字 task)的示例。它与上述其他规则的不同之处在于,它会应用于派生或克隆的进程。要过滤此类事件,您只能使用派生时已知的字段,例如 UID、GID 和 AUID。此示例规则过滤带有审计 ID 0 的所有任务。

6

最后这条规则使用了很多过滤器。所有过滤选项都与逻辑 AND 运算符相结合,表示此规则将应用于带有审计 ID 501、以 root 身份运行并使用 wheel 作为组的所有任务。系统会在用户登录时为某个进程分配审计 ID。然后,此 ID 将传给用户的初始进程所启动的任何子进程。即使用户更改其身份,审计 ID 也仍会保持不变,可用于跟踪原始用户的操作。

提示
提示:过滤系统调用参数

有关过滤系统调用参数的更多细节,请参见第 43.6 节 “过滤系统调用参数”

您不仅可以将规则添加到审计系统,而且还可以去除规则。可通过不同的方法一次性删除整个规则集,或者删除系统调用规则或文件和目录监测项:

例 41.5︰ 删除审计规则和事件
-D1
-d exit,always -S mkdir2
-W /etc3

1

清除审计规则的队列并删除任何以前存在的规则。此规则用作 /etc/audit/audit.rules 文件中的第一条规则,可确保即将添加的规则不会与任何以前存在的规则相冲突。在执行 autrace 之前还需使用 auditctl -D 命令,以避免跟踪规则与 audit.rules 文件中存在的任何规则相冲突。

2

此规则删除某个系统调用规则。-d 选项必须位于需要从规则队列中删除的任何系统调用规则的前面,并且必须完全匹配。

3

此规则告知审计从规则队列中丢弃包含 /etc 目录监测项的规则。此规则删除任何包含 /etc 目录监测项的规则,而不管使用了哪种权限过滤或键选项。

要了解审计设置中当前使用了哪些规则,请运行 auditctl -l。此命令显示所有规则,每行显示一条规则。

例 41.6︰ 使用 auditctl -l 列出规则
exit,always watch=/etc perm=rx
exit,always watch=/etc/passwd perm=rwxa key=fk_passwd
exit,always watch=/etc/shadow perm=rwxa
exit,always syscall=mkdir
exit,always a1=4 (0x4) syscall=access
exit,always a0=2 (0x2) syscall=ipc
exit,always success!=0 syscall=open
注意
注意:创建过滤规则

您可以使用各种过滤选项构建非常复杂的审计规则。有关可用于构建审计过滤规则的选项的详细信息以及审计规则的一般信息,请参见 auditctl(8) 手册页。

41.5 了解审计日志和生成报告

要了解 aureport 实用程序的作用,必须知道审计守护程序所生成的日志的构造方式,以及审计针对事件具体会记录哪些内容。只有在获知这些信息后,您才能确定哪些报告类型最适合您的需求。

41.5.1 了解审计日志

以下示例重点展示了审计所记录的两个典型事件,以及在审计日志中读取其追踪的方式。一个或多个(如果启用了日志轮换)审计日志储存在 /var/log/audit 目录中。

日志记录两种类型的信息:记录类型和事件字段。记录类型由每个日志项中的 type= 标识。事件字段是等号左侧的所有其他项目。在以下示例中,type=SYSCALLtype=CWD 是记录类型,arch=c000003esyscall=2 是事件字段,后接字段的值。

请参见 /usr/include/libaudit.h 文件(来自 audit-devel 软件包)以查看记录类型及其完整定义列表。

运行 ausyscall --dump 命令以查看系统调用编号的表格及其含义:

> ausyscall --dump
Using x86_64 syscall table:
0       read
1       write
2       open
3       close
4       stat
5       fstat
[...]

第一个示例是个简单的 less 命令。第二个示例包含当用户尝试远程登录到运行审计的计算机时,日志中记录的大量 PAM 活动。

例 41.7︰ 简单审计事件 — 查看审计日志
type=SYSCALL msg=audit(1234874638.599:5207): arch=c000003e syscall=2 
success=yes exit=4 a0=62fb60 a1=0 a2=31 a3=0 items=1 ppid=25400 pid
=25616 auid=0 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 
tty=pts1 ses=1164 comm="less" exe="/usr/bin/less" key="doc_log"
type=CWD msg=audit(1234874638.599:5207):  cwd="/root"
type=PATH msg=audit(1234874638.599:5207): item=0 name="/var/log/audit/
audit.log" inode=1219041 dev=08:06 mode=0100644 ouid=0 ogid=0 rdev=00:00

上述事件(一个简单的 less /var/log/audit/audit.log)在日志中写入了三条消息。所有消息密切相关,仅凭其中的一条消息将无法理解其他消息。第一条消息揭示了以下信息:

type

记录的事件类型。在本例中,为系统调用触发的事件指派了 SYSCALL 类型。记录 CWD 事件的目的是记录执行 syscall 时的当前工作目录。为传递给系统调用的每个路径生成了一个 PATH 事件。open 系统调用仅接受一个路径参数,因此仅生成了一个 PATH 事件。请务必注意,PATH 事件报告路径名字符串参数时并不经过任何进一步的解释,因此,相对路径需要与 CWD 事件报告的路径相结合才能确定访问的对象。

msg

括在括号中的消息 ID。该 ID 分为两个部分。: 前面的所有字符表示 Unix 纪元时戳。冒号后面的数字表示实际的事件 ID。所记录的来自一个应用程序系统调用的所有事件都具有相同的事件 ID。如果应用程序发出第二次系统调用,将会为其分配另一个事件 ID。

arch

引用系统调用的 CPU 体系结构。搜索日志时,请在您的任何 ausearch 命令中使用 -i 选项来解码此信息。

syscall

系统调用的类型,对此特定系统调用运行 strace 会列显此信息。此数据取自 /usr/include/asm/unistd.h 下的系统调用列表,可能会因体系结构而异。在本例中,syscall=2 表示 less 应用程序调用的 open 系统调用(参见 man open(2))。

success

系统调用是成功还是失败。

exit

系统调用返回的退出值。对于本示例中使用的 open 系统调用,退出值为文件描述符编号。此值因系统调用而异。

a0a3

系统调用的前四个参数,采用数字格式。这些参数的值与系统调用相关。本示例(open 系统调用)中使用了以下值:

a0=62fb60 a1=8000 a2=31 a3=0

a0 是传递的路径名的起始地址。a1 是标志。以十六进制表示的 8000 转换为以八进制表示的 100000,后者又转换为 O_LARGEFILEa2 是模式,由于未指定 O_CREAT,因此未使用此参数。 open 系统调用未传递 a3。请查看相关系统调用的手册页,了解可与该系统调用搭配使用的参数。

items

传递给应用程序的字符串数。

ppid

所分析进程的父进程的 ID。

pid

所分析进程的 ID。

auid

审计 ID。系统会在用户登录时为某个进程分配审计 ID。然后,此 ID 将传给用户的初始进程所启动的任何子进程。即使用户更改了其身份(例如,变成了 root),审计 ID 也会保持不变。因此,您始终可以跟踪原始登录用户的操作。

uid

启动该进程的用户的 ID。在本例中,该 ID 为 0(表示 root)。

gid

启动该进程的用户的组 ID。在本例中,该 ID 为 0(表示 root)。

euidsuidfsuid

启动该进程的用户的有效用户 ID、设置的用户 ID 和文件系统用户 ID。

egidsgidfsgid

启动该进程的用户的有效组 ID、设置的组 ID 和文件系统组 ID。

tty

用于启动应用程序的终端。本示例在 SSH 会话中使用了一个伪终端。

ses

登录会话 ID。系统会在用户登录时设置此进程属性,它可以将任何进程关联到特定的用户登录操作。

comm

应用程序显示在任务列表中时所使用的名称。

exe

二进制程序的解析路径名。

subj

auditd 记录进程是否受到任何安全环境(例如 AppArmor)的约束。本例中所示的 unconstrained 表示进程不受 AppArmor 的限制。如果进程受到限制,将记录二进制文件路径名加上 AppArmor 配置文件模式。

key

如果您正在审计许多目录或文件,请向其中的每个监测项指派键字符串。将这些键与 ausearch 结合使用可以仅搜索此类型事件的日志。

示例 less 调用触发的第二条消息只揭示了执行 less 命令时的当前工作目录。

第三条消息揭示了以下信息(已引入 typemessage 标志):

item

在本示例中,item 引用了 a0 参数 — 与原始 SYSCALL 消息关联的路径。如果原始调用有多个路径参数(例如 cpmv 命令),将会额外为第二个路径参数记录一个 PATH 事件。

name

表示作为参数传递给 open 系统调用的路径名。

inode

表示与 name 对应的 inode 编号。

dev

指定储存文件的设备。在本例中为 08:06,表示 /dev/sda1第一个 IDE 设备上的第一个分区

mode

文件访问权限的数字表示形式。在本例中,root 拥有读取和写入权限,其组 (root) 拥有读取访问权限,而其余的所有用户和组无法访问该文件。

ouidogid

表示 inode 本身的 UID 和 GID。

rdev

不适用于此示例。rdev 项仅适用于块设备或字符设备,不适用于文件。

例 41.8 “高级审计事件 — 通过 SSH 登录”重点展示了传入的 SSH 连接所触发的审计事件。大多数消息与 PAM 堆栈相关,反映 SSH PAM 进程的不同阶段。有几条审计消息带有嵌套的 PAM 消息,这些 PAM 消息表示已达到 PAM 进程的特定阶段。尽管审计会记录 PAM 消息,但它会为每个事件指派其自身的消息类型:

例 41.8︰ 高级审计事件 — 通过 SSH 登录
type=USER_AUTH msg=audit(1234877011.791:7731): user pid=26127 uid=0 1
auid=4294967295 ses=4294967295 msg='op=PAM:authentication acct="root" exe="/usr/sbin/sshd"
(hostname=jupiter.example.com, addr=192.168.2.100, terminal=ssh res=success)'
type=USER_ACCT msg=audit(1234877011.795:7732): user pid=26127 uid=0 2
auid=4294967295 ses=4294967295 msg='op=PAM:accounting acct="root" exe="/usr/sbin/sshd"
(hostname=jupiter.example.com, addr=192.168.2.100, terminal=ssh res=success)'
type=CRED_ACQ msg=audit(1234877011.799:7733): user pid=26125 uid=0 3
auid=4294967295 ses=4294967295 msg='op=PAM:setcred acct="root" exe="/usr/sbin/sshd"
(hostname=jupiter.example.com, addr=192.168.2.100, terminal=/dev/pts/0 res=success)'
type=LOGIN msg=audit(1234877011.799:7734): login pid=26125 uid=0
old auid=4294967295 new auid=0 old ses=4294967295 new ses=1172
type=USER_START msg=audit(1234877011.799:7735): user pid=26125 uid=0 4
auid=0 ses=1172 msg='op=PAM:session_open acct="root" exe="/usr/sbin/sshd"
(hostname=jupiter.example.com, addr=192.168.2.100, terminal=/dev/pts/0 res=success)'
type=USER_LOGIN msg=audit(1234877011.823:7736): user pid=26128 uid=0 5
auid=0 ses=1172 msg='uid=0: exe="/usr/sbin/sshd"
(hostname=jupiter.example.com, addr=192.168.2.100, terminal=/dev/pts/0 res=success)'
type=CRED_REFR msg=audit(1234877011.828:7737): user pid=26128 uid=0 6
auid=0 ses=1172 msg='op=PAM:setcred acct="root" exe="/usr/sbin/sshd"
(hostname=jupiter.example.com, addr=192.168.2.100, terminal=/dev/pts/0 res=success)'

1

PAM 报告它已向远程主机(jupiter.example.com,192.168.2.100)成功请求对 root 用户进行身份验证。发生此操作的终端为 ssh

2

PAM 报告它已成功确定是否已授权用户登录。

3

PAM 报告已获取用于登录的适当身份凭证,并且终端已变为正常终端 (/dev/pts0)。

4

PAM 报告它已成功为 root 打开会话。

5

用户已成功登录。此事件是 aureport -l 用来报告用户登录的事件。

6

PAM 报告已成功重新获取身份凭证。

41.5.2 生成自定义审计报告

/var/log/audit 目录中储存的原始审计报告会逐渐变得很庞大且难以理解。要想更轻松地查找相关消息,请使用 aureport 实用程序并创建自定义报告。

以下用例重点展示了您可以使用 aureport 生成的几种可能的报告类型:

从另一文件读取审计日志

当审计日志移到另一台计算机后,或者当您想要在本地计算机上分析多台计算机的日志,而又不想逐个连接其中每台计算机时,请将日志移到某个本地文件,然后在本地使用 aureport 分析这些日志:

> sudo aureport -if myfile

Summary Report
======================
Range of time in logs: 03/02/09 14:13:38.225 - 17/02/09 14:52:27.971
Selected time for report: 03/02/09 14:13:38 - 17/02/09 14:52:27.971
Number of changes in configuration: 13
Number of changes to accounts, groups, or roles: 0
Number of logins: 6
Number of failed logins: 13
Number of authentications: 7
Number of failed authentications: 573
Number of users: 1
Number of terminals: 9
Number of host names: 4
Number of executables: 17
Number of files: 279
Number of AVC's: 0
Number of MAC events: 0
Number of failed syscalls: 994
Number of anomaly events: 0
Number of responses to anomaly events: 0
Number of crypto events: 0
Number of keys: 2
Number of process IDs: 1211
Number of events: 5320

上述不带任何参数的 aureport 命令仅提供基于 myfile 中包含的日志生成的一般标准摘要报告。要创建更详细的报告,请将 -if 选项与下面的任何选项结合使用。例如,生成仅限特定时间范围的登录报告:

> sudo aureport -l -ts 14:00 -te 15:00 -if myfile

Login Report
============================================
# date time auid host term exe success event
============================================
1. 17/02/09 14:21:09 root: 192.168.2.100 sshd /usr/sbin/sshd no 7718
2. 17/02/09 14:21:15 0 jupiter /dev/pts/3 /usr/sbin/sshd yes 7724
将数字实体转换为文本

某些信息(例如用户 ID)将以数字形式列显。要将这些信息转换为直观易懂的文本格式,请在 aureport 命令中添加 -i 选项。

创建粗略的摘要报告

如果您要关注当前的审计统计(事件、登录、进程等),请运行不带任何其他选项的 aureport

创建失败事件的摘要报告

如果您要将单纯的 aureport 命令所提供的总体统计细分为失败事件的统计,请使用 aureport --failed

> sudo aureport --failed

Failed Summary Report
======================
Range of time in logs: 03/02/09 14:13:38.225 - 17/02/09 14:57:35.183
Selected time for report: 03/02/09 14:13:38 - 17/02/09 14:57:35.183
Number of changes in configuration: 0
Number of changes to accounts, groups, or roles: 0
Number of logins: 0
Number of failed logins: 13
Number of authentications: 0
Number of failed authentications: 574
Number of users: 1
Number of terminals: 5
Number of host names: 4
Number of executables: 11
Number of files: 77
Number of AVC's: 0
Number of MAC events: 0
Number of failed syscalls: 994
Number of anomaly events: 0
Number of responses to anomaly events: 0
Number of crypto events: 0
Number of keys: 2
Number of process IDs: 708
Number of events: 1583
创建成功事件的摘要报告

如果您要将单纯的 aureport 命令所提供的总体统计细分为成功事件的统计,请使用 aureport --success

> sudo aureport --success

Success Summary Report
======================
Range of time in logs: 03/02/09 14:13:38.225 - 17/02/09 15:00:01.535
Selected time for report: 03/02/09 14:13:38 - 17/02/09 15:00:01.535
Number of changes in configuration: 13
Number of changes to accounts, groups, or roles: 0
Number of logins: 6
Number of failed logins: 0
Number of authentications: 7
Number of failed authentications: 0
Number of users: 1
Number of terminals: 7
Number of host names: 3
Number of executables: 16
Number of files: 215
Number of AVC's: 0
Number of MAC events: 0
Number of failed syscalls: 0
Number of anomaly events: 0
Number of responses to anomaly events: 0
Number of crypto events: 0
Number of keys: 2
Number of process IDs: 558
Number of events: 3739
创建摘要报告

除了专用摘要报告(主要事件摘要,以及失败和成功事件摘要),还可以将 --summary 选项与大多数其他选项结合使用,以仅创建特定关注方面的摘要报告。不过,并非所有报告都支持此选项。下面的示例创建了用户登录事件的摘要报告:

> sudo aureport -u -i --summary

User Summary Report
===========================
total  auid
===========================
5640  root
13  tux
3  wilber
创建事件报告

要了解审计记录的事件,请使用 aureport -e 命令。此命令会生成所有事件的带编号列表,其中包含日期、时间、事件编号、事件类型和审计 ID。

> sudo aureport -e -ts 14:00 -te 14:21

Event Report
===================================
# date time event type auid success
===================================
1. 17/02/09 14:20:27 7462 DAEMON_START 0 yes
2. 17/02/09 14:20:27 7715 CONFIG_CHANGE 0 yes
3. 17/02/09 14:20:57 7716 USER_END 0 yes
4. 17/02/09 14:20:57 7717 CRED_DISP 0 yes
5. 17/02/09 14:21:09 7718 USER_LOGIN -1 no
6. 17/02/09 14:21:15 7719 USER_AUTH -1 yes
7. 17/02/09 14:21:15 7720 USER_ACCT -1 yes
8. 17/02/09 14:21:15 7721 CRED_ACQ -1 yes
9. 17/02/09 14:21:15 7722 LOGIN 0 yes
10. 17/02/09 14:21:15 7723 USER_START 0 yes
11. 17/02/09 14:21:15 7724 USER_LOGIN 0 yes
12. 17/02/09 14:21:15 7725 CRED_REFR 0 yes
基于所有进程事件创建报告

要从进程的角度分析日志,请使用 aureport -p 命令。此命令会生成所有进程事件的带编号列表,其中包含日期、时间、进程 ID、可执行文件的名称、系统调用、审计 ID 和事件编号。

aureport -p

Process ID Report
======================================
# date time pid exe syscall auid event
======================================
1. 13/02/09 15:30:01 32742 /usr/sbin/cron 0 0 35
2. 13/02/09 15:30:01 32742 /usr/sbin/cron 0 0 36
3. 13/02/09 15:38:34 32734 /usr/lib/gdm/gdm-session-worker 0 -1 37
基于所有系统调用事件创建报告

要从系统调用的角度分析审计日志,请使用 aureport -s 命令。此命令会生成所有系统调用事件的带编号列表,其中包含日期、时间、系统调用的编号、进程 ID、使用此调用的命令的名称、审计 ID 和事件编号。

> sudo aureport -s

Syscall Report
=======================================
# date time syscall pid comm auid event
=======================================
1. 16/02/09 17:45:01 2 20343 cron -1 2279
2. 16/02/09 17:45:02 83 20350 mktemp 0 2284
3. 16/02/09 17:45:02 83 20351 mkdir 0 2285
基于所有可执行文件事件创建报告

要从可执行文件的角度分析审计日志,请使用 aureport -x 命令。此命令会生成所有可执行文件事件的带编号列表,其中包含日期、时间、可执行文件的名称、运行可执行文件的终端、执行可执行文件的主机、审计 ID 和事件编号。

aureport -x

Executable Report
====================================
# date time exe term host auid event
====================================
1. 13/02/09 15:08:26 /usr/sbin/sshd sshd 192.168.2.100 -1 12
2. 13/02/09 15:08:28 /usr/lib/gdm/gdm-session-worker :0 ? -1 13
3. 13/02/09 15:08:28 /usr/sbin/sshd ssh 192.168.2.100 -1 14
创建有关文件的报告

要基于审计日志生成侧重于文件访问的报告,请使用 aureport -f 命令。此命令会生成所有文件相关事件的带编号列表,其中包含日期、时间、所访问的文件的名称、访问文件的系统调用的编号、命令的成功或失败结果、访问文件的可执行文件、审计 ID 和事件编号。

> sudo aureport -f

File Report
===============================================
# date time file syscall success exe auid event
===============================================
1. 16/02/09 17:45:01 /etc/shadow 2 yes /usr/sbin/cron -1 2279
2. 16/02/09 17:45:02 /tmp/ 83 yes /bin/mktemp 0 2284
3. 16/02/09 17:45:02 /var 83 no /bin/mkdir 0 2285
创建有关用户的报告

要基于审计日志生成用于说明哪些用户正在您的系统上运行哪些可执行文件的报告,请使用 aureport -u 命令。此命令会生成所有用户相关事件的带编号列表,其中包含日期、时间、审计 ID、使用的终端、主机、可执行文件的名称和事件 ID。

aureport -u

User ID Report
====================================
# date time auid term host exe event
====================================
1. 13/02/09 15:08:26 -1 sshd 192.168.2.100 /usr/sbin/sshd 12
2. 13/02/09 15:08:28 -1 :0 ? /usr/lib/gdm/gdm-session-worker 13
3. 14/02/09 08:25:39 -1 ssh 192.168.2.101 /usr/sbin/sshd 14
创建有关登录的报告

要创建重点统计登录您计算机的尝试的报告,请运行 aureport -l 命令。此命令会生成所有登录相关事件的带编号列表,其中包含日期、时间、审计 ID、使用的主机和终端、可执行文件的名称、尝试的成功或失败结果,以及事件 ID。

> sudo aureport -l -i

Login Report
============================================
# date time auid host term exe success event
============================================
1. 13/02/09 15:08:31 tux: 192.168.2.100 sshd /usr/sbin/sshd no 19
2. 16/02/09 12:39:05 root: 192.168.2.101 sshd /usr/sbin/sshd no 2108
3. 17/02/09 15:29:07 geeko: ? tty3 /bin/login yes 7809
将报告范围限制在特定的时间范围

要分析特定时间范围的日志(例如,仅分析 2009 年 2 月 16 日工作时间的日志),请先运行 aureport -t 来确定这些数据是否包含在当前的 audit.log 中,或者日志是否已进行了轮换:

aureport -t

Log Time Range Report
=====================
/var/log/audit/audit.log: 03/02/09 14:13:38.225 - 17/02/09 15:30:01.636

当前的 audit.log 包含所有所需的数据。如果情况并非如此,请使用 -if 选项将 aureport 命令指向包含所需数据的日志文件。

然后指定所需时间范围的开始与结束日期和时间,并将其与所需的报告选项结合使用。本示例重点统计登录尝试:

> sudo aureport -ts 02/16/09 8:00 -te 02/16/09 18:00 -l

Login Report
============================================
# date time auid host term exe success event
============================================
1. 16/02/09 12:39:05 root: 192.168.2.100 sshd /usr/sbin/sshd no 2108
2. 16/02/09 12:39:12 0 192.168.2.100 /dev/pts/1 /usr/sbin/sshd yes 2114
3. 16/02/09 13:09:28 root: 192.168.2.100 sshd /usr/sbin/sshd no 2131
4. 16/02/09 13:09:32 root: 192.168.2.100 sshd /usr/sbin/sshd no 2133
5. 16/02/09 13:09:37 0 192.168.2.100 /dev/pts/2 /usr/sbin/sshd yes 2139

开始日期和时间是使用 -ts 选项指定的。时戳等于或晚于给定开始时间的任何事件都会显示在报告中。如果省略日期,aureport 将假设您指的是今天。如果省略时间,它会假设开始时间是指定日期的午夜。

使用 -te 选项指定结束日期和时间。时戳等于或早于给定事件时间的任何事件都会显示在报告中。如果省略日期,aureport 将假设您指的是今天。如果省略时间,它会假设结束时间是现在。请使用与 -ts 相同的日期和时间格式。

除摘要报告以外的所有报告将以列格式列显并发送到 STDOUT,这意味着,这些数据可以十分轻松地写入到其他命令。第 41.8 节 “可视化审计数据”中介绍的视觉化脚本是演示如何进一步处理审计所生成的数据的示例。

41.6 使用 ausearch 查询审计守护程序日志

aureport 工具可帮助您创建有关系统上发生的情况的总体摘要,但如果您要了解特定事件的细节,可以使用 ausearch 工具。

ausearch 可让您使用特殊的键和搜索短语搜索审计日志,这些键和短语与 /var/log/audit/audit.log 中的事件消息内显示的大多数标志相关。并非所有记录类型都包含相同的搜索短语。例如,PATH 记录中就不包含 hostnameuid 项。

搜索时,请确保选择适当的搜索准则来捕获所需的所有记录。另一方面,您在搜索特定类型的记录时,可能会随其一并获取相关的其他各种记录。之所以会这样,是因为内核的不同组件会提供与所要查找的记录相关的其他事件记录。例如,对于 open 系统调用,您在获取 SYSCALL 记录的同时始终会获取一条 PATH 记录。

提示
提示:使用多个搜索选项

您可将任何命令行选项与 AND 逻辑运算符相结合,以缩小搜索范围。

从另一文件读取审计日志

将审计日志移到另一台计算机后,或者当您想要在本地计算机上分析多台计算机的日志,而又不想逐个连接其中每台计算机时,请将日志移到某个本地文件,然后在本地使用 ausearch 搜索这些日志:

> sudo ausearch - option -if myfile
将数字结果转换为文本

某些信息(例如用户 ID)将以数字形式列显。要将这些信息转换为直观易懂的文本格式,请在 ausearch 命令中添加 -i 选项。

按审计事件 ID 搜索

如果您先前运行了审计报告或执行了 autrace,则应分析日志中特定事件的追踪。第 41.5 节 “了解审计日志和生成报告”中所述的大多数报告类型都会在其输出中包含审计事件 ID。审计事件 ID 是审计消息 ID 的第二部分,后者由 Unix 纪元时戳和审计事件 ID 构成(以冒号分隔)。所记录的来自一个应用程序系统调用的所有事件都具有相同的事件 ID。在 ausearch 中使用此事件 ID 可以从日志中检索此事件的追踪。

使用如下所示的命令:

> sudo ausearch -a 5207
----
time->Tue Feb 17 13:43:58 2009
type=PATH msg=audit(1234874638.599:5207): item=0 name="/var/log/audit/audit.log" inode=1219041 dev=08:06 mode=0100644 ouid=0 ogid=0 rdev=00:00
type=CWD msg=audit(1234874638.599:5207):  cwd="/root"
type=SYSCALL msg=audit(1234874638.599:5207): arch=c000003e syscall=2 success=yes exit=4 a0=62fb60 a1=0 a2=31 a3=0 items=1 ppid=25400 pid=25616 auid=0 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts1 ses=1164 comm="less" exe="/usr/bin/less" key="doc_log"

ausearch -a 命令会抓取并显示日志中与所提供审计事件 ID 相关的所有记录。此选项可与任何其他选项结合使用。

按消息类型搜索

要搜索特定消息类型的审计记录,请使用 ausearch -m MESSAGE_TYPE 命令。有效消息类型的示例包括 PATHSYSCALLUSER_LOGIN。运行不带消息类型的 ausearch -m 会显示所有消息类型的列表。

按登录 ID 搜索

要查看与特定登录用户 ID 关联的记录,请使用 ausearch -ul 命令。此命令显示与指定的用户登录 ID 相关的所有记录,前提是该用户过去能够成功登录。

按用户 ID 搜索

使用 ausearch -ua 查看与任何用户 ID(用户 ID 和有效用户 ID)相关的记录。使用 ausearch -ui UID 查看与特定用户 ID 相关的报告。要搜索与特定有效用户 ID 相关的记录,请使用 ausearch -ue EUID。搜索用户 ID 是指搜索创建进程的用户的 ID。搜索有效用户 ID 是指搜索该用户 ID 以及运行此进程所需的特权。

按组 ID 搜索

使用 ausearch -ga 命令查看与任何组 ID(组 ID 和有效组 ID)相关的记录。使用 ausearch -gi GID 查看与特定用户 ID 相关的报告。要搜索与特定有效组 ID 相关的记录,请使用 ausearch -ge EGID

按命令行名称搜索

使用 ausearch -c COMM_NAME 命令查看与特定命令相关的记录,例如,使用 ausearch -c less 可查看与 less 命令相关的所有记录。

按可执行文件名搜索

使用 ausearch -x EXE 命令查看与特定可执行文件相关的记录,例如,使用 ausearch -x /usr/bin/less 可查看与 /usr/bin/less 可执行文件相关的所有记录。

按系统调用名称搜索

使用 ausearch -sc SYSCALL 命令查看与特定系统调用相关的记录,例如,使用 ausearch -sc open 可查看与 open 系统调用相关的所有记录。

按进程 ID 搜索

使用 ausearch -p PID 命令查看与特定进程 ID 相关的记录,例如,使用 ausearch -p 13368 可查看与此进程 ID 相关的所有记录。

按事件或系统调用成功值搜索

使用 ausearch -sv SUCCESS_VALUE 查看包含特定系统调用成功值的记录,例如,使用 ausearch -sv yes 可查看所有成功的系统调用。

按文件名搜索

使用 ausearch -f FILE_NAME 查看包含特定文件名的记录,例如,使用 ausearch -f /foo/bar 可查看与 /foo/bar 文件相关的所有记录。您也可以仅使用文件名,但不能使用相对路径。

按终端搜索

使用 ausearch -tm TERM 查看仅与特定终端相关的记录,例如,使用 ausearch -tm ssh 可查看与 SSH 终端上的事件相关的所有记录,使用 ausearch -tm tty 可查看与该控制台相关的所有事件。

按主机名搜索

使用 ausearch -hn HOSTNAME 查看与特定远程主机名相关的记录,例如,使用 ausearch -hn jupiter.example.com 可查看与该主机名相关的所有记录。可以使用主机名、完全限定的域名或数字格式的网络地址。

按键字段搜索

查看包含审计规则集中指派的特定键(用于识别特定类型的事件)的记录。相关命令为 ausearch -k KEY_FIELD。例如,使用 ausearch -k CFG_etc 可显示包含 CFG_etc 键的所有记录。

按字词搜索

查看包含审计规则集中指派的特定字符串(用于识别特定类型的事件)的记录。整个字符串将与文件名、主机名和终端进行匹配。相关命令为 ausearch -w WORD

将搜索范围限制在特定的时间范围

使用 -ts-te 可将搜索范围限制在特定的时间范围。-ts 选项用于指定开始日期和时间,-te 选项用于指定结束日期和时间。这些选项可与上面所述的任何选项结合使用。这些选项的用法与在 aureport 中的用法类似。

41.7 使用 autrace 分析进程

除了使用设置的规则监视系统以外,您还可以使用 autrace 命令对各个进程执行专门的审计。autrace 的工作方式类似于 strace,但它收集的信息略有不同。autrace 的输出将写入到 /var/log/audit/audit.log,看上去与标准审计日志项并无任何不同。

对进程执行 autrace 时,请确保从队列中清除所有审计规则,以免这些规则与 autrace 本身添加的规则相冲突。使用 auditctl -D 命令删除审计规则。这会停止所有一般审计。

> sudo auditctl -D

No rules

autrace /usr/bin/less

Waiting to execute: /usr/bin/less
Cleaning up...
No rules
Trace complete. You can locate the records with 'ausearch -i -p 7642'

请一律使用要通过 autrace 跟踪的可执行文件的完整路径。完成跟踪后,autrace 会提供跟踪的事件 ID,因此您可以使用 ausearch 分析整个数据追踪。要将审计系统恢复为重新使用审计规则集,请使用 systemctl restart auditd 重启动审计守护程序。

41.8 可视化审计数据

/var/log/audit/audit.log 中的数据追踪以及 aureport 生成的不同报告类型(如第 41.5.2 节 “生成自定义审计报告”中所述)都不会向用户提供直观的阅读体验。aureport 输出采用列格式,因此可轻松地用在用户可能连接到审计框架的任何 sed、Perl 或 awk 脚本中,以直观呈现审计数据。

可视化脚本(参见第 42.6 节 “配置日志可视化”)是展示如何使用 SUSE Linux Enterprise Server 或任何其他 Linux 发行套件提供的标准 Linux 工具创建易于阅读的审计输出的一个示例。以下示例可帮助您了解如何将纯文本审计报告转换为直观易懂的图形。

第一个示例说明程序与系统调用之间的关系。要了解此类数据,需要确定用于提供源数据(最终图形是在这些数据的基础上生成的)的相应 aureport 命令:

> sudo aureport -s -i

Syscall Report
=======================================
# date time syscall pid comm auid event
=======================================
1. 16/02/09 17:45:01 open 20343 cron unset 2279
2. 16/02/09 17:45:02 mkdir 20350 mktemp root 2284
3. 16/02/09 17:45:02 mkdir 20351 mkdir root 2285
...

可视化脚本需要对此报告执行的第一项操作是仅提取所需的列,在本例中为 syscallcomm 列。将输出排序并去除重复数据,然后将最终输出写入可视化程序自身中:

LC_ALL=C aureport -s -i | awk '/^[0-9]/ { print $6" "$4 }' | sort | uniq | mkgraph
流程图 — 程序与系统调用之间的关系
图 41.2︰ 流程图 — 程序与系统调用之间的关系

第二个示例说明各种不同类型的事件以及已记录的每种类型的事件数量。用于提取此类信息的相应 aureport 命令是 aureport -e

> sudo aureport -e -i --summary

Event Summary Report
======================
total  type
======================
2434  SYSCALL
816  USER_START
816  USER_ACCT
814  CRED_ACQ
810  LOGIN
806  CRED_DISP
779  USER_END
99  CONFIG_CHANGE
52  USER_LOGIN

由于此类报告已包含两列输出,因此只会馈送到可视化脚本并转换为条形图。

> sudo aureport -e -i --summary  | mkbar events
条形图 — 常见事件类型
图 41.3︰ 条形图 — 常见事件类型

有关审计数据可视化的背景信息,请参见审计项目的网站 http://people.redhat.com/sgrubb/audit/visualize/index.html

41.9 中继审计事件通知

审计系统还允许外部应用程序实时访问和使用 auditd 守护程序。此功能由所谓的审计调度程序提供,举例而言,入侵检测系统可以通过此程序使用 auditd 来接收增强的检测信息。

audispd 是用于控制审计调度程序的守护程序。它通常由 auditd 启动。audispd 会提取审计事件并将其分发到想要对其进行实时分析的程序。auditd 的配置储存在 /etc/audisp/audispd.conf 中。该文件具有以下选项:

q_depth

指定事件调度程序内部队列的大小。如果系统日志指出审计事件开始被丢弃,请增大此值。默认值为 250。

overflow_action

指定审计守护程序对内部队列溢出的反应方式。可能的值为 ignore(不执行任何操作)、syslog(向系统日志发送警告)、suspend(audispd 将停止处理事件)、single(将计算机系统置于单用户模式)或 halt(关闭系统)。

priority_boost

指定审计事件调度程序的优先级(以及审计守护程序本身的优先级)。默认值为 4,即优先级无变化。

name_format

指定在审计事件中插入计算机节点名称的方式。可能的值为 none(不插入计算机名)、hostnamegethostname 系统调用返回的名称)、fqd(计算机的完全限定域名)、numeric(计算机的 IP 地址)或 username 选项中用户定义的字符串)。默认值为 none

name

指定用于标识计算机的用户定义的字符串。name_format 选项必须设置为 user,否则会忽略此选项。

max_restarts

用于指定审计事件调度程序可以尝试重启动崩溃插件的次数的非负数。默认值为 10。

例 41.9︰ 示例 /etc/audisp/audispd.conf
  q_depth = 250
  overflow_action = SYSLOG
  priority_boost = 4
  name_format = HOSTNAME
  #name = mydomain

插件程序将其配置文件安装在专用于 audispd 插件的特殊目录中。此目录默认为 /etc/audisp/plugins.d。插件配置文件具有以下选项:

active

指定程序是否使用 audispd。可能的值为 yesno

direction

指定插件预期会采用什么方式与审计通讯。它可向事件调度程序告知事件的流动方向。可能的值为 inout

path

指定插件可执行文件的绝对路径。对于内部插件,此选项会指定插件名称。

type

指定运行插件的方式。可能的值为 builtinalways。对内部插件(af_unixsyslog)使用 builtin,对大多数(如果不是所有)其他插件使用 always。默认值为 always

args

指定传递给插件程序的参数。正常情况下,插件程序将从其配置文件读取其参数,不需要接收任何参数。限制为两个参数。

format

指定审计调度程序传递给插件程序的数据格式。有效选项为 binarystringbinary 以事件调度程序从审计守护程序接收数据时的原有格式传递数据。string 指示调度程序将事件更改为可由审计分析库分析的字符串。默认值为 string

例 41.10︰ 示例 /etc/audisp/plugins.d/syslog.conf
  active = no
  direction = out
  path = builtin_syslog
  type = builtin
  args = LOG_INFO
  format = string