ausearch

这是许多新系统管理员提出的关键问题之一:

如何审核文件事件,如读/写等? 如何使用audit查看谁在Linux中更改了文件?

答案是使用2.6内核的审计系统。 现代Linux内核(2.6.x)附带auditd守护程序。 它负责将审计记录写入磁盘。 在启动期间,此守护程序将读取/etc/audit.rules中的规则。 您可以打开/etc/audit.rules文件并进行更改,例如设置审核文件日志位置和其他选项。 默认文件足以开始使用auditd。


要使用审计功能,您需要使用以下实用程序 

=> auditctl - 一个帮助控制内核审计系统的命令。 您可以获取状态,并在内核审计系统中添加或删除规则。 使用以下命令完成在文件上设置监视:

=> ausearch - 一个可以根据不同搜索条件查询事件的审计守护程序日志的命令。

=> aureport - 生成审计系统日志摘要报告的工具。

请注意,所有说明都在CentOS 4.x和Fedora Core以及RHEL 4/5 Linux上进行了测试。

任务:安装审计包


审计包中包含用于存储和搜索由Linux 2.6内核中的审计子系统生成的审计记录的用户空间实用程序。CentOS / Red Hat和Fedora核心包括审计rpm包。 使用yum或up2date命令安装包 

# yum install audit

要么 

# up2date install audit


启动时自动启动审计服务 

# ntsysv

要么 

# chkconfig auditd on

现在开始服务: 

# /etc/init.d/auditd start

如何在文件上设置监视以进行审核?


我们假设您要审核/ etc / passwd文件。 您需要键入命令,如下所示: 

# auditctl -w /etc/passwd -p war -k password-file

哪里,

  • -w / etc / passwd :在给定路径上插入文件系统对象的监视,即名为/ etc / passwd的监视文件

  • -p war :为文件系统监视设置权限筛选器。 它可以是r用于读取,w用于写入,x用于执行,a用于追加。

  • -k password-file :在/ etc / passwd文件(watch)上设置过滤器密钥。 密码文件是一个filterkey(文本字符串,最长可达31个字节)。 它可以唯一标识手表生成的审计记录。 搜索审计日志时需要使用密码文件字符串或短语。

简而言之,您正在监视(读取为正在观看)任何可能对文件执行写入,追加或读取操作的任何人(包括系统调用)的/ etc / passwd文件。


等待一段时间或作为普通用户运行命令,如下所示: 

$ grep 'something' /etc/passwd 

$ vi /etc/passwd 

以下是更多示例:

文件系统审核规则


使用任意filterkey“shadow-file”在“/ etc / shadow”上添加一个监视,该监视器生成“shadow”上的“读取,写入,执行和追加”记录 

# auditctl -w /etc/shadow -k shadow-file -p rwxa

系统调用审计规则


下一个规则禁止审计mount syscall出口 

# auditctl -a exit,never -S mount

文件系统审核规则


添加一个带有NULL过滤键的监视“tmp”,该键在“/ tmp”上生成记录“执行”(适用于Web服务器)

# auditctl -w /tmp -pe -k webserver-watch-tmp

使用PID的系统调用审计规则


要查看名为sshd(pid - 1005)的程序所做的所有系统调用: 

# auditctl -a entry,always -S all -F pid=1005

如何找出谁更改或访问了文件/ etc / passwd?


使用ausearch命令如下: 

# ausearch -f /etc/passwd

要么 

# ausearch -f /etc/passwd | less

要么 

# ausearch -f /etc/passwd -i | less

哪里,

  • -f / etc / passwd:仅搜索此文件

  • -i :将数字实体解释为文本。 例如,uid将转换为帐户名称。

输出:

----

type = PATH msg = audit(03/16/2007 14:52:59.985:55):name = / etc / passwd flags = follow,open inode = 23087346 dev = 08:02 mode = file,644 ouid = root ogid = root rdev = 00:00

type = CWD msg = audit(03/16/2007 14:52:59.985:55):cwd = / webroot / home / lighttpd

type = FS_INODE msg = audit(03/16/2007 14:52:59.985:55):inode = 23087346 inode_uid = root inode_gid = root inode_dev = 08:02 inode_rdev = 00:00

type = FS_WATCH msg = audit(03/16/2007 14:52:59.985:55):watch_inode = 23087346 watch = passwd filterkey = password-file perm = read,write,append perm_mask = read

type = SYSCALL msg = audit(03/16/2007 14:52:59.985:55):arch = x86_64 syscall = open success = yes exit = 3 a0 = 7fbffffcb4 a1 = 0 a2 = 2 a3 = 6171d0 items = 1 pid = 12551 auid = unknown(4294967295)uid = lighttpd gid = lighttpd euid = lighttpd suid = lighttpd fsuid = lighttpd egid = lighttpd sgid = lighttpd fsgid = lighttpd comm = grep exe = / bin / grep


让我们试着了解输出

  • audit(03/16/2007 14:52:59.985:55) :审核日志时间

  • uid = lighttpd gid = lighttpd :数字格式的用户ID。 通过将-i选项传递给命令,您可以将大多数数值数据转换为人类可读格式。 在我们的示例中,用户使用lighttpd grep命令打开文件

  • exe =“/ bin / grep” :命令grep用于访问/ etc / passwd文件

  • perm_mask = read:文件已打开以进行读取操作

因此,从日志文件中,您可以清楚地看到谁使用grep读取文件或使用vi / vim文本编辑器对文件进行了更改。Log提供了大量其他信息。 您需要阅读手册页和文档以了解原始日志格式。

其他有用的例子


搜索带有日期和时间戳的事件。 如果省略日期,则假设今天。 如果省略时间,现在假设。 使用24小时制时间而不是AM或PM来指定时间。 示例日期是10/24/05。 时间的一个例子是18:00:00。 

# ausearch -ts today -k password-file 

# ausearch -ts 3/12/07 -k password-file


使用-x选项搜索与给定可执行文件名匹配的事件。 例如,找出谁使用rm命令访问/ etc / passwd:

# ausearch -ts today -k password-file -x rm 

# ausearch -ts 3/12/07 -k password-file -x rm


搜索具有给定用户名(UID)的事件。 例如,找出用户vivek(uid 506)是否尝试打开/ etc / passwd: 

# ausearch -ts today -k password-file -x rm -ui 506 

# ausearch -k password-file -ui 506



猜你喜欢

转载自blog.51cto.com/15061935/2653882