前言

Linux auditd 工具可以将审计记录写入日志文件。包括记录系统调用和文件访问。管理员可以检查这些日志,确定是否存在安全漏洞。本文首先介绍用户空间审计系统的结构,然后介绍主要的 audit 工具的使用方法。

Linux 用户空间审计系统简介

Linux 内核有用日志记录事件的能力,包括记录系统调用和文件访问。管理员可以检查这些日志,确定是否存在安全漏洞(如多次失败的登录尝试,或者用户对系统文件不成功的访问),这就是本文介绍的 linux 用户空间审计系统, 图 1 是 linux 用户空间审计系统示意图 。

图 1 Linux audit 架构示意图


说明:图 1 的实线代表数据流,虚线代表组件之间的控制关系。图 1 包括有两大部分:图 1 中间的是 Linux 内核中的几种系统调用(user, task, exit, exclude),图 1 右侧是一系列应用程序(auditd、audispd、auditctl、autrace、ausearch 和 aureport 等)。Linux 内核中的几种系统调用是:

User :记录用户空间中产生的事件;它的作用是过滤消息的,内核传递给审计后台进程之前先查询它。

Task:跟踪应用程序的子进程(fork);当一个任务被创建时,也就是父进程通过 fork 和克隆创建子进程时记录该事件;

Exit:当一个系统调用结束时判断是否记录该调用;

Exclude:删除不合格事件;Exclude 是用来过滤消息的,也就是不想看到的消息可以在这里写规则进行过滤。

从图 1 可以看到 audit 是内核中的一个模块,内核的运行情况都会在 audit 中记录,当然这个记录的规则是由超级用户来设置的。内核的 audit 模块是由应用层的一个应用程序 auditd 来控制的。audit 产生的数据都会传送到 auditd 中,然后再由 auditd 进行其它操作。auditd.conf 是 auditd 的配置文件,确定 auditd 是如何启动的,日志文件放在哪里等等。audit.rules 是 audit 的规则文件,确定 audit 的日志中记录哪些操作。它通过一个对 audit 进行控制的应用程序 auditctl 进行操作。root 用户也可以直接调用 auditctl 进行操作。auditd 收到的数据后会有两个去处。默认的是将日志保存在 audit.log 文件中,默认路径/var/log/audit/audit.log。另一个通过 audispd 将日志进行分发。要使用安全审计系统可采用下面的步骤:首先安装软件包。然后设置配置文件、配置常用命令,添加审计规则,然后启用 audit 守护进程并开始进行日志记录,最后通过生成审计报表和搜索日志来周期性地分析数据。

Linux 用户空间审计系统由 auditd、audispd、auditctl、autrace、ausearch 和 aureport 等应用程序组成。下面依次说明:

auditctl : 即时控制审计守护进程的行为的工具,如添加规则等。

auditd :audit 守护进程负责把内核产生的信息写入到硬盘上,这些信息由应用程序和系统活动触发产生。用户空间审计系统通过 auditd 后台进程接收内核审计系统传送来的审计信息,将信息写入到 /var/log/audit/audit.log。

aureport : 查看和生成审计报告的工具。

ausearch : 查找审计事件的工具

auditspd : 转发事件通知给其他应用程序,而不是写入到审计日志文件中。

autrace : 一个用于跟踪进程的命令。类似于 strace,跟踪某一个进程,并将跟踪的结果写入日志文件之中。

audit 和 syslog 日志系统的关系

audit 主要用来记录安全信息,用于对系统安全事件的追溯;而 syslog 日志系统用来记录系统中的各种信息,如硬件警报和软件日志等。但是 syslog 属于应用层,没办法记录太多信息。audit 来记录内核信息,包括文件的读写,权限的改变等。

安装 audit 软件包并且配置审计守护进程

使用 yum 工具安装软件包

清单 1.安装软件包

1

#yum install audit*.* -y


用户也可以从源码安装,源码下载地址:http://people.redhat.com/sgrubb/audit/

了解 audit 配置文件

audit 配置文件简介

audit 安装后会生成 2 个配置文件: /etc/audit/auditd.conf 和/etc/audit/audit.rules 。/etc/audit/auditd.conf 是守护程序的默认配置文件。/etc/audit/audit.rules 是记录审计规则的文件。首次安装 audit 后, 审计规则文件是空的。

理解/etc/audit/audit.conf 文件

/etc/audit/auditd.conf 守护程序的默认配置文件是 Linux 安全审计系统最关键文件。/etc/audit/auditd.conf 文件包括如下几个部分:一般先设置 auditd 的日志文件,然后设置是否循环使用日志文件,配置日志文件大小和报警信息,设置审计规则信息

和目录观察器。下面简单设置一个 /etc/audit/auditd.conf

清单 2. /etc/audit/auditd.conf 配置例子

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

#vi /etc/audit/auditd.conf

#第 5 行设置日志文件

log_file = /var/log/audit/audit.log

#第 11 行设置日志文件轮询的数目,它是 0~99 之间的数。如果设置为小于 2,则不会循环日志。如果没有设置 num_logs 值,它就默认为 0,意味着从来不循环日志文件

num_logs = 5

#第 14 行设置日志文件是否使用主机名称,一般选 NONE

name_format = NONE

#第五行设置日志文件大小,以兆字节表示的最大日志文件容量。当达到这个容量时,会执行 max_log_file _action 指定的动作

max_log_file = 6

#第 17 行设置日志文件到达最大值后的动作,这里选择 ROTATE(轮询)

max_log_file_action = ROTATE


清单 2 是笔者在 CentOS 7 下的配置,其他参数可以选择缺省值。

auditctl 命令简介

auditctl 命令是 Linux 用户空间审计系统的最主要的部分,命令格式:



1

auditctl [选项] filter,action   -S syscall   -F condition   -k label

主要参数说明见表 1

表 1. auditctl 命令选项
项目可选参数説明
filter user,exit,task,exclude 

filter 详细说明哪个内核规则匹配过滤器应用在事件中。以下是其中之一的与规则匹配的过

滤器:task、exit、user 以及 exclude

action always, never 是否审核事件(always 表示是)(never 表示否) 
syscall all, 2, open 等 所有的系统调用都可以在/usr/include/asm/unistd_64.h 文件中找到。许多系统调用都能形成一个规则 
condition euid=0, arch=b64 详细说明其他选项,进一步修改规则来与以特定架构、组 ID、进程 ID 和其他内容为基础的事件相匹配 
label 任意文字 标记审核事件并检索日志 

-S 表示系统调用号或名字

-F 表示规则域。

-k 表示设置审计规则上的过滤关键

了解 audit 审计规则

audit 审计规则分成三个部分:

控制规则:这些规则用于更改审计系统本身的配置和设置。

文件系统规则:这些是文件或目录监视。使用这些规则,我们可以审核对特定文件或目录的任何类型的访问。

系统调用规则:这些规则用于监视由任何进程或特定用户进行的系统调用。

控制规则

控制规则可以在/etc/audit/audit.rules 中设置。主要包括:

-D #删除所有当前装载的审核规则#

-b 8192 #在内核中设定最大数量的已存在的审核缓冲区为 8Mb#

-e 2 #锁定审核配置#

文件系统规则

可以通过 auditctl 命令设置。监控文件系统行为(依靠文件、目录的权限属性来识别)

规则格式:

-w 路径

-p 权限

-k 关键字

其中-p 权限的动作分为四种

r — 读取文件或者目录。

w — 写入文件或者目录。

x — 运行文件或者目录。

a — 改变在文件或者目录中的属性。

例如要监控/etc/passwd 文件的修改行为,可以使用这个命令:#auditctl -w /etc/passwd -p wa

也可以自己将上述内容加入到文件/etc/audit/rules.d/audit.rules 中即可实现对该文件的监视。

清单 3 例子的审核规则记录了每次读取或者修改/etc/hosts 文件的尝试:

清单 3. 审核规则记录了每次读取或者修改/etc/hosts 文件的尝试

1

#auditctl -w /etc/hosts -p wa -k hosts_change

系统调用规则

监控系统调用可能会引起高负荷的日志活动,这会让内核承受更大的负荷。所以要慎重衡量哪些系统调用需要放到 audit.rules 中。如果审计的是目录的话,只能对该目录本身的属性进行审计。如果想审计下面的文件,需要一一列出。

系统调用的监控:

-a 添加一条系统调用监控规则

-S 显示需要监测的系统调用的名称

显示规则和删除规则:

-D 删除所有规则

-d 删除一条规则和-a 对应

-w 写入文件或者目录。

-W 删除一条规则和-w 对应

-l 列出所有规则

清单 4 的命令用来定义特定用户(这里假设是 UID 为 10001)访问日志,规则是 userfile:

清单 4 定义记录有哪些文件,特定用户(UID 为 10001)访问和标签的日志条目的规则

1

# auditctl -a always,exit -F arch=b64 -F auid=10001 -S open -k userfile

说明:userfile 是用户自己设置的一个规则名字,以上的都设置完毕了,就可以生成各种报告了。另外通过 auditctl 命令添加的规则不是永久有效的。为了让他们在重新启动后有效的,可以将其添加到文件/etc/audit/rules.d/audit.rules 中。

启动 auditd 守护进程

可以使用如下命令启动服务进程:

#service auditd start

要使它自动在运行时启动,则应作为根用户执行命令:

#systemctl enable auditd

要停止它,可使用 service auditd stop 命令,重启 auditd, 可使用 service auditd restart 命令,service auditd reload 或者 service auditd force-reload 命令用来重新加载 auditd 在/etc/audit/auditd.conf 文件中的配置。service auditd rotate 命令在/var/log/audit/目录中旋转日志文件。service auditd resume 命令在推迟审核事件日志之后重新开始,例如存在没有足够的磁盘分区空间来保存审核日志文件情况。service auditd status 命令显示运行状态。要验证规则,应以根用户身份执行 auditctl -1 命令列出所有活动的规则和观察器。

配置 auditd 的日志文件到远程主机

假设 audit 服务器名称是 cyq1 ,ip 地址 192.168.0.1 ;audit 客户端名称是 cyq2 ,ip 地址 192.168.0.2 。

首先修改服务器端配置文件:

清单 5 修改服务器端配置文件

1

2

3

4

5

vi /etc/audit/auditd.conf

#修改第 25 行设置监听端口为 60

tcp_listen_port =60

然后重启服务

#service auditd restart

然后在客户端安装相关软件包并且配置文件

清单 6 客户端安装相关软件包并且配置文件

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

#yum -y install audispd-plugins

修改配置文件

#vi /etc/audisp/plugins.d/au-remote.conf

# 修改第 6 行,把审核日志发送到日志服务器

active =yes

#vi /etc/audisp/audisp-remote.conf

#修改第 6 行

remote_server =cyq1

#修改第 7 行设置监听端口为 60

port = 60

#vi /etc/audit/auditd.conf

#修改第 6 行

log_format =NOLOG

然后重启服务

#service auditd restart

使用 aureport 命令生成审计消息的报表

要生成审计消息的报表,可使用 aureport 命令。如果执行 aureport 时没有使用任何选项,则会显示如汇总报表。下面是几个例子:

清单 7 生成一段特定时间内的报告

1

# aureport -ts 8:00-te 17:30 -f –i

清单 8 生成所有用户失败事件的总结报告:

1

# aureport -u --failed --summary –i

清单 9 生成系统调用事件报告# aureport -s -i --summary

1

使用 ausearch 命令使用搜索记录功能

audit 系统附带了一个功能强大的工具,称为 ausearch 搜索审计日志。使用 ausearch ,您可以过滤和搜索事件类型。它还可以通过将数值转换为更加直观的值(如系统调用或用户名)来解释事件。以根用户身份执行 ausearch 命令,当显示结果时,每个记录用 4 条虚线组成的一行隔开,每个记录前均显示时间标记。图 2 是 ausearch –f /etc/group 中的结果 。

图 2 ausearch –f /etc/group 中的结果


这里简单介绍一下图 2 的输出结果。

time : 审计时间。

name : 审计对象

cwd : 当前路径

syscall : 相关的系统调用

auid : 审计用户 ID

uid 和 gid : 访问文件的用户 ID 和用户组 ID

comm : 用户访问文件的命令

exe : 上面命令的可执行文件路径

下面是几个例子:

清单 10 搜索系统登录失败,使用如下命令:

1

# ausearch --messag e USER _LO G IN --success no --i nterpret

清单 11 搜索所有的账户,群组,角色变更,使用以下命令:

1

# ausearch -m ADD _USER -m DEL_USER -m ADD _GROUP -m USER _CHAUT HTOK -m D EL_GROUP -m CHGRP_ID -m ROLE_ASSIGN -m ROLE_REMOVE -i

清单 12 搜寻从制定时间段的失败的系统调用,使用以下命令:

1

# ausearch --start 02/07/2017 --end 02/21/2017 no w -m SYSCALL -sv no –i

使用关键字( key)搜索审计事件记录

auditd 生成的日志文件内容非常多,如果没有设置关键字,要查找搜索审计事件记录,比较麻烦。使用关键字( key) 可以提高效率:

首先使用 auditctl 命令建立一个规则:

清单 13 使用 auditctl 命令建立一个规则

1

# auditctl -w /etc/passwd -p rwa -k passwd_changes

上面这个规则的意思是记录访问或修改 / etc / passwd 用户帐户数据库的任何尝试。一旦有人修改了数据库文件,可以使用如下关键字( key)搜索审计事件记录

清单 14 使用关键字( key)搜索审计事件记录

1

# ausearch -k passwd_changes | less

上面的命令显示访问或修改 / etc / passwd 文件的日志信息,其他信息忽略。

使用图形化工具 seaudit

seaudit 是 SElinux 故障诊断工具包(setools-gui)的组件。seaudit 允许用户查看和过滤日志文件的内容。它支持 syslog 和 auditd 两种日志格式,并提供查询以检查基于 SELinux 的策略日志消息。打开 seaudit 工具可以看到审计信息。从"工具"菜单中选择"监控日志",或单击"切换"监视器按钮打开和关闭实时日志监视功能。当此功能开启时,seaudit 会定期检查新消息间隔,默认为每秒。还可以配置间隔首选项对话框。如图 3 。

图 3 配置视图


使用 seaudit 工具可以生成报表方法是从 tools 菜单选择"Creat Report",在"Input"选项你可以选择输出所有 audit 的日志文件或者当前的视图文件。在"Output"选项你可以选择输出 HTML 或者 txt 格式两种报告格式。然后点击"create Report"按钮保存报表文件即可。用户可以使用浏览器查看生成的报表文件查看日志文件见图 4。

图 4 使用浏览器查看生成的报表文件


说明:使用 seaudit 工具建立 HTML 格式的报表的话先要下载两个格式文件 seaudit-report.conf 和 seaudit-report.css 到/usr/sharre/setools-3.3/目录下,下载网站是https://github.com/TresysTechnology/setools3/tree/master/seaudit 。

总结

Linux 提供了用来记录系统安全信息的审计系统,使用 Audit 系统您可以在应用程序执行期间获取以下信息。发生错误的时间、哪个文件导致错误、原因是什么?、什么进程导致了错误等等。如果你能熟练掌握它,我认为这是非常有用的系统管理和安全管理工具。


©著作权归作者所有:来自51CTO博客作者mb5fdcadbf25fde的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. aide监控系统文件
  2. Spark2.x精通:源码剖析BypassMergeSortShuffleWriter具体实现
  3. OracleRAC日常操作,使用RMAN将数据文件移入ASM
  4. 千万不要在您的系统上运行的那些Linux命令
  5. Weblogic中间件创建文件权限问题解决
  6. 实现多文件上传| MVC与依赖注入的原理
  7. 一个ftp传输文件引发的思考
  8. 分布式文件系统监控
  9. Vue+Django独立开发电商项目

随机推荐

  1. android API8以上版本使用GridLayout
  2. Js中JSON.parse函数解析导致的数据异常
  3. Broadcast详解
  4. Android的NoVIP视频解析APP开发完整过程
  5. TextView支持HTML TAG
  6. android Log.isLoggable步骤的使用
  7. Android旋转本地图片并保存
  8. 通读Android文档系列 SEVER
  9. 【Android问题】解决 Android SDK下载和
  10. Developing Augmented Reality Applicati