Linux土遁术之监测监测进程打开文件

分析问题过程中,追踪进程打开的文件可以在许多不同情况下有用,体现在以下几个方面:

故障排除和调试: 当程序出现问题、崩溃或异常行为时,追踪进程打开的文件可以帮助您找出问题的根本原因。这有助于快速定位错误,尤其是在访问文件时发生的错误。

性能分析和优化: 了解进程打开了哪些文件可以帮助您分析程序的性能问题。如果程序频繁打开和关闭文件,可能会导致性能下降。通过追踪文件操作,您可以识别性能瓶颈,从而采取相应的优化措施。

权限和安全审计: 在安全方面,追踪进程打开的文件可以帮助您监控和审计系统上的文件访问。这有助于检测异常活动、追踪潜在的安全漏洞以及识别潜在的威胁。您可以确保只有授权的进程可以访问特定的文件。

授权和访问控制: 如果您想要确保某些文件只能由特定的进程或用户访问,可以追踪进程打开的文件,并根据需要执行授权和访问控制。

资源使用和泄漏检测: 对于服务器或多租户环境,追踪进程打开的文件可以帮助您监控资源的使用情况。这有助于识别资源泄漏、滥用或不必要的文件操作,以便进行适当的资源管理。

合规性和法律要求: 在一些情况下,您可能需要监控特定进程的文件访问,以满足法律、合规性或监管要求。追踪进程打开的文件可以帮助您确保满足相关要求。

总之,追踪进程打开的文件可以帮助您更好地理解程序的行为,从而更好地管理、优化和保护系统。不同的使用情况可能需要不同的方法和工具来实现这一目标。

在 Linux 中,要追踪进程打开了哪些文件,您可以使用工具来监视系统调用或使用调试工具。以下是一些常用的方法:

strace:
strace 是一个命令行工具,可以跟踪和记录进程的系统调用。您可以使用以下命令来跟踪一个进程的系统调用,并查看它打开了哪些文件:
strace -e open,openat <command>
command>是要执行的命令,-e open,openat 指定要跟踪的系统调用类型。

lsof:
lsof(List Open Files)是一个用于显示打开文件的命令行工具。您可以使用以下命令来查看指定进程打开了哪些文件,命令如下:
lsof -p <pid>
pid是要查询的进程的进程 ID。

使用 ptrace 调试工具:
如果想要更底层的控制,可以使用 ptrace 调试工具来追踪进程的行为。可以编写一个小的调试程序,使用 ptrace 跟踪系统调用并记录 open 系统调用的参数。

以上这些方法都可以帮助追踪进程打开了哪些文件,具体使用哪种方法取决于问题的需求和环境,这里介绍另外一种非侵入式的调试方法,开发一个内核模块,利用内核提供的KPROBE机制探测OPEN系统调用,得到被打开的文件名字,这个方法和PTRACE思想类似,但前者是非侵入式调试,不会影响被探测程序。

模块代码:

#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/kprobes.h>

static char file_name[256];

static int entry_handler(struct kprobe *p, struct pt_regs *regs)
{
	const char __user *filename = (const char __user *)regs->si;
	copy_from_user(file_name, filename, sizeof(file_name));
	file_name[sizeof(file_name) - 1] = '\0';

	if(strstr(file_name, "fkwq")) {
		pr_info("comm %s Open syscall intercepted. File name: %s\n", current->comm, file_name);
	}

	return 0;
}

static struct kprobe kp = {
	.symbol_name = "do_sys_open",
	.pre_handler = entry_handler,
};

static int __init kprobe_init(void)
{
	int ret = register_kprobe(&kp);
	if (ret < 0) {
		pr_err("Failed to register kprobe: %d\n", ret);
		return ret;
	}
	pr_info("Kprobe registered\n");
	return 0;
}

static void __exit kprobe_exit(void)
{
	unregister_kprobe(&kp);
	pr_info("Kprobe unregistered\n");
}

module_init(kprobe_init);
module_exit(kprobe_exit);
MODULE_LICENSE("GPL");

Makefile:

ifneq ($(KERNELRELEASE),)
CFLAGS_seqfile.o:=-I$(src)
obj-m:=probename.o
else
KERNELDIR:=/lib/modules/$(shell uname -r)/build
PWD:=$(shell pwd)
all:
	$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
 
clean:
	rm -rf *.o *.mod.c *.mod.o *.ko *.symvers *.mod .*.cmd *.order
format:
	astyle --options=linux.astyle *.[ch]
endif

测试过程中,监测打开的fkwq.txt文件,程序中对文件名进行了过滤,否则打印文件过多,测试界面会刷屏。

监控modprobe打开的文件路径:/lib/modules/5.4.0-150-generic/kernel/arch/x86/kvm/kvm.ko


结束

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

运维Shell脚本小试牛刀(四): 多层嵌套if...elif...elif....else fi

运维Shell脚本小试牛刀(一) 运维Shell脚本小试牛刀(二) 运维Shell脚本小试牛刀(三)::$(cd $(dirname $0)&#xff1b; pwd)命令详解 运维Shell脚本小试牛刀(四): 多层嵌套if...elif...elif....else fi_蜗牛杨哥的博客-CSDN博客 一&#xff1a; if...elif...elif..else fi多层…

【UniApp开发小程序】小程序私聊页面完善(仿微信带尾巴聊天气泡组件封装、滑至顶端获取历史聊天数据逻辑优化)【后端基于若依管理系统开发】

文章目录 说明仿微信带尾巴聊天气泡组件效果展示组件整体代码气泡主体气泡尾巴 使用 私聊页面滑动到顶部获取历史数据页面整体代码 说明 之前已经在【UniApp开发小程序】私聊功能uniapp界面实现 (买家、卖家 沟通商品信息)【后端基于若依管理系统开发】这篇文章中介绍了私聊页…

跨屏无界 | ZlongGames 携手 Google Play Games 打造无缝游戏体验

一款经典游戏&#xff0c;会在时间的沉淀中被每一代玩家所怀念&#xff0c;经久不衰。对于紫龙游戏来讲&#xff0c;他们就是这样一群怀揣着创作出经典游戏的初心而聚集在一起的团队&#xff0c;致力于研发出被广大玩家喜爱的作品。 从 2015 年团队成立&#xff0c;到 2019 年走…

Shell - 加固系统配置

文章目录 #! /bin/bash # Function:对账户的密码的一些加固 read -p "设置密码最多可多少天不修改&#xff1a;" A read -p "设置密码修改之间最小的天数&#xff1a;" B read -p "设置密码最短的长度&#xff1a;" C read -p "设置密码失效…

matlab 点云的二进制形状描述子

目录 一、功能概述1、算法概述2、主要函数3、参考文献二、代码示例三、结果展示四、参数解析输入参数名称-值对应参数输出参数五、参考链接本文由CSDN点云侠原创,

【python爬虫】—图片爬取

图片爬取 需求分析Python实现 需求分析 从https://pic.netbian.com/4kfengjing/网站爬取图片&#xff0c;并保存 Python实现 获取待爬取网页 def get_htmls(pageslist(range(2, 5))):"""获取待爬取网页"""pages_list []for page in pages:u…

数据库——Redis 没有使用多线程?为什么不使用多线程?

文章目录 Redis6.0 之后为何引入了多线程&#xff1f; 虽然说 Redis 是单线程模型&#xff0c;但是&#xff0c; 实际上&#xff0c;Redis 在 4.0 之后的版本中就已经加入了对多线程的支持。 不过&#xff0c;Redis 4.0 增加的多线程主要是针对一些大键值对的删除操作的命令&a…

怎么用postman连接websocket

点击右侧栏的Collections&#xff0c;然后点击旁边的New&#xff0c;然后点击其中的WebSocket Request,然后输入Url&#xff0c;点击Connection&#xff0c;这里需要注意的是Url不能加上http://&#xff0c;因为这个不是http协议。

alibabacloud的简单使用,nacos配置中心+服务中心。作者直接给自己写的源码

文章目录 依赖关键主要的程序启动文件配置文件bootstrap.yml依赖文件nacos配置中心上的文件截图 启动成功截图参考文档 依赖关键 SpringBoot版本和com.alibaba.cloud版本需要对应&#xff0c;不然会程序会启动失败作者使用的版本 SpringBoot: 2.1.6.RELEASE alibabacloud: 2.…

YOLOv7-tracker 目标追踪 输入视频帧

目录 1 项目安装1.1 环境搭建1.2 项目下载1.3 权重下载1.4 环境安装1.5 上传待检测的视频帧 2 视频帧检测与追踪2.1 检测与追踪2.3 结果 参考项目&#xff1a;https://github.com/JackWoo0831/Yolov7-tracker/tree/master github链接&#xff1a;https://github.com/Whiffe/Yo…

自然语言处理(NLP)是什么?

NLP(自然语言处理) 和 Phoebe Liu 的简介 您有没有和聊天机器人互动过&#xff1f;或者您是否向虚拟助手&#xff0c;例如 Siri、Alexa 或您车上的车载娱乐系统发出过某些请求&#xff1f;您使用过在线翻译吗&#xff1f;我们大多数人都曾与这些人工智能 (AI) 互动过&#xff…

vue naive ui 按钮绑定按键

使用vue (naive ui) 绑定Enter 按键 知识点: 按键绑定Button全局挂载使得message,notification, dialog, loadingBar 等NaiveUI 生效UMD方式使用vue 与 naive ui将vue默认的 分隔符大括号 替换 为 [[ ]] <!DOCTYPE html> <html lang"en"> <head>…

C语言指针进阶(3)

这节我们来总结一下指针和数组面试题。 在这节我们主要用到这样几个知识点&#xff1a; 1.数组名是数组首元素的地址。 但是有两个例外&#xff1a; 2.sizeof(数组名)&#xff0c;这里的数组名表示整个数组&#xff0c;计算的是整个数组的大小&#xff0c;单位是字节。 3.&…

如何在Windows本地快速搭建SFTP文件服务器,并通过端口映射实现公网远程访问

文章目录 1. 搭建SFTP服务器1.1 下载 freesshd服务器软件1.3 启动SFTP服务1.4 添加用户1.5 保存所有配置 2 安装SFTP客户端FileZilla测试2.1 配置一个本地SFTP站点2.2 内网连接测试成功 3 使用cpolar内网穿透3.1 创建SFTP隧道3.2 查看在线隧道列表 4. 使用SFTP客户端&#xff0…

四、MySQL(表操作)如何添加字段?修改表?删除字段?修改表名?删除表?格式化某张表?

1、添加字段 &#xff08;1&#xff09;基础语法&#xff1a; alter table 表名 add 字段名 类型名(长度) [comment注释] [约束]; &#xff08;2&#xff09;示例&#xff1a;添加nickname这个字段 2、修改表 修改表中某个字段的【数据类型】/【数据类型&字段名】 &…

c# - - - 安装.net core sdk

如图&#xff0c;安装的是.Net Core 2.2版本 查看安装成功

【Centos8_配置单节点伪分布式Spark环境】

安装centos8 jdk部署伪分布式spark环境 安装Centos8 环境下的JDK 下载jdk linux版本 下载链接&#xff1a; jdk-8u381-linux-x64.tar.gz 将该文件上传到Centos8 主机 部署配置jdk&#xff08;java8&#xff09; # 解压到指定路径 [lhangtigerkeen Downloads]$ sudo tar …

vite 配置自动补全文件的后缀名

vite 不建议自动补全&#xff0c;文件的后缀名的 const Home ()>import("/views/Home.vue");文件是必须要加上 .vue 的后缀名的 如果 想要像 webpack 一样的不用写&#xff0c; 可以在vite.config.js中配置如下就可以了

UDP通信、本地套接字

#include <sys/types.h> #include <sys/socket > ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,const struct sockaddr *dest_addr, socklen_t addrlen);- 参数&#xff1a;- sockfd : 通信的fd- buf : 要发送的数据- len : 发送数据的长度…

ElasticSearch-集成ik分词器

本文已收录于专栏 《中间件合集》 目录 背景介绍版本选择优势说明集成过程1.下载安装包2.解压安装包3.重启ElasticSearch服务3.1通过ps -ef | grep elastic查看正在启动的es进程号3.2使用kill -9 xxx 杀死进程3.3使用 ./elasticsearch 启动es服务 分词测试细粒度分词方式分词请…