samba+cephfs 拦截I/O

文章介绍了如何通过Samba服务将Windows客户端与Ceph集群的CephFS文件系统连接起来,实现文件共享。在服务端启用SMB服务,客户端通过挂载网络驱动器访问CephFS。然后,文章详细阐述了如何创建libcephfs的hook,拦截并记录CephFS的I/O操作到系统日志,以进行监控。后续计划包括完善hook代码,编写自动监控脚本以及实施快照功能。

前言

使用samba服务建立起windows客户端和ceph集群的cephfs文件共享的桥梁
#客户端WIN client–(SMB)–>
#存储samba->libvfs_module_ceph.so->libcephfs.so->MDS/OSD
(使用samba导出的cephfs,samba会提供vfs_ceph模块,该模块会调用libcephfs api)
SMB(消息服务块):网络文件共享协议,允许客户端用户从远端的文件服务器访问文件资源。samba是运行smb的软件,分为客户端和服务端。
samba+cephfs:在服务端建立起与ceph的关系,在客户端挂载ceph的文件系统。

1、在服务端启用(/停止)smb进程:

systemctl start/restart/stop smb

2、在客户端挂载(映射网络驱动器):

\\IP\共享名

3、12步完成后,会发现smbd服务调用了ceph.so(->libvfs_module_ceph.so)、libcephfs.so,libcephfs会和mds/osd进行交互

拦截cephfs的I/O

1、关于libcephfs的hook的简单的代码,并将I/O信息并写入系统日志中

#include <stdio.h>
#include <dlfcn.h>
#include <cephfs/libcephfs.h>
#include <syslog.h>

typedef int (*CEPH_OPEN)(struct ceph_mount_info *cmount, const char *path, int flags, mode_t mode);

int ceph_open(struct ceph_mount_info *cmount, const char *path, int flags, mode_t mode) {
    // Load the original Ceph library and the ceph_open() function
    static void *handle = 0x0;
    handle = dlopen("/lib64/libcephfs.so.2", RTLD_LAZY);
    static CEPH_OPEN old_ceph_open = NULL;
    old_ceph_open = dlsym(handle, "ceph_open");

	// record log info
    openlog("SAMBA", LOG_CONS | LOG_PID, LOG_USER);
    syslog(LOG_INFO, "Ceph_open Called:%s", path);
    closelog();

    // Call the original ceph_open() function
    return old_ceph_open(cmount, path, flags, mode);
}

2、生成动态链接库

gcc -fPIC -shared -o cephfs_hook.so cephfs_hook.c -D_FILE_OFFSET_BITS=64 -ldl -lcephfs

3、启动smb时加载动态链接库(systemctl start smb命令启动smb,不知道为啥找不到自己的动态链接库)

LD_PRELOAD=/home/xwc/Desktop/cephfs_hook/cephfs_hook.so /usr/sbin/smbd --foreground --no-process-group

4、查看

lsof /home/xwc/Desktop/cephfs_hook/cephfs_hook.so 
ps -ef | grep smbd

5、在客户端对文件进行操作后,查看系统日志如截图所示

cat /var/log/messages
or
tail -f /var/log/messages
如遇messages不更新,执行systemctl restart/start rsyslog

在这里插入图片描述

接下来工作

1、完善hook代码

2、写脚本:自动监控勒索软件

3、快照提上日程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值