(1)load
SMACK访问控制的核心是策略。策略有两部分,一部分是所谓的系统策略,是不可更改的;另一部分是用户可配置的策略。下面首先简单介绍一下系统策略。
SMACK预先定义了5个标签:?、^、*、_和@,见表8-1。
表8-1 SMACK系统标签
SMACK预先定义了以下7条策略:
1)标签为“*”的主体(进程)不能对任何客体进行任何操作。
2)标签为“^”的主体(进程)可以对任何客体进行读(r)或执行(x)操作。
3)任何主体(进程)可以对标签为“_”的客体进行读(r)或执行(x)操作。
4)任何主体(进程)可以对标签为“*”的客体进行任何操作。
5)任何主体(进程)可以对标签相同的客体进行任何操作。
6)用户定义的策略所允许的操作都被允许。
7)其他操作都不被允许。
文件load是用来存取用户定义的策略的接口。对此文件的写操作的要求是,一次写入一行每行的格式是:
第一个字符串表示主体安全标签,第二个字符串表示客体安全标签,第三个字符串是操作方式,全部操作方式是“rwxatl”,表示读、写、执行、添加、变形、锁。如果相应的操作不被允许,就在相应的位置上填“-”。
(2)load-self
这个文件提供了一个接口,用来为进程提供额外的访问控制策略。与很多安全机制一样,通过这个接口只能减少允许的操作。
(3)logging
这个文件接口用于控制SMACK的日志策略:记录失败、记录成功、都记录、都不记录。这个文件的内容是一个整数。代码实现是:
(www.xing528.com)
变量log_policy的比特位0对应是否记录失败事件,比特位1对应是否记录成功事件
4)access
这个伪文件接口用于检查规则的合法性。向这个文件写入一条规则,比如:
然后再读取文件内容,如果内容是ascii字符‘1’,则前面写入的规则被内核允许,如果是ascii字符‘0’,则前面写入的规则不被内核允许。
(5)onlycap
简单是有代价的,SMACK策略中的存取方式没有覆盖的东西太多了,比如什么情况下可以修改安全策略。SMACK策略中客体也有缺失,比如:安全策略本身是不是客体,它的标签又是什么?为了解决这些问题,SMACK的方式是引入超级标签,拥有超级标签的主体可以做诸如修改策略这样的特殊工作。
在Linux能力机制中有两个能力CAP_MAC_ADMIN和CAP_MAC_OVERRIDE。CAP_MAC_ADMIN的语义是:拥有它可以对强制访问控制(MAC)进行管理,CAP_MAC_OVERRIDE的语义是:拥有它可以不受强制访问控制机制的限制。这两个能力的引入有些不合逻辑,能力机制本质上属于自主访问控制(DAC),DAC不应该超越MAC。
SMACK的问题是机制过于简单,它需要引入一个类似于超级用户的角色来弥补机制的不足。SMACK引入了一个特殊的标签smack_onlycap。让这个标签和前述两个能力配合起来工作具备smack_onlycap标签的进程,如果拥有了CAP_MAC_ADMIN能力,它就可以进行SMACK策略管理工作。具备smack_onlycap标签的进程,如果拥有了CAP_MAC_OVERRIDE能力,就不受SMACK限制。
onlycap文件提供对smack_onlycap标签进行管理的接口,写标签字符串可以修改smack_onlycap值,写入“-”清空smack_onlycap。若smack_onlycap为空,进程只要拥有CAP_MAC_ADMIN就可以进行SMACK策略管理工作,只要拥有CAP_MAC_OVERRIDE就可以不受SMACK限制。
(6)revoke-subject
通过这个文件接口写入一个标签,系统中具备这个标签的进程对所有客体都无法进行任何存取操作。
(7)change-rule
通过这个文件接口对系统现存策略进行修改。格式为:
%s%s%s%s
前两个字符串分别是主体标签和客体标签,第三个字符串是允许的操作,第四个字符串是不允许的操作。如果要修改的策略不存在,就创建新的策略。
(8)syslog
syslog文件用来修改和查看变量smack_syslog_label。这个变量标示一个特殊的标签,拥有
这个标签可以进行syslog相关的操作
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。