linux监控文件操作行为

linux监控文件操作行为

使用 auditd 系统

auditd 是Linux系统的一个安全和审计系统,它能够跟踪系统上发生的安全相关事件。要使用 auditd 来监控文件,你需要首先确保 auditd 已经安装并且运行在你的系统上。

然后,你可以使用 auditctl 命令来添加监控规则:

sudo auditctl -w /path/to/your/file -p warx -k your-key
#-w 指定要监控的文件路径。
#-p 设置权限过滤,warx 分别代表写入(w)、属性更改(a)、读取(r)和执行(x)。
#-k 设置一个关键词,以便于后续通过这个关键词来搜索和过滤审计日志。

之后,你可以通过 ausearch 或 aureport 命令来查询和报告这个文件的审计日志:

sudo ausearch -k your-key 

操作步骤

安装启动

确保 auditd 已安装并运行。

首先,确保你的系统上已经安装了 auditd。可以通过运行以下命令来检查 auditd 服务的状态:

sudo systemctl status auditd

如果服务未运行,使用以下命令启动并设置为开机启动:

sudo systemctl start auditd
sudo systemctl enable auditd
配置监控规则

需要添加监控规则来跟踪对 /etc/pam.d/common-A 和 /etc/lightdm/lightdm-B 文件的更改。由于系统重启后之前使用 auditctl 命令添加的规则不会保留,因此你需要将这些规则添加到配置文件中。

编辑 /etc/audit/rules.d/audit.rules 文件(或者如果这个文件不存在,可能需要编辑 /etc/audit/audit.rules),然后添加以下行:

-w /etc/pam.d/common-A -p wa -k auth-change
-w /etc/lightdm/lightdm-B -p wa -k autologin-change

-w 指定要监控的文件路径,-p wa 指定监控写入(w)和属性(a)更改,-k 后面跟随的是一个自定义的关键字,用于之后过滤和搜索审计日志。

应用并重启 auditd

修改配置文件后,重启 auditd 服务以应用新的监控规则:

sudo systemctl restart auditd

不想重启服务,可以使用 auditctl 工具加载新规则

sudo auditctl -R /etc/audit/rules.d/audit.rules

编辑的是 /etc/audit/audit.rules 文件

sudo auditctl -R /etc/audit/audit.rules
检查审计日志

在系统重启并且文件可能发生变化后,使用以下命令来检查相关的审计日志:

sudo ausearch -k auth-change
sudo ausearch -k autologin-change

命令解释

-w /etc/pam.d/common-A -p wa -k auth-change
-w /etc/lightdm/lightdm-B -p wa -k autologin-change

第一行:监控 /etc/pam.d/common-A 文件的更改
-w /etc/pam.d/common-A:这部分指定了要监控的文件路径,即 /etc/pam.d/common-A。-w 参数用于指定监控哪个文件或目录。

-p wa:这部分指定了要监控的操作类型。-p 参数后面跟着的是一系列标志,代表不同类型的操作:

w 代表写入操作,即当文件被修改时。
a 代表属性更改,即当文件的元数据(如权限、所有权等)被修改时。
-k auth-change:这部分为当前的监控规则指定了一个关键词(key),即 auth-change。在审计日志中,可以通过这个关键词来过滤和搜索与此规则相关的事件。

第二行:监控 /etc/lightdm/lightdm-B 文件的更改
-w /etc/lightdm/lightdm-B:指定了另一个要监控的文件路径,即 /etc/lightdm/lightdm-B。同样使用 -w 参数。

-p wa:与第一行相同,指定了要监控的操作类型为写入和属性更改。

-k autologin-change:为这个监控规则指定了一个不同的关键词,即 autologin-change。这允许你在审计日志中区分由于不同规则触发的事件。

总结
通过添加这些规则到 auditd 的配置中,系统会监控 /etc/pam.d/common-A 和 /etc/lightdm/lightdm-B 这两个文件的写入和属性更改操作。任何对这些文件进行的修改都会被记录下来,并且可以通过指定的关键词来检索相关的审计日志记录。这对于跟踪系统配置更改、增强安全性和排查问题非常有用。

关键词(key)的定义

关键词(key)在这个上下文中是完全自定义的。当你使用 -k 参数在 auditd 规则中指定一个关键词时,这个关键词用于标记和识别与该规则相关的审计事件。

这意味着你可以使用任何有意义的字符串作为关键词,以便于后续在审计日志中快速过滤和查找相关事件。

在提供的例子中:

-k auth-change 中的 auth-change 是一个自定义关键词,用于标识和过滤与 /etc/pam.d/common-auth 文件更改相关的审计事件。
-k autologin-change 中的 autologin-change 是另一个自定义关键词,用于标识和过滤与 /etc/lightdm/lightdm-autologin 文件更改相关的审计事件。
选择关键词时,建议使用既简洁又能准确描述监控规则目的的字符串。

问题处理

root@greatwall-pc:/home/greatwall# sudo ausearch -k auth-change
<no matches>
root@greatwall-pc:/home/greatwall# sudo ausearch -k autologin-changec
<no matches>

可能有几个原因:

  1. 尚未发生任何匹配的事件
    如果您刚刚设置了审计规则,而且 /etc/pam.d/common-auth 或 /etc/lightdm/lightdm-autologin 文件尚未发生任何被监控的更改(如写入或属性更改),那么审计日志中自然不会有匹配的记录。

  2. 审计规则未正确加载或应用
    可能是由于审计规则没有被正确添加到 /etc/audit/audit.rules 或 /etc/audit/rules.d/ 目录下的文件中,或者添加后没有重启 auditd 服务来应用新规则。请确保按照以下步骤操作:

将监控规则正确添加到配置文件中。
使用命令 sudo systemctl restart auditd 重启 auditd 服务。
3. 错误的关键词
请确认在使用 ausearch 命令时输入的关键词与您添加到审计规则中的关键词完全一致。在你提供的命令中,第二个命令末尾出现了拼写错误(autologin-changecno matches> 应为 autologin-change)。请确保使用正确的关键词执行搜索。

  1. 审计日志被旋转或清理
    如果系统的审计日志被旋转(即新的日志文件被创建,旧的日志文件被移动、压缩或删除)或者手动清理,可能会导致之前的记录丢失。可以检查 /var/log/audit/ 目录下是否有旧的审计日志文件存在。

解决步骤
确认文件是否有过更改尝试,可以手动修改一下被监控的文件,以触发审计事件。
检查并确认审计规则是否已正确加载,可以使用 sudo auditctl -l 查看当前加载的规则。
确保使用正确且一致的关键词进行搜索。
检查 /var/log/audit/ 目录下是否有相关的审计日志文件。

结果示例分析

//记录了一个假设的事件,其中某个进程尝试修改 /etc/ssh/sshd_config 文件
time->Tue Apr 16 15:30:22 2024
type=PROCTITLE msg=audit(1713270622.123:495): proctitle=2F7573722F62696E2F7669202F6574632F7373682F737368645F636F6E666967
type=PATH msg=audit(1713270622.123:495): item=1 name="/etc/ssh/sshd_config" inode=1052773 dev=08:02 mode=0100600 ouid=0 ogid=0 rdev=00:00 nametype=NORMAL cap_fp=0 cap_fi=0 cap_fe=0 cap_fver=0 cap_frootid=0
type=PATH msg=audit(1713270622.123:495): item=0 name="/etc/ssh/" inode=1052672 dev=08:02 mode=040755 ouid=0 ogid=0 rdev=00:00 nametype=PARENT cap_fp=0 cap_fi=0 cap_fe=0 cap_fver=0 cap_frootid=0
type=CWD msg=audit(1713270622.123:495): cwd="/home/user"
type=SYSCALL msg=audit(1713270622.123:495): arch=c000003e syscall=257 success=yes exit=3 a0=ffffff9c a1=7ffe01b3f110 a2=241 a3=1b6 items=2 ppid=2891 pid=2892 auid=1000 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=(none) ses=4 comm="vi" exe="/usr/bin/vi" key="sshd-config-change"

时间戳

  • time->Tue Apr 16 15:30:22 2024: 事件发生的时间是 2024 年 4 月 16 日,15:30:22。

进程标题 (PROCTITLE)

  • proctitle=…: 这是进程标题的十六进制表示,解码后为 /usr/bin/vi /etc/ssh/sshd_config。这意味着有一个进程启动了 vi 编辑器来编辑 /etc/ssh/sshd_config 文件。

路径 (PATH)

  • item=1 指向被修改的文件 /etc/ssh/sshd_config。文件的 inode、设备号、文件权限(0600 表示仅所有者有读写权限)、所有者和组 ID 都被记录下来。
  • item=0 指向父目录 /etc/ssh/,并记录了该目录的相关信息。

当前工作目录 (CWD)

  • cwd=“/home/user”: 在执行相关操作时,进程的当前工作目录是 /home/user。

系统调用 (SYSCALL)
这部分提供了系统调用的详细信息:

  • syscall=257: 表示执行的系统调用编号为 257,这通常与文件操作有关(例如 openat 在某些平台上)。
  • success=yes: 表示系统调用执行成功。
  • exit=3: 系统调用的返回值。
  • a0=…, a1=…, a2=…, a3=…: 这些是系统调用的参数。
  • ppid=2891, pid=2892: 表示父进程 ID 为 2891,当前进程 ID 为 2892。
  • auid=1000: 审计用户 ID(启动进程的用户)为 1000。
  • uid=0, gid=0, euid=0, suid=0, fsuid=0, egid=0, sgid=0, fsgid=0: 这些字段显示进程以 root 用户(UID 和 GID 均为 0)的权限执行。
  • tty=(none), ses=4: 没有使用终端(tty),会话 ID 为 4。
  • comm=“vi”: 命令名称为 vi。
  • exe=“/usr/bin/vi”: 执行的程序路径为 /usr/bin/vi。
  • key=“sshd-config-change”: 这个事件被标记为 sshd-config-change,这是在设置审计规则时指定的关键词,用于过滤和识别与 SSHD 配置更改相关的审计事件。

使用 inotifywait 命令

fanotify 是 Linux 内核中用于文件系统监控的一个特性,它允许程序监听文件系统事件,如文件的打开、关闭等。与 inotify 相比,fanotify 提供了对整个文件系统或单个挂载点的监控能力,而不仅仅是单个文件或目录。这使得 fanotify 非常适合实现如病毒扫描、数据备份等需要广泛文件系统访问的应用。然而,直接使用 fanotify 进行某个特定文件或进程的监控相对复杂,因为它设计的初衷是对文件系统级别的事件进行监控。

inotifywait 是 inotify-tools 工具集中的一个命令,它可以用来监视文件系统事件。通过使用 inotifywait,你可以监控文件或目录的变化事件。

首先需要安装 inotify-tools:

sudo apt-get install inotify-tools  # Debian/Ubuntu
sudo yum install inotify-tools      # CentOS/RHEL

然后,使用下面的命令来监控对某个文件的操作:

inotifywait -m /path/to/your/file
#-m 参数表示持续监控模式。

这将会显示所有对该文件的操作事件,但注意这不会直接显示哪个进程进行了操作。

使用 fanotify

fanotify 是一个较新的Linux内核功能,用于监控文件系统事件。它类似于 inotify,但提供了一些额外的功能和更大的灵活性。使用 fanotify 需要编写特定的程序代码来利用其API。

使用 fanotify 的基本步骤

要使用 fanotify 来实现对某个文件或进程的监控,你需要编写一个 C 程序,因为 Linux 中的 fanotify 接口是通过系统调用提供给用户空间的。

以下是使用 fanotify 的基本步骤:

  1. 初始化 fanotify: 通过调用 fanotify_init 函数来初始化一个 fanotify 实例。这个调用会返回一个文件描述符,用于后续的所有 fanotify 操作。

  2. 标记(Mark)监控的文件或目录: 使用 fanotify_mark 函数来指定你想要监控的文件系统对象(如整个挂载点或特定路径)。你可以指定对哪些事件感兴趣,比如文件被访问(FAN_ACCESS)、文件被修改(FAN_MODIFY)等。

  3. 读取事件: 使用 read 系统调用来读取 fanotify 文件描述符,获取发生的事件。每个事件都会以 fanotify_event_metadata 结构返回,从中你可以获取到事件的详细信息,包括被操作文件的路径。

  4. 处理事件: 根据读取到的事件信息进行相应的处理。例如,你可以记录下哪些进程访问了监控的文件。

  5. 关闭 fanotify 实例: 使用完毕后,通过关闭文件描述符来结束 fanotify 会话。

示例代码

以下是一个简单的 fanotify 示例代码片段,展示了如何初始化 fanotify,并监控整个文件系统的写入操作

#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys/fanotify.h>
#include <limits.h>
#include <unistd.h>int main(void) {int fd;fd = fanotify_init(FAN_CLOEXEC | FAN_CLASS_CONTENT, O_RDONLY);if (fd < 0) {perror("fanotify_init");exit(EXIT_FAILURE);}if (fanotify_mark(fd, FAN_MARK_ADD | FAN_MARK_MOUNT,FAN_MODIFY, AT_FDCWD, "/") < 0) {perror("fanotify_mark");exit(EXIT_FAILURE);}// 这里需要添加代码来读取和处理事件// ...close(fd);return 0;
}

展示了如何设置 fanotify 来监控根目录 (“/”) 下所有挂载点的修改操作。

在实际使用中,你需要根据自己的需求来调整监听的路径和事件类型,并添加逻辑来读取和处理事件数据。

选择方法

如果需要详细的审计跟踪(包括哪个用户、哪个进程),推荐使用 auditd。
如果只需要简单地监视文件或目录变化,inotifywait 是一个简单易用的选择。
对于需要高级功能和灵活性的场景,可能需要考虑使用 fanotify 并自行编写程序。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/818387.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MES管理系统中生产物料管理的设计

在数字化工厂建设的浪潮中&#xff0c;MES管理系统作为执行层的核心管理系统&#xff0c;其重要性日益凸显。特别是在生产物料管理方面&#xff0c;MES管理系统不仅承担物料计划指令的接收&#xff0c;还负责物料派工及使用反馈的数据收集&#xff0c;其业务流程的设计对数字化…

【AI 测试】语言交互模型测评方案

语言交互模型 具体是指那些? 语言交互模型主要指的是用于实现人类与设备之间通过自然语言进行交互的模型。这些模型通常涉及多个关键组件和技术,以理解和生成自然语言,从而实现有效的交互。 具体来说,语言交互模型可以包括以下几个主要部分: 语音识别(ASR):将声学语音…

树莓派点亮双色LED

双色LED灯准确来说叫双基色LED灯,是指模块只能显示2种颜色,一般是红色和绿色,可以有三种状态 :灭,颜色1亮,颜色2亮,根据颜色组合的不同,分为红蓝双色,黄蓝双色,红绿双色等等。 接线:将引脚S(绿色)和中间引脚(红色)连接到Raspberry Pi的GPIO接口上,对Raspberry…

文献速递:深度学习胰腺癌诊断--胰腺肿瘤的全端到端深度学习诊断

Title 题目 Fully end-to-end deep-learning-based diagnosis of pancreatic tumors 胰腺肿瘤的全端到端深度学习诊断 01 文献速递介绍 胰腺癌是最常见的肿瘤之一&#xff0c;预后不良且通常是致命的。没有肿瘤的患者只需要进一步观察&#xff0c;而胰腺肿瘤的诊断需要紧…

Java面试题:解释Java的基本数据类型及其大小和默认值,列举数据类型常见的错误知识点

Java的基本数据类型是Java编程语言中用于存储简单值的类型。这些数据类型包括整数类型、浮点类型、字符类型和布尔类型。下面是对这些基本数据类型的详细解释&#xff0c;包括它们的大小和默认值&#xff0c;以及一些常见的面试中容易出错的知识点。 基本数据类型及其大小和默…

【数据结构与算法】递推

来源&#xff1a;《信息学奥赛一本通》 所谓递推&#xff0c;是指从已知的初始条件出发&#xff0c;依据某种递推关系&#xff0c;逐次推出所要求的各中间结果及最后结果。其中初始条件或是问题本身已经给定&#xff0c;或是通过对问题的分析与化简后确定。 从已知条件出发逐…

计算机网络——应用层(3)电子邮件

电子邮件 1、概述&#xff1a; 电子邮件是使用电子设备交换的邮件及其方法。 优点&#xff1a;使用方便&#xff0c;传递迅速&#xff0c;费用低廉&#xff0c;可传送多种信息 重要标准&#xff1a; 简单邮件发送协议&#xff1a;SMTP互联网文本报文格式通用互联网邮件扩充…

leetcode717-1-bit and 2-bit Characters

题目 有两种特殊字符&#xff1a; 第一种字符可以用一比特 0 表示 第二种字符可以用两比特&#xff08;10 或 11&#xff09;表示 给你一个以 0 结尾的二进制数组 bits &#xff0c;如果最后一个字符必须是一个一比特字符&#xff0c;则返回 true 。 示例 1: 输入: bits [1, …

浏览器工作原理与实践--跨站脚本攻击(XSS):为什么Cookie中有HttpOnly属性

通过上篇文章的介绍&#xff0c;我们知道了同源策略可以隔离各个站点之间的DOM交互、页面数据和网络通信&#xff0c;虽然严格的同源策略会带来更多的安全&#xff0c;但是也束缚了Web。这就需要在安全和自由之间找到一个平衡点&#xff0c;所以我们默认页面中可以引用任意第三…

Linux--主函数的三个参数

主函数的三个参数 1).主函数的三个参数的含义: argc:主函数的参数个数 argv:主函数的参数内容 envp:环境变量; #include <stdio.h> #include <stdlib.h> #include <unistd.h> int main(int argc,char *argv[],char *envp[]) { int i0;printf("argc%d…

web前端框架设计第四课-条件判断与列表渲染

web前端框架设计第四课-条件判断与列表渲染 一.预习笔记 1.条件判断 1-1&#xff1a;v-if指令&#xff1a;根据表达式的值来判断是否输出DOM元素 1-2&#xff1a;template中使用v-if 1-3&#xff1a;v-else 1-4&#xff1a;v-else-if 1-5&#xff1a;v-show&#xff08;不支…

【快捷部署】017_MongoDB(6.0.14)

&#x1f4e3;【快捷部署系列】017期信息 编号选型版本操作系统部署形式部署模式复检时间017MongoDB6.0.14Ubuntu 20.04apt单机2024-04-11 一、快捷部署 #!/bin/bash ################################################################################# # 作者&#xff1a;…

SQL注入sqli_labs靶场第十七题

B站教学视频很详细 【sql注入之sqli-labs系列教程(less11-17)】sqli-labs_33_less17_哔哩哔哩_bilibili 我将SQL语句在页面中显示&#xff0c;以便更深入学习。 1.寻找注入点 修改密码的一个页面。 输入正确的账号密码&#xff0c;可以看到&#xff0c;账号为admin&#xf…

python内置函数dir()、divmod()详解

dir() 函数是 Python 中的一个强大的内置函数&#xff0c;它用于列出指定对象的有效属性和方法。它可以不带参数使用&#xff0c;以列出当前作用域中的名称&#xff0c;或者带一个对象作为参数&#xff0c;以列出该对象的属性和方法。让我们来看看它的用法和示例&#xff1a; …

PHP Storm 2024.1使用

本文讲的是phpstorm 2024.1最新版本激活使用教程&#xff0c;本教程适用于windows操作系统。 1.先去idea官网下载phpstorm包&#xff0c;我这里以2023.2最新版本为例 官网地址&#xff1a;https://www.jetbrains.com/zh-cn/phpstorm/ 2.下载下来后安装&#xff0c;点下一步 …

Qt5 编译oracle数据库驱动

库文件 1、Qt源码目录&#xff1a;D:\Qt5\5.15.2\Src\qtbase\src\plugins\sqldrivers\oci 2、oracle客户端SDK: https://www.oracle.com/database/technologies/instant-client/winx64-64-downloads.html 下载各版本中的如下压缩包&#xff0c;一定要版本相同的 将两个压缩包…

第三十九节 Java Applet基础

applet是一种Java程序。它一般运行在支持Java的Web浏览器内。因为它有完整的Java API支持,所以applet是一个全功能的Java应用程序。 如下所示是独立的Java应用程序和applet程序之间重要的不同&#xff1a; Java中applet类继承了 java.applet.Applet类Applet类没有定义main()&…

使用 git 提交项目到 github

文章推荐&#xff1a;https://zhuanlan.zhihu.com/p/193140870 连接失败&#xff1a;https://zhuanlan.zhihu.com/p/521340971 分支出错&#xff1a;https://blog.csdn.net/gongdamrgao/article/details/115032436

性能升级,INDEMIND机器人AI Kit助力产业再蜕变

随着机器人进入到越来越多的生产生活场景中&#xff0c;作业任务和环境变得更加复杂&#xff0c;机器人需要更精准、更稳定、更智能、更灵敏的自主导航能力。 自主导航技术作为机器人技术的核心&#xff0c;虽然经过了多年发展&#xff0c;取得了长足进步&#xff0c;但在实践…

Vue3---基础5(computed和watch、watchEffect)

computed 计算属性 代码示例 <template><div class"person"><div>姓&#xff1a;<input type"text" v-model"firstName"></div><div>名&#xff1a;<input type"text" v-model"lastName…