近来学习了下systemtap,忽然想了个问题,怎么在linux下面监控一个用户对那些文件进行操作?准备用它来学习一下内核。
文件操作主要是open,read、write,是不是监控这3个系统调用就可以了?说干就干,上代码。
下面是程序filemon.stp
%{
#include <linux/file.h>
#include <linux/dcache.h>
#include <linux/mount.h>
#include <linux/fs.h>
#include <linux/fdtable.h>
#include <linux/err.h>
%}
probe kernel.function("sys_open"){
if(uid()==$1) /*监控特定用户,$1为命令行传入的参数,数字型格式*/
printf("(%d)execname:(%s)-----openfile:(%s)\n",pid(),execname(),user_string($filename))
}
function fd_to_name:string(fd:long)
%{
struct file *file;
struct files_struct *files;
struct inode *inode;
struct task_struct *task;
const unsigned char *name = NULL;
char *buffer;
buffer = (char*) kmalloc(PATH_MAX,GFP_KERNEL);
if(!buffer)
return ;
task_lock(current);
files = current->files;
if (files)
atomic_inc(&files->count);
task_unlock(current);
if (!files)
return ;
spin_lock(&files->file_lock);
file = fcheck_files(files, (int)STAP_ARG_fd); /*STAP_ARG_fd为systemtap传给嵌入c的参数*/
if (!file)
goto out_unlock;
name = d_path(&(file->f_path), buffer,PATH_MAX);
if (IS_ERR(name)) {
goto out_unlock;
printk("d_path did not work!\n");
}
strlcpy (THIS->__retvalue, name, PATH_MAX);
kfree(buffer);
out_unlock:
spin_unlock(&files->file_lock);
atomic_dec(&files->count);
%}
probe kernel.function("sys_read"){
if(uid()==$1) /*监控特定用户*/
printf("(%d)readfile:%s\n",pid(),fd_to_name($fd));
}
probe kernel.function("sys_write"){
if(uid()==$1)
printf("(%d)writefile:%s\n",pid(),fd_to_name($fd));
}
简单说明:上面这一段嵌入c的代码主要是用d_path将文件描述符fd转换为路径名
用stap -g --vp filemon.stp 501 运行一下,结果如下图
总结一下:要想用好systemtap,得对内核非常熟悉。
相关推荐
SystemTap是一个强大的Linux内核调试工具,它允许开发者和管理员通过编写脚本来监控和分析Linux...通过学习SystemTap,用户可以开发出能够监控和记录系统行为的脚本,这对于性能优化、故障排查和系统开发都非常有帮助。
这个压缩包文件“systemTap英文文档集合.7z”包含了多份关于systemTap的重要参考资料,对于学习和掌握systemTap的使用非常有帮助。 1. **SystemTap Instrumenting the Linux Kernel for Analyzing Performance and ...
《SystemTap初学者指南》是一份详尽的手册,旨在向用户介绍如何使用SystemTap监控Red Hat Enterprise Linux 5中的各种子系统。该指南适合那些具备RHCT(Red Hat Certified Technician)认证水平或者在Red Hat ...
SystemTap是Linux操作系统中的一款强大的动态诊断工具,它允许用户以脚本语言的方式对系统进行监控和调试。在CentOS 7.4.1708这个特定的环境中,SystemTap通过RPM(Red Hat Package Manager)包的形式提供,使得用户...
Elfutils库被广泛用于其他开发工具,如GDB(GNU调试器)和SystemTap,以解析和操作ELF文件。 **SystemTap与Elfutils的结合** 在SystemTap中,Elfutils的库被用于解析ELF文件,获取符号信息,这在编写SystemTap脚本...
在`tracefs`中,你可以观察到诸如文件创建、打开、读取、写入、关闭、重命名、权限更改等一系列文件操作的过程。这对于理解系统行为、调试应用或者监控系统异常行为来说,都是非常有价值的。例如,如果你发现某个...
操作系统的监控特性非常全面,能够实时监控内存、CPU、网络、IO、进程、文件系统、交换分区等系统资源,以及硬件信息,如磁盘、RAID1、FC控制器和内存MCE异常。监控框架具有高度的可扩展性,允许用户自定义监控脚本...
系统调用表是Linux内核提供给用户空间程序访问内核服务的一个接口,包含了各种基本操作如读写文件、创建新进程等。当enyelkm v1.1注入到系统中,它会找到并修改sys_call_table中的特定条目来实现其隐藏功能。 具体...
这些信息包括但不限于进程或文件创建、网络连接、网络I/O、文件I/O、shell操作、数据库操作、telnet操作、HTTP访问、系统调用(syscall)以及系统资源信息。 #### 二、传统监控技术 ##### 2.1 Linux Kprobes调试...
elfutils-0.148 是一个开源的软件包,广泛应用于...无论是对ELF文件的低级操作,还是高级的系统监控,elfutils都能提供强大的支持。通过深入了解和熟练使用这个包,开发者可以更有效地调试和优化他们的系统和应用程序。
在IT行业中,系统调用是操作系统提供的一种服务接口,允许应用程序与内核进行交互,执行如读写文件、打开文件、网络通信等低级操作。`jprobe` 是一款强大的调试工具,它允许我们对特定的函数或者系统调用添加探点...
elfutils提供了底层支持,使systemtap能够解析ELF文件,识别内核模块和用户空间程序,从而编写出复杂的诊断脚本。例如,通过systemtap,开发者可以轻松地跟踪函数调用、测量性能指标、检查内存使用情况等。 ...
综上所述,文件内容详细介绍了CPython与DTrace和SystemTap集成的细节,包括了如何启用静态标记、如何配置和验证标记,以及如何应用这些工具进行程序监控。此外,还提醒了版本兼容性问题以及如何在不同的操作系统上...
6. **系统调用**:系统调用是用户空间程序与内核交互的主要方式,提供了诸如创建进程、读写文件、网络通信等基本功能。学习Linux内核时,理解这些调用及其背后的实现机制至关重要。 "Sagalinux"这个名称可能指向一...
了解文件操作的内核接口,如打开、读写、关闭文件等。 6. **设备驱动编程**:学习如何编写简单的字符设备和块设备驱动,了解I/O子系统,包括中断处理、DMA(直接存储器访问)、设备树和PCI设备配置等。 7. **网络...