这篇文章主要记录了我如何学习selinux自订策略的,相关内容在网络上非常零散,自己也走了很多弯路,所以专门写了这么篇文章作为整理。
这里先提一句,关于selinux的配置,网上最容易搜索到的是对selinux程序的配置,例如开关,以及对某种协议的控制,这些内容在我之前整理selinux管理工具种有提到,是相对表面的selinux配置,本文的配置是从编写自定义的策略模块,并装载,因此管理粒度更细。
按照惯例这里先附上一些参考资料的网站
来自selinuxwiki的一些相关内容,wiki里可参考的内容其实非常多,但网站导航不太行,很难找 https://selinuxproject.org/page/RefpolicyWriteModule
这个是wiki的github页面,官方稍微做了一些整理,但是内容感觉没有wiki多,不过还是有一定参考价值的https://github.com/SELinuxProject/refpolicy/wiki/GettingStarted
这个是slinux的一个refpolicy项目,希望构架一个普遍安全的策略https://github.com/SELinuxProject/refpolicy
我采用的是centos7环境
在开发selinux策略之前,千万不要忘记安装selinux的开发包
yun install selinux-policy-devel
编写规则其实非常简单,
1.首先准备好一个空的文件夹作为工作目录
2.创建一个.te文件,内容如下,仅作参考
第一句policy_module是一句官方定义好的宏指令
第二句和第三句是定义了两种类型,test1_t为进程类型,test1_exec_t为可执行文件类型
第四句为规则,允许test1_t类型对test1_exec_t类型的文件进行read_file_perms的操作,后者也是个宏指令,包含若干具体操作类型
3.创建一个.fc文件,内容如下
主要是对给定的路径设置一个安全上下文
4.然后就可以准备编译了,首先我们要在当前目录下获取一个makefile文件,安装完最开始提到的开发包后,centos中可以在如下目录找到
/usr/share/selinux/devel/Makefile
拷贝到当前文件夹下,make就会自动生成
test2是我随手创建的空文件夹,test1.if是一个接口相关的文件夹,我们可以自己定义,这里由于我们没有定义,所以自动生成了,还有存储临时文件夹tmp,最后也是最重要的文件test1.pp这个就是编译后的模块了
可以运行
semodule -i test1.pp #装载模块 semodule -l #列出已装载的所有模块 semodule -r test1 #卸载指定模块
至此我们的第一步就算是迈出来了。