Chinaunix

标题: 文件读写监控 [打印本页]

作者: jeick2008    时间: 2015-01-27 10:18
标题: 文件读写监控
小弟现在在搞一个小东东,在内核中,文件写入磁盘前对写入的文件做处理(加密、字符串替换等等),文件读出时逆操作(解密、字符串还原等),

文件内容加密在  do_sync_write 中对待写内容进行加密处理(缓冲区校验机制也同时修改了),然后在加密后的内容通过aio_write写入页中(具体写入页机制不动);

文件内容解密在 do_sync_read 中对读出内容进行解密;

当前能够正常的处理文件的读写(大文件分块读写也测试ok),但是gedit ,wps等工具打开文件进行编辑保存,无法触发文本内容加密动作,所以小弟请教高手,gedit、wps等是如何实现文本编辑保存使文件存入磁盘的。
谢谢,不胜感激。。。

E-mail: jiay_os@sari.ac.cn
作者: beyondfly    时间: 2015-01-27 10:21
不懂,帮顶
作者: Tinnal    时间: 2015-01-27 22:17
回复 1# jeick2008

stace跟一下不就知道用什么系统调了了。

估计是直接mmap去访问了。
   
作者: 镇水铁牛    时间: 2015-01-28 23:03
你所做的加密解密其实基于page cache的, do_sync_write \ read都是基于page cache的。

不清楚gedit、wps的实现,如果是direct IO方式或mmap实现的应用程序,是不经过page cache的,所以你的拦截是无效的。

你可以做如下测试验证下:
        写个用户态程序,用direct IO模式或者mmap方式读写你的文件进行验证。
作者: jeick2008    时间: 2015-01-29 09:31
谢谢,昨天验证了下,非page cache方式无法截获到。
大牛,有没有可以同时解惑道直接读写和映射的方法。。
回复 4# 镇水铁牛


   
作者: hnwyllmm    时间: 2015-01-29 13:45
跟踪direct IO的系统调用看下去
作者: 镇水铁牛    时间: 2015-01-30 21:28
回复 5# jeick2008

常见的write-back和write-through都会写cache,即会进行内存从用户态到内核态的拷贝,但direct IO不会,它直接将用户态的内存pin and lock,然后将io vector填充在dio中下发。
mmap是另一个不同的概念,访问的虚拟地址对应实际page,但每次的写修改不同于常见的设置page的PG_dirty操作,所以就不会走到do_sync_write那里。
   
作者: yangPSO    时间: 2015-01-31 23:45
不知道LZ的加密、解密算法是怎样的,比如加密后内容会变长或者变短吗。
另外,每次写入的数据长度是块对齐的吗。

direct IO写同样会经过do_sync_write,一般aio_write回调函数之后才会区分direct IO和非direct IO。
但是aio是不经过do_sync_write的,而是直接由aio_write回调函数处理。

但是mmap的情况仍然处理不到。

建议LZ在块层处理加密解密。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2