本组的项目是一个轻量级的文件系统沙盒,通过劫持文件访问相关的系统调用,实现对文件的保护。项目的特色在于本项目的沙盒程序是一段动态植入内核空间的kernel代码,可以最小化反复切换特权级别带来的性能损失,并且保留了用户态程序级别的自由度和灵活性。本项目目前已经在同一个框架下实现了三种不同的文件保护模式,可以灵活地为使用者选择,满足不同类型的数据保护需要。本项目还通过引入cgroup,实现了进程资源分配的限制,提高了对系统的整体保护。
- 陈思睿
- 梁恒宇
- 吕泓涛
- 汤力宇
BPF: 存放一个可用于读取openat系统调用传入参数filename的BPF程序feasibility: 可行性报告final: 结题答辩+结题报告lab4: 实验四仓库mid: 中期报告PPTreport: 调研报告research: 调研内容存放的文件夹test_module: 内核模块、测试程序源代码、加载程序源代码存放文件夹
文档的编译需要用到XeLaTeX,如果文档中使用了BibTeX做文献引用,则需要使用XeLaTeX->BibTeX->XeLaTeX->XeLaTeX进行四遍编译。
beamer类型可能需要使用XeLaTeX进行两次以上的编译以校正页码等信息。
要正确运行这个项目,首先需要编译并更换Linux内核。本仓库的Linux修改源代码位于OSH-2021/linux-stable,从Linux5.8.18版本修改而来。
sBPF仓库中的内核模块不断在更新,模块相对应的内核代码也在更新。要想正确运行内核模块,需要编译并更换相对应的内核。使用git log可查看comment,部分涉及对内核模块修改的comment中包含内核模块对应的内核提交版本。
编译内核与更换内核不属于本项目的核心重点,所以这里不介绍编译内核以及更换内核的步骤。不同的运行环境下更换内核的方法可能是不同的。但是如果你没有做过这件事的话,完成这个步骤还是会比较困难的。
这个步骤结束后,键入uname -r会显示5.8.18+。
sBPF_*.c为内核模块,直接键入make编译。例如,如果要编译sBPF_cow.c,需将Makefile对应的obj_m后改为sBPF_cow.o,再使用make即可编译。
这一步是将沙盒代码载入到内核中,让沙盒代码运行在内核态,减少用户态、内核态之间切换带来的开销。
使用insmod即可载入内核模块,让沙盒程序运行在内核态。注意需手动填入pid、u_mem、sdir信息。
手动载入内核模块后,若想结束沙盒的运行,需要使用rmmod。
编译好loader.c,如gcc loader.c -o loader。运行loader的参数依次为模块地址、沙盒地址、运行的程序及参数,loader运行的参数在loader.c中也有说明。自动载入后不需要再手动卸载内核模块。
loader的运行示例如:./loader sBPF_cow.ko /home/xxx/sandbox_test ./a.out