免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2679 | 回复: 7

[内核模块] 文件读写监控 [复制链接]

求职 : c/c++研发
论坛徽章:
0
发表于 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

论坛徽章:
20
CU大牛徽章
日期:2013-04-17 11:48:26羊年新春福章
日期:2015-03-10 22:39:202015年中国系统架构师大会
日期:2015-06-29 16:11:282015亚冠之平阳省
日期:2015-07-31 09:19:042015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-09-30 06:20:002015亚冠之柏太阳神
日期:2015-10-19 20:29:5915-16赛季CBA联赛之天津
日期:2016-11-29 14:03:4315-16赛季CBA联赛之北控
日期:2016-12-24 20:51:492015年辞旧岁徽章
日期:2015-03-03 16:54:15双鱼座
日期:2015-01-12 20:58:532014年中国系统架构师大会
日期:2014-10-14 15:59:00
发表于 2015-01-27 10:21 |显示全部楼层
不懂,帮顶

论坛徽章:
9
辰龙
日期:2014-08-18 20:38:42未羊
日期:2014-09-04 08:50:45丑牛
日期:2014-09-06 00:12:55寅虎
日期:2014-12-22 20:50:56摩羯座
日期:2015-01-14 22:28:15巳蛇
日期:2015-01-23 20:39:272015年辞旧岁徽章
日期:2015-03-03 16:54:1515-16赛季CBA联赛之青岛
日期:2016-03-13 23:37:1915-16赛季CBA联赛之深圳
日期:2016-03-29 18:52:38
发表于 2015-01-27 22:17 |显示全部楼层
回复 1# jeick2008

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

估计是直接mmap去访问了。
   

论坛徽章:
2
寅虎
日期:2014-11-25 21:47:342015小元宵徽章
日期:2015-03-06 15:58:18
发表于 2015-01-28 23:03 |显示全部楼层
你所做的加密解密其实基于page cache的, do_sync_write \ read都是基于page cache的。

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

你可以做如下测试验证下:
        写个用户态程序,用direct IO模式或者mmap方式读写你的文件进行验证。

求职 : c/c++研发
论坛徽章:
0
发表于 2015-01-29 09:31 |显示全部楼层
谢谢,昨天验证了下,非page cache方式无法截获到。
大牛,有没有可以同时解惑道直接读写和映射的方法。。
回复 4# 镇水铁牛


   

论坛徽章:
0
发表于 2015-01-29 13:45 |显示全部楼层
跟踪direct IO的系统调用看下去

论坛徽章:
2
寅虎
日期:2014-11-25 21:47:342015小元宵徽章
日期:2015-03-06 15:58:18
发表于 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那里。
   

论坛徽章:
1
15-16赛季CBA联赛之北控
日期:2016-03-15 22:53:29
发表于 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在块层处理加密解密。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP