首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >如何在CentOS 7上编写自定义系统审计规则

如何在CentOS 7上编写自定义系统审计规则

原创
作者头像
小皇帝James
修改于 2018-10-29 09:23:12
修改于 2018-10-29 09:23:12
4.4K00
代码可运行
举报
运行总次数:0
代码可运行

介绍

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

在本教程中,我们将讨论不同类型的审核规则以及如何在服务器上添加或删除自定义规则。

准备

在开始学习本教程之前,您应该具备以下条件:

  • CentOS 7 腾讯云CVM(与CentOS 6配合使用)
  • 具有sudo权限的非root用户。所有命令都将以此用户身份运行。
  • 对Linux审计系统的基本了解。

没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后再购买服务器

查看审核规则

您可以使用auditctl -l命令查看当前的审核规则集。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo auditctl -l

如果不存在则不显示任何规则(这是默认值):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
No rules

在本教程中添加规则时,可以使用此命令验证是否已添加规则。

可以使用以下方式查看审计系统的当前状态:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo auditctl -s

输出将类似于:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
AUDIT_STATUS: enabled=1 flag=1 pid=9736 rate_limit=0 backlog_limit=320 lost=0 backlog=0

enabled=1值显示在此服务器上启用了审核。pid值是审计守护程序的进程号。pid为0表示审计守护程序未运行。lost条目将告诉您由于内核审计队列溢出而丢弃了多少事件记录。backlog字段显示当前有多少事件记录排队等待auditd读取它们。我们将在本教程的下一部分讨论其余的输出字段。

添加审计规则

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

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

审计规则有三种类型:

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

控制规则

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

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
AUDIT_STATUS: enabled=1 flag=1 pid=9736 rate_limit=0 backlog_limit=320 lost=0 backlog=0

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo auditctl -b 1024

输出将显示状态:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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命令本身。将忽略散列符号(#)后面的任何空行或任何文本。默认规则文件如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 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并使用以下命令重新启动审计守护程序:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo service auditd restart

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

文件系统规则

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
auditctl -w path_to_file -p permissions -k key_name

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

我们来看一些例子。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo auditctl -w /etc/hosts -p wa -k hosts_file_change

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
-w /etc/hosts -p wa -k hosts_file_change

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo auditctl -l

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
LIST_RULES: exit,always watch=/etc/hosts perm=wa key=hosts_file_change

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo auditctl -w /etc/sysconfig/ -p rwa -k configaccess

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo auditctl -w /sbin/modprobe -p x -k kernel_modules

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo ausearch -k configaccess

系统调用规则

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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或更大的用户重命名文件时,请运行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo auditctl -a always,exit -F arch=b64 -F "auid>=1000" -S rename -S renameat -k rename

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo auditctl -a always,exit -F arch=b64 -F auid=1001 -S open -k userfileaccess

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
-a always,exit -F arch=b64 -F auid=1001 -S open -k userfileaccess

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo auditctl -a always,exit -F path=/etc/hosts -F perm=wa -k hosts_file_change

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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原始规则的选项删除系统调用规则。例如,假设我们添加了以下规则:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo auditctl -w /etc/passwd -p wa -k passwdaccess

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo auditctl -l

输出应包括:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
LIST_RULES: exit,always watch=/etc/passwd perm=wa key=passwdaccess

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo auditctl -W /etc/passwd -p wa -k passwdaccess

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo auditctl -l

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

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

锁定审计规则

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
auditctl -e 0

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

结论

Linux审核系统提供的信息对于入侵检测非常有用。您现在应该能够添加自定义审核规则,以便您可以记录特定事件。

请记住,在添加自定义日志记录规则时,您始终可以参考auditctl手册页。它提供了命令行选项,性能提示和示例的完整列表。/usr/share/doc/audit-<version>/目录包含具有基于某些通用认证标准的预配置审核规则的文件。

想要了解更多关于编写自定义系统审计规则的相关教程,请前往腾讯云+社区学习更多知识。


参考文献:《How To Write Custom System Audit Rules on CentOS 7》

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
系统操作审计查看
描述: auditd是Linux审计系统的用户空间组件, 该守护进程它负责将审计记录写入磁盘,我们可以使用 ausearch 或 aureport 实用程序查看日志。 与此同时,我们可以使用 auditctl 实用程序配置审计系统或加载规则,在 auditd 启动期间审计规则 /etc/audit/audit.rules,由 auditctl 读取并加载到内核中或者还有一个 augenrules 程序,它读取位于 /etc/audit/rules.d/ 中的规则并将它们编译成一个 audit.rules 文件。
全栈工程师修炼指南
2022/09/28
1.7K0
如何在CentOS 7上使用Linux审计系统
在Linux审核系统可以帮助系统管理员创建一个审计跟踪,日志服务器上的每一个动作。我们可以通过检查审计日志文件来跟踪与安全相关的事件,将事件记录在日志文件中,以及检测滥用或未授权的活动。我们可以选择要监视服务器上的哪些操作以及监视的程度。审计不会为您的系统提供额外的安全性,而是有助于跟踪任何违反系统策略的行为,并使您能够采取其他安全措施来防止这些行为。
何处惹尘埃
2018/10/29
7.5K0
Linux 命令 | 每日一学,Audit 安全审计相关工具
描述: Linux 审计系统提供了一种方式来跟踪系统上与安全相关的信息。根据预配置的规则,审计会生成日志条目,来尽可能多地记录系统上所发生的事件的相关信息。对于关键任务环境而言至关重要,可用来确定安全策略的违反者及其所执行的操作。审计不会为您的系统提供额外的安全,而是用于发现系统上使用的安全策略的违规。可以通过其他安全措施(如 SELinux)进一步防止这些违规。
全栈工程师修炼指南
2024/04/10
2.2K0
Linux 命令 | 每日一学,Audit 安全审计相关工具
Centos8 使用auditd配置系统审计
审计配置文件 /etc/audit/auditd.conf。该文件包含更改 auditd 守护程序行为的默认参数。
用户9239730
2021/11/30
1.2K0
Auditd - Linux 服务器安全审计工具
安全防护是首先要考虑的问题。为了避免别人盗取我们的数据,我们需要时刻关注它。安全防护包括很多东西,审计是其中之一。 我们知道Linux系统上有一个叫 auditd 的审计工具。这个工具在大多数Linu
小小科
2018/05/03
3.7K0
Auditd - Linux 服务器安全审计工具
等保测评2.0之Centos安全审计
在进行等级保护测评时,需要检查主机的安全审计功能,这里就以等级保护2.0来说一说centos6在这方面的检测,以下是安全计算环境的安全审计控制点中的测评项。
FB客服
2019/08/21
4K0
如何在Ubuntu 16.04上使用Docker Bench对Docker主机进行安全性审核
使用Docker来容纳您的应用程序和服务可以为您提供开始即用的一些安全优势,但默认的Docker安装仍然有一些空间可用于一些与安全相关的配置改进。在互联网安全中心为了促进互联网安全创造了一个按步骤确保docker安全的清单。随后,Docker团队发布了一个安全审计工具- Docker Bench for Security,在Docker主机上运行此清单并记录它发现的任何问题。
挺问中原
2018/07/24
1.3K0
centos 日志审计_CentOS7 – 审计日志[通俗易懂]
/etc/audit/rules.d/ : 规则子目录,可以直接在这里面添加.rules文件生效配置
全栈程序员站长
2022/08/31
3.5K0
安全审计配置问题:安全审计配置错误,导致审计数据不准确
是山河呀
2025/02/09
4860
CentOS7下安全审计工具Auditd的简单使用
在auditd启动期间,/etc/audit/audit.rules 中的审计规则由auditctl读取并加载到内核中。
yuanfan2012
2020/07/01
9.9K0
审计 Linux 系统的操作行为的 5 种方案对比
很多时候我们为了安全审计或者故障跟踪排错,可能会记录分析主机系统的操作行为。比如在系统中新增了一个用户,修改了一个文件名,或者执行了一些命令等等,理论上记录的越详细, 越有利于审计和排错的目的。不过过剩的记录也会为分析带来不少麻烦, 尤其是将很多主机的记录行为发送到固定的远程主机中,数据越多,分析的成本便越大。
民工哥
2021/01/12
1.8K0
审计 Linux 系统的操作行为的 5 种方案对比
安全审计问题:安全审计工具使用不当,导致审计数据不准确
示例:编辑 /etc/logrotate.d/audit 文件,设置日志轮转策略:
是山河呀
2025/02/06
5070
ubuntu密码设置规则_密码复杂性策略
将默认配置注释掉,添加一行新的配置,默认的配置为允许root登录,但是禁止root用密码登录
全栈程序员站长
2022/11/10
4.1K0
ubuntu密码设置规则_密码复杂性策略
Linux报错audit: backlog limit exceeded
Linux ssh连接不上,能ping通,登录界面报错提示 audit: backlog limit exceeded
OwenZhang
2022/01/05
3.2K0
Linux报错audit: backlog limit exceeded
腾讯云主机安全【等保三级】CentOS7安全基线检查策略
梳理了(Copy+C/Copy+V)一下腾讯云主机安全——【等保三级】CentOS7安全基线检查策略
yuanfan2012
2021/07/10
2.5K0
腾讯云主机安全【等保三级】CentOS7安全基线检查策略
Rocky Linux 9 系统初始化与安全加固脚本
在服务器运维与系统管理的实际场景中,一个安全、稳定、标准化的系统环境至关重要。Rocky Linux 作为一款企业级稳定发行版,越来越多地被用于生产环境部署。为节省重复配置的时间、降低人为操作失误率,同时提升系统的安全性,编写一套系统初始化与安全加固脚本显得尤为必要。
星哥玩云
2025/07/10
1240
Rocky Linux 9 系统初始化与安全加固脚本
Docker安全检查(三)
0.不要使用特权容器 描述 使用--privileged标志将所有Linux内核功能赋予容器,从而覆盖--cap-add和--cap-drop标志。 确保不使用它。 --privileged标志为容器提供了所有功能,并且还解除了设备cgroup控制器强制执行的所有限制。 换句话说,容器可以完成主机可以做的几乎所有事情。 存在此标志是为了允许特殊用例,例如在Docker中运行Docker
陈不成i
2021/07/02
1.1K0
如何使用Ubuntu 16.04上的osquery监视系统安全性
osquery是一个安全开源工具,它采用操作系统并将其转换为一个巨大的数据库,使用可以使用类似SQL的语句进行查询的表。通过这些查询,您可以监控文件完整性,检查防火墙的状态和配置,执行目标服务器的安全审核等。
葡萄
2018/07/30
3.4K0
CentOS系统安全配置防御维度
CentOS 系统安全配置的主要意图是构建一个防御性架构,通过多层次防护措施降低系统被攻击的风险,确保数据和服务的安全性、完整性和可用性。具体意图可分为以下核心方面:
ICT系统集成阿祥
2025/07/14
700
CentOS系统安全配置防御维度
云主机 CentOS backlog limit exceeded 无法连接
云主机无法ssh及ping通,端口开启。VNC中有大量“backlog limit exceeded”的提示
Ronald-Leung
2020/07/07
6.2K0
推荐阅读
相关推荐
系统操作审计查看
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档