开发手册 欢迎您!
软件开发者资料库

Linux auditctl 命令

Linux命令是对Linux系统进行管理的命令。对于Linux系统来说,无论是中央处理器、内存、磁盘驱动器、键盘、鼠标,还是用户等都是文件,Linux系统管理的命令是它正常运行的核心,与之前的DOS命令类似。linux命令在系统中有两种类型:内置Shell命令和Linux命令。本文主要介绍Linux auditctl 命令。

1、命令简介

使用auditctl命令可以对内核中的审计系统进行控制,可以用来获取audit状态和添加/删除audit规则。

2、命令用法

auditctl [options]

3、命令描述

auditctl程序用于控制行为、获取状态以及在2.6内核的审计系统中添加或删除规则。

4、命令选项

选项

描述

-b backlog

 

如果所有的缓冲区都满了,

内核就会参照失败标志进行操作。

-e [0..2]

设置启用标志。当传递0时,

这可以用来临时禁用审计。

当1作为参数传递时,

它将启用审计。要锁定审计配置,

使其不能被更改,

请传递一个2作为参数。

对于任何希望激活该特性的人来说,

锁定配置是audit.rules中的最后一条命令。

任何试图在此模式下更改配置的尝试都将被审计并拒绝。

只有重新启动计算机才能更改配置。

-f [0..2]

设置失败标志0=silent 1=printk 2=panic。

该选项允许确定希望内核如何处理关键错误。

查询此标志的示例条件包括:

向用户空间审计守护进程传输错误、积压限制超过、

内核内存溢出和速率限制超过。

默认值为1。安全环境可能希望将此值设置为2。

-h

帮助

-i

从文件中读取规则时忽略错误

-l

每行列出所有规则1。

这也可以采用一个关键选项(-k)。

-k key

在审计规则上设置过滤键。

筛选键是一个长度不超过31字节的任意文本字符串。

它可以唯一地标识规则产生的审计记录。

典型的用法是当有几个共同满足安全需求的规则时。

可以使用ausearch搜索键值,

这样无论哪个规则触发了事件,

都可以找到它的结果。

该键还可以用于delete all (-D)和list rules (-l),

以选择具有特定键的规则。

如果你希望能够以多种方式搜索记录的事件,

或者如果你有一个audispd插件,

使用一个键来帮助它的分析,

你可以在一个规则上有多个键。

-m text

向审计系统发送用户空间消息。

这只能由root用户完成。

-p [r|w|x|a]

 

设置文件系统监视的权限过滤器。 

r=read, w=write, x=execute, a=attribute更改。

这些权限不是标准的文件权限,

而是执行此类操作的系统调用。

读和写系统调用在这个集合中被省略了,

因为它们会覆盖日志。但是对于读或写,

打开标志将查看请求的权限。

-q mount-point,subtree

 

如果有一个现有的目录监视并绑定或移动在监视子树中挂载另一个子树,

则需要告诉内核使被挂载的子树等同于被监视的目录。

如果在发出目录监视时已经挂载了子树,

那么子树将自动标记为监视。

请注意两个值之间用逗号隔开。省略它将导致错误。

-r rate

在messages/sec中设置限制(0=none)。

如果这个比率非零并且超过了这个比率,

内核就会参考失败标志来采取行动。默认值为0。

-R file

从文件中读取规则。规则必须是每行1,

并且按照执行的顺序。

规则文件必须由根用户拥有,

其他用户不能读,否则将被拒绝。

规则文件可以通过以' # '字符开头嵌入注释。

从文件中读取的规则与您在命令行中输入的规则相同,

只是它们前面没有auditctl(因为auditctl是执行文件的规则)。

-s

状态报告。注意,pid为0表示审计守护进程没有运行。

-t

在挂载命令后修整子树。

-a list,action

 

用action将规则附加到列表的末尾。

请注意两个值之间用逗号隔开。

省略它将导致错误。

以下描述了有效的列表名称:

下面描述了该规则的有效操作:

-A list,action

 

用action向开始列表添加规则。

-d list,action

 

用action删除列表中的规则。

只有当规则与系统调用名和字段名完全匹配时,

规则才会被删除。

-D

删除所有规则和手表。

这也可以采用一个关键选项(-k)。

-S [Syscall name or number|all]

 

可以使用任何系统调用名或号码。

'all'这个词也可以用。

如果这个系统调用是由程序执行的,

那么就启动一个审计记录。

如果给出了字段规则,

但没有指定系统调用,

则默认为所有系统调用。

还可以在同一规则中使用多个-S选项来指定多个系统调用。

这样做可以提高性能,因为需要评估的规则更少。

如果您使用的是双arch系统,比如x86_64,

那么应该注意到auditctl只是获取文本,

查找本机arch(在本例中是b64)并将该规则发送到内核。

如果没有额外的arch指令,

它将应用于32位和64位系统调用。

这可能会产生不良影响,

因为不能保证打开的系统调用在32位

和64位接口上具有相同的数字。

你可能想要控制它并编写2个规则,

一个arch等于b32,

另一个是b64,以确保内核找到你想要的事件。

-F [n=v | n!=v | nv | n<=v | n>=v | n&v | n&=v]

 

构建一个规则字段:名称、操作、值。

您可能在单个命令行上传递多达64个字段。

每个都必须以-F开头。

每个字段方程相互与以触发一个审计记录。

支持8种操作符——分别为:

等于、不等于、小于、大于、小于或等于、

大于或等于、位掩码和位测试。

位测试将"and"值并检查它们是否相等,

位掩码只是"and"值。

接受用户ID的字段可以使用用户名;

程序将把名称转换为用户ID。

组名也是如此。有效的字段有:

-w path

在路径处插入一个文件系统对象的监视。

不能将监视插入到顶级目录。

这是内核禁止的。通配符也不受支持,

并将生成警告。

监视工作的方式是在内部跟踪inode。

如果将监视放在文件上,

则与在系统调用规则上使用-F path选项相同。

如果在目录上放置监视,

则与在系统调用规则上使用-F dir选项相同。

编写手表的-w形式是为了向后兼容,

而基于系统调用的形式更具表现力。

与大多数系统调用审计规则不同,

监视不会根据发送到内核的规则数量影响性能。

使用手表时,唯一有效的选项是-p和-k。

如果您需要一些特殊的操作,

比如审计某个访问文件的特定用户,

那么可以使用带有path或dir字段的syscall审计表单。

请参阅EXAMPLES部分以获得将一种表单转换为另一种表单的示例。

-W path

删除一个监视文件系统对象的路径。

5、使用示例

1)查看audit运行状态

auditctl -s 

2)查看现有的audit规则

auditctl -l

3)查看特定程序的所有系统调用

auditctl -a entry,always -S all -F pid=1008

4)查看指定用户打开的文件

auditctl -a exit,always -S open -F auid=510 

5)查看未成功的open调用

auditctl -a exit,always -S open -F success=0 

6)监测文件的变化(两种表达方式)

auditctl -w /etc/shadow -p wa 
auditctl -a exit,always -F path=/etc/shadow -F perm=wa 

7)递归地监视目录的变化(两种表达方式)

auditctl -w /etc/ -p wa 
auditctl -a exit,always -F dir=/etc/ -F perm=wa