1)简介

  Linux审计系统创建审计跟踪,这是一种跟踪系统上各种信息的方法。它可以记录大量数据,如事件类型,日期和时间,用户ID,系统调用,进程,使用的文件,SELinux上下文和敏感度级别。它可以跟踪文件是否已被访问,编辑或执行。它甚至可以跟踪文件属性的更改。它能够记录系统调用的使用情况,用户执行的命令,登录尝试失败以及许多其他事件。默认情况下,审计系统仅记录日志中的少数事件,例如登录的用户,使用sudo的用户以及与SELinux相关的消息。它使用审计规则来监视特定事件并创建相关的日志条目。可以创建审计规则。

2)查看审核规则

 [root@s- log]# sudo auditctl -l    #查看当前审计规则
 No rules                                  #默认值,没任何规则
 [root@s- log]# man auditctl
 [root@s- log]# auditctl -s    #查看审计系统的当前状态
 enabled 1            #值为1,表示在服务器上启用了审核
 failure
 pid 646             #审计守护程序的进程号,pid为o表示守护程序未运行
 rate_limit
 backlog_limit
 lost 0            #表示由于审计队列益出而丢弃了多少事件的纪录
 backlog 0          #表示当前有多少事件纪录排队等待auditd来读取他们
 loginuid_immutable  unlocked
 [root@s- log]# 

3)添加审计规则

可以用个命令auditctl添加自定义审核规则。默认情况下,规则将添加到当前列表的底部,但也可以插入顶部。要使规则永久化,您需要将它们添加到文件/etc/audit/rules.d/audit.rules中。每当auditd服务启动时,它都会激活文件中的所有规则。审核规则在第一个匹配胜利的基础上工作 - 当规则匹配时,它不会进一步评估规则。正确的规则排序很重要。

如果您使用的是CentOS 6,则会找到审核规则文件/etc/audit/audit.rules

审计规则有三种类型:

  • 控制规则:这些规则用于更改审计系统本身的配置和设置。
  • 文件系统规则:这些是文件或目录监视。使用这些规则,我们可以审核对特定文件或目录的任何类型的访问。
  • 系统调用规则:这些规则用于监视由任何进程或特定用户进行的系统调用。

控制规则

让我们看看我们可以添加的一些控制规则:

  • auditctl -b <backlog> - 设置允许的最大未完成审核缓冲区数。如果所有缓冲区都已满,则内核会查询失败标志以进行操作。CentOS服务器上设置的默认积压限制为320.您可以使用以下命令查看:
sudo auditctl -s

在输出中,您可以看到当前的backlog_limit值:

AUDIT_STATUS: enabled=1 flag=1 pid=9736 rate_limit=0 backlog_limit=320 lost=0 backlog=0

如果您的积压值大于当前设置的backlog_limit,则可能需要增加backlog_limit以使审核日志记录正常运行。例如,要将值增加到1024,请运行:

sudo auditctl -b 1024

输出将显示状态:

AUDIT_STATUS: enabled=1 flag=1 pid=9736 rate_limit=0 backlog_limit=1024 lost=0 backlog=0
  • auditctl -f [0 1 2] - 设置失败标志(0 =无声,1 =打印.2 =恐慌)。此选项可让您确定内核如何处理严重错误。如果设置为0,将以静默方式丢弃无法记录的审核消息。如果设置为1,则将消息发送到内核日志子系统。如果设置为2,则会触发内核崩溃。查询此标志的示例条件包括超出积压限制,超出内核内存和超出速率限制。默认值为1.除非服务器上的审计守护程序有任何重大问题,否则无需更改此值。
  • auditctl -R <filename> - 从指定的文件中读取审核规则。当您测试一些临时规则并希望再次从audit.rules文件中使用旧规则时,这非常有用。

我们通过auditctl添加的规则不是永久性的。要使它们在重新启动后保持不变,您可以将它们添加到文件/etc/audit/rules.d/audit.rules中。此文件使用相同的auditctl命令行语法来指定规则,但前面没有auditctl命令本身。将忽略散列符号(#)后面的任何空行或任何文本。默认规则文件如下所示:

# This file contains the auditctl rules that are loaded
# whenever the audit daemon is started via the initscripts.
# The rules are simply the parameters that would be passed
# to auditctl.
​
# First rule - delete all
-D
​
# Increase the buffers to survive stress events.
# Make this bigger for busy systems
-b 320
​
# Feel free to add below this line. See auditctl man page

要将积压值更改为8192,您可以将-b 320更改为-b 8192并使用以下命令重新启动审计守护程序:

sudo service auditd restart

如果不重新启动守护程序,它仍将在下次服务器重新引导时从配置中设置新值。

文件系统规则

可以在文件和目录上设置文件系统监视。我们还可以指定要监视的访问类型。文件系统规则的语法是:

auditctl -w path_to_file -p permissions -k key_name

path_to_file是被审计的文件或目录。permissions是记录的权限。该值可以是r(读取),w(写入),x(执行)和 a(属性更改)中的一个或组合。key_name是一个可选字符串,可帮助您识别生成特定日志条目的规则。

我们来看一些例子。

sudo auditctl -w /etc/hosts -p wa -k hosts_file_change

上述规则要求审计系统监视对文件/etc/hosts的任何写访问或属性更改,并使用我们指定的自定义键字符串hosts_file_change将它们记录到审计日志中。

如果您希望将此规则设为永久性,请将其添加到底部的文件/etc/audit/rules.d/audit.rules中,如下所示:

-w /etc/hosts -p wa -k hosts_file_change

要确保成功添加规则,您可以运行:

sudo auditctl -l

如果一切顺利,输出应显示:

LIST_RULES: exit,always watch=/etc/hosts perm=wa key=hosts_file_change

我们还可以将手表添加到目录中。

sudo auditctl -w /etc/sysconfig/ -p rwa -k configaccess

上述规则将向目录/etc/sysconfig及其下的所有文件和目录添加监视,以进行任何读取,写入或属性更改访问。它还将使用自定义密钥configaccess标记日志消息。

添加规则以监视/sbin/modprobe命令的执行(此命令可以从服务器添加/删除内核模块):

sudo auditctl -w /sbin/modprobe -p x -k kernel_modules

注意:您无法将监视表插入顶级目录。这是内核禁止的。也不支持通配符,并会生成警告。

要在审核日志中搜索特定事件,可以使用命令ausearch。例如,要在审核日志中搜索标有configaccess键的所有事件,您可以运行:

sudo ausearch -k configaccess

系统调用规则

通过审核系统调用,您可以远远超出应用程序级别跟踪服务器上的活动。系统调用规则的语法是:

auditctl -a action,filter -S system_call -F field=value -k key_name`

哪里:

  • 在上述命令中将-a替换为-A将在顶部而不是在底部插入该规则。
  • actionfilter指定何时记录某个事件。action可以是alwaysneverfilter指定将哪个内核规则匹配过滤器应用于事件。规则的匹配滤波器可以是下列之一:taskexituser,和excludeaction,filter在大多数情况下将是always,exit,它会告诉auditctl你想退出时审核本系统调用。
  • system_call按名称指定系统调用。可以将多个系统调用分组为一个规则,每个规则在-S选项后指定。也可以使用all这个词。您可以使用该sudo ausyscall --dump命令查看所有系统调用的列表及其编号。
  • field=value 指定其他选项,这些选项可根据指定的体系结构,用户ID,进程ID,路径等修改规则以匹配事件。
  • key_name 是一个可选字符串,可帮助您稍后识别生成特定日志条目的规则或一组规则。

现在让我们看一些示例系统调用规则。

要定义一个审计规则,该规则创建一个标记的日志条目rename,每次ID为1000或更大的用户重命名文件时,请运行:

sudo auditctl -a always,exit -F arch=b64 -F "auid>=1000" -S rename -S renameat -k rename

-F arch=b64说审计的规则系统调用的64位版本。

要定义记录特定用户(使用UID 1001)访问的文件的规则,并使用userfileaccess标记日志条目:

sudo auditctl -a always,exit -F arch=b64 -F auid=1001 -S open -k userfileaccess

如果您希望将此规则设为永久性,请将其添加到底部的文件/etc/audit/rules.d/audit.rules中,如下所示:

-a always,exit -F arch=b64 -F auid=1001 -S open -k userfileaccess

您还可以使用系统调用规则语法定义文件系统规则。例如,以下规则:

sudo auditctl -a always,exit -F path=/etc/hosts -F perm=wa -k hosts_file_change

与我们在前面部分中看到的文件系统规则完成相同的工作:

sudo auditctl -w /etc/hosts -p wa -k hosts_file_change

要使用系统调用规则递归查看目录,可以使用-F "dir=/path/to/dir"选项。

注:请注意,所有进程早于审计守护程序本身将有4294967295auid。要从规则中排除这些规则,您可以添加-F "auid!=4294967295"到规则。要避免此问题,可以添加audit=1到内核引导参数。这使得内核审计系统即使在审计守护程序启动之前也可以启动,并且所有进程都具有正确的登录uid。

删除审核规则

要删除所有当前审核规则,可以使用auditctl -D命令。要用-w选项删除使用添加的文件系统监视规则,您可以在原规则中替换-w-W。使用选项添加系统调用规则-a或者-A可以使用-d原始规则的选项删除系统调用规则。例如,假设我们添加了以下规则:

sudo auditctl -w /etc/passwd -p wa -k passwdaccess

使用以下方法查看规则集:

sudo auditctl -l

输出应包括:

LIST_RULES: exit,always watch=/etc/passwd perm=wa key=passwdaccess

要删除此规则,我们可以使用以下命令,只需替换-w-W

sudo auditctl -W /etc/passwd -p wa -k passwdaccess

现在,使用以下方法查看规则集:

sudo auditctl -l

该规则现在不应该在列表中。

注意:如果audit.rules文件中添加了永久性审计规则,则审计守护程序重新启动或系统重新引导将从文件中加载所有规则。要永久删除审核规则,您需要从文件中删除它们。

锁定审计规则

可以使用auditctl -e [0 1 2]禁用或启用审计系统并使用锁定审计规则。例如,要暂时禁用审核,请运行:

auditctl -e 0

1作为参数传递时,它将启用审计。要锁定审计配置以使其无法更改,请将2作为参数传递。这使得当前的审计规则集不可变。无法再添加,删除或编辑规则,也无法再停止审计守护程序。对于希望此功能处于活动状态的任何人来说,锁定配置是audit.rules中的最后一个命令。将审核并拒绝任何在此模式下更改配置的尝试。只能通过重新引导服务器来更改配置。

结论

Linux审核系统提供的信息对于入侵检测非常有用。您现在应该能够添加自定义审核规则,以便您可以记录特定事件。以上都可以通过man auditctl 来查看命令文档翻译得来

CentOS 7上编写自定义系统审计规则的更多相关文章

  1. 在Centos 7上安装配置 Apche Kafka 分布式消息系统集群

    Apache Kafka是一种颇受欢迎的分布式消息代理系统,旨在有效地处理大量的实时数据.Kafka集群不仅具有高度可扩展性和容错性,而且与其他消息代理(如ActiveMQ和RabbitMQ)相比,还 ...

  2. CentOS 7上源码编译安装和配置LNMP Web+phpMyAdmin服务器环境

    CentOS 7上源码编译安装和配置LNMP Web+phpMyAdmin服务器环境 什么是LNMP? LNMP(别名LEMP)是指由Linux, Nginx, MySQL/MariaDB, PHP/ ...

  3. ABP开发框架前后端开发系列---(7)系统审计日志和登录日志的管理

    我们了解ABP框架内部自动记录审计日志和登录日志的,但是这些信息只是在相关的内部接口里面进行记录,并没有一个管理界面供我们了解,但是其系统数据库记录了这些数据信息,我们可以为它们设计一个查看和导出这些 ...

  4. 四十六.系统审计 服务安全 Linux安全之打补丁

    192.168.4.51   1.部署audit监控文件 使用audit监控/etc/ssh/sshd_config 当该文件发生任何变化即记录日志 通过手动和ausearch工具查看日志内容   1 ...

  5. CentOS 7上的进程管理

    一些杂乱的基础概念 程序是一种静态的文件,躺在磁盘上.而进程则是将程序运行起来放置于内存中.因此进程就是运行中的程序,是程序运行起来的一个实例.同一个程序可以运行为多个进程/实例. 进程之间有父子关系 ...

  6. CentOS 7上的程序管理:rpm、yum和源码编译安装

    简介 在Linux的早期时代(也许吧?我猜的.也可能是Unix.),想要在系统上安装一款应用程序,是比较复杂的.需要专业的人员自行获取程序的源代码,并且编译安装,这是非常的复杂且需要一定的专业功底的, ...

  7. 如何编写snort的检测规则

    如何编写snort的检测规则 2013年09月08日 ⁄ 综合 ⁄ 共 16976字 前言 snort是一个强大的轻量级的网络入侵检测系统.它具有实时数据流量分析和日志IP网络数据包的能力,能够进行协 ...

  8. 在 CentOS 8 上使用 FirewallD 设置防火墙

    简介 一个 Linux 防火墙可用于保护您的工作站或服务器免受不需要的流量干扰.您可以设置规则来阻止或允许流量通过.CentOS 8 带有一个动态的.可定制的基于主机的防火墙和一个 D-Bus 接口. ...

  9. 如何在CentOS 7上安装Percona服务器

    在这篇文章中我们将了解关于 Percona 服务器,一个开源的MySQL,MariaDB的替代品.InnoDB的数据库引擎使得Percona 服务器非常有吸引力,如果你需要的高性能,高可靠性和高性价比 ...

随机推荐

  1. netty源码解解析(4.0)-19 ChannelHandler: codec--常用编解码实现

    数据包编解码过程中主要的工作就是:在编码过程中进行序列化,在解码过程中从Byte流中分离出数据包然后反序列化.在MessageToByteEncoder中,已经解决了序列化之后的问题,ByteToMe ...

  2. Leetcode之回溯法专题-22. 括号生成(Generate Parentheses)

    Leetcode之回溯法专题-22. 括号生成(Generate Parentheses) 给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合. 例如,给出 n ...

  3. MSIL实用指南-数据类型转换

    一.类的强制转换1.转换成某个类用Castclass指令.实例代码:ilGenerator.Emit( OpCodes.Castclass , typeof(ClassA) ); 2.转换成某个值类型 ...

  4. 【Leetcode】【简单】【189. 旋转数组】【JavaScript】

    189. 旋转数组 给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数. 示例 1: 输入: [1,2,3,4,5,6,7] 和 k = 3输出: [5,6,7,1,2,3,4]解释 ...

  5. Python AttributeError: 'Module' object has no attribute 'STARTF_USESHOWINDOW'

    夫学须志也,才须学也,非学无以广才,非志无以成学.--诸葛亮 生活有度,自得慈铭 --杜锦阳 今天新来的同事安装环境遇到个莫名其妙的问题: AttributeError: 'Module' objec ...

  6. 为什么有了Compose和Swarm,还会有Kubernetes的出现?

    一.k8s设计思想更先进 k8s的主要设置思想,是从更宏观的角度,以统一的方式来定义任务之间的各种关系 1.k8s的核心功能图 2.k8s的全局架构图 kube-apiserver:API服务 Kub ...

  7. P2154 [SDOI2009]虔诚的墓主人 树状数组

    https://www.luogu.org/problemnew/show/P2154 题意 在一个坐标系中,有w(1e5)个点,这个图中空点的权值是正上,正下,正左,正右各取k个的排列组合情况.计算 ...

  8. bzoj 1146 网络管理Network (CDQ 整体二分 + 树刨)

    题目传送门 题意:求树上路径可修改的第k大值是多少. 题解:CDQ整体二分+树刨. 每一个位置上的数都会有一段持续区间 根据CDQ拆的思维,可以将这个数拆成出现的时间点和消失的时间点. 然后通过整体二 ...

  9. H5 的 sessionStorage和localStorage

    1) H5 新增的 sessionStorage 和 localStorage 的区别 sessionStorage 和 java 的 session 差不多,可以短时间存储信息,电脑浏览器常用ses ...

  10. Python连载37-多进程、进程子类、进程父子id

    一.线程替代方案 1.subprocess (1)完全跳过线程,使用进程 (2)是派生进程的主要替代方案 (3)python2.4后引入 2.multiprocessing (1)使用threadin ...