上海交通大学
系统软件课程设计课程,Linux内核模块编程
实现基于系统调用重载的加密型文件保险箱
内核态编写了系统调用重载的内核模块,重载文件相关的系统调用,重载后的系统调用根据数据库的内容决定所执行的操作。
用户态编写了客户端和服务器,客户端使用CLI进行操作,完成参数的解析,服务器对SQLITE数据库进行操作,同时响应内核模块的查询请求。
客户端和服务器使用UNIX域socket通信。服务器与内核模块使用netlink通信。
-
- 无法完成文件加解密,需要完善。
通过修改kernel/crypto.c文件已经解决,主要是修改了加密的内存操作的部分,使用kmalloc和kfree结合copy_from_user/copy_to_user函数实现。
-
- 文件加入和移除保险箱时的加解密操作
通过在客户端添加文件复制和备份实现。
-
- 删除文件后数据库内保存的文件名信息出错
-
- 可执行文件加入保险箱后是否可以正常运行
-
- 使用gcc编译C语言得到的可执行文件:Exec Format Error
-
- 使用cat将python文件读取写入:成功
-
- 多文件格式的支持:
在前期的测试和演示过程中,为了方便我们都是使用txt文件上的cat/echo命令进行测试,但是一个合格的文件保险箱应该支持多种文件格式。在下列常见文件格式上测试结果如下:
-
- png文件:成功
-
- pdf文件:显示文件格式被破坏
-
- doc文件:打开为乱码
-
其他问题:
- 设计实现GUI界面。
- 增加审计单元,记录保险箱内部文件的读写访问。
- 添加用户可修改的配置文件,便于灵活的配置/删去功能。
- 重载更多的系统调用,支持更多的功能。
特别致谢16级张宗瑞学长小组提供的代码框架和结构设计