`
xieyj
  • 浏览: 102777 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

systemtap监控用户文件操作

 
阅读更多

        近来学习了下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,得对内核非常熟悉。

  • 大小: 14.9 KB
分享到:
评论

相关推荐

    systemtap beginner

    SystemTap是一个强大的Linux内核调试工具,它允许开发者和管理员通过编写脚本来监控和分析Linux...通过学习SystemTap,用户可以开发出能够监控和记录系统行为的脚本,这对于性能优化、故障排查和系统开发都非常有帮助。

    systemTap英文文档集合.7z

    这个压缩包文件“systemTap英文文档集合.7z”包含了多份关于systemTap的重要参考资料,对于学习和掌握systemTap的使用非常有帮助。 1. **SystemTap Instrumenting the Linux Kernel for Analyzing Performance and ...

    SystemTap_Beginners_Guide.pdf

    《SystemTap初学者指南》是一份详尽的手册,旨在向用户介绍如何使用SystemTap监控Red Hat Enterprise Linux 5中的各种子系统。该指南适合那些具备RHCT(Red Hat Certified Technician)认证水平或者在Red Hat ...

    centos7.4.1708 的systemtap的rpm包及其依赖

    SystemTap是Linux操作系统中的一款强大的动态诊断工具,它允许用户以脚本语言的方式对系统进行监控和调试。在CentOS 7.4.1708这个特定的环境中,SystemTap通过RPM(Red Hat Package Manager)包的形式提供,使得用户...

    systemtap elfutils

    Elfutils库被广泛用于其他开发工具,如GDB(GNU调试器)和SystemTap,以解析和操作ELF文件。 **SystemTap与Elfutils的结合** 在SystemTap中,Elfutils的库被用于解析ELF文件,获取符号信息,这在编写SystemTap脚本...

    tracefs文件系统跟踪

    在`tracefs`中,你可以观察到诸如文件创建、打开、读取、写入、关闭、重命名、权限更改等一系列文件操作的过程。这对于理解系统行为、调试应用或者监控系统异常行为来说,都是非常有价值的。例如,如果你发现某个...

    基于linux的自主可控操作系统word版.doc.pdf

    操作系统的监控特性非常全面,能够实时监控内存、CPU、网络、IO、进程、文件系统、交换分区等系统资源,以及硬件信息,如磁盘、RAID1、FC控制器和内存MCE异常。监控框架具有高度的可扩展性,允许用户自定义监控脚本...

    linux下2.6.32的rootkit,隐藏文件目录

    系统调用表是Linux内核提供给用户空间程序访问内核服务的一个接口,包含了各种基本操作如读写文件、创建新进程等。当enyelkm v1.1注入到系统中,它会找到并修改sys_call_table中的特定条目来实现其隐藏功能。 具体...

    详谈Linux系统之实时监控相关技术.docx

    这些信息包括但不限于进程或文件创建、网络连接、网络I/O、文件I/O、shell操作、数据库操作、telnet操作、HTTP访问、系统调用(syscall)以及系统资源信息。 #### 二、传统监控技术 ##### 2.1 Linux Kprobes调试...

    elfutils-0.148

    elfutils-0.148 是一个开源的软件包,广泛应用于...无论是对ELF文件的低级操作,还是高级的系统监控,elfutils都能提供强大的支持。通过深入了解和熟练使用这个包,开发者可以更有效地调试和优化他们的系统和应用程序。

    test-jprobe.tar.gz_open_site:www.pudn.com

    在IT行业中,系统调用是操作系统提供的一种服务接口,允许应用程序与内核进行交互,执行如读写文件、打开文件、网络通信等低级操作。`jprobe` 是一款强大的调试工具,它允许我们对特定的函数或者系统调用添加探点...

    elfutils-0.152

    elfutils提供了底层支持,使systemtap能够解析ELF文件,识别内核模块和用户空间程序,从而编写出复杂的诊断脚本。例如,通过systemtap,开发者可以轻松地跟踪函数调用、测量性能指标、检查内存使用情况等。 ...

    howto-instrumentation.pdf

    综上所述,文件内容详细介绍了CPython与DTrace和SystemTap集成的细节,包括了如何启用静态标记、如何配置和验证标记,以及如何应用这些工具进行程序监控。此外,还提醒了版本兼容性问题以及如何在不同的操作系统上...

    linux 内核之旅 上的sagalinux 文件

    6. **系统调用**:系统调用是用户空间程序与内核交互的主要方式,提供了诸如创建进程、读写文件、网络通信等基本功能。学习Linux内核时,理解这些调用及其背后的实现机制至关重要。 "Sagalinux"这个名称可能指向一...

    linux内核编程入门

    了解文件操作的内核接口,如打开、读写、关闭文件等。 6. **设备驱动编程**:学习如何编写简单的字符设备和块设备驱动,了解I/O子系统,包括中断处理、DMA(直接存储器访问)、设备树和PCI设备配置等。 7. **网络...

Global site tag (gtag.js) - Google Analytics