首页 理论教育 Linux内核安全模块异常解析及策略语句介绍

Linux内核安全模块异常解析及策略语句介绍

时间:2023-11-22 理论教育 版权反馈
【摘要】:一个名字空间会关联一组策略、异常以及9.3.3节要提到的轮廓。异常的异常为了增加灵活性,Tomoyo又提供了3个no开头的异常策略语句:no_keep_domain、no_initialize_domain、no_reset_domain,来抵消keep_domain、initialize_domain、reset_domain的作用。

Linux内核安全模块异常解析及策略语句介绍

前面的例子里有个问题,像/dev/null这样的文件谁都可以写,在每一个域里面专门写出一条允许策略语句是很浪费资源的。此外,假设进程处在下面这个域里:

进程执行/bin/bash,进程的新域是

如果再次执行/bin/bash,进程的新域变为

有必要区分上面这三个域吗?显然没有必要。

Tomoyo通过异常来规范策略语句,减少资源浪费。异常相关的策略语句的伪文件接口是/sys/kernel/security/tomoyo/exception_policy。异常(exception)这个词有些词不达意,但作者又找不到一个更合适的词来表达。下面看一下具体的异常策略语句。

1.域定义相关的异常

(1)域保持

域保持就是让进程的域保持原样,不会因为执行文件而变化。举个例子:

这意味着通过ssh登录而产生的shell进程固定在域“<kernel>/usr/sbin/sshd/bin/bash”中再执行文件进程的域不再发生变化。在此基础上,策略语句的语法可以变化为:

上面语句没有列出一个完整域名,只有域名中最后一级所执行文件的全路径名,意思是在执行了/bin/bash的进程中,再执行任何文件都不会发生域转换了。

上面语句的意思是在/bin/bash进程中执行/bin/bash不会发生域转换,执行别的文件仍然可以引起域的变化。

(2)域初始化

根据前面的介绍,进程的域就是进程执行文件的历史。当然,有些历史是进程从祖先进程处继承来的。有时候进程的域中包含太多的历史信息实在没有必要,域初始化语句就是用来删除不必要的历史信息的。举个例子:

这条语句导致执行/usr/sbin/sshd将会转换到这个域中

除了最后一个执行文件的记录外,还有一个用“<”和“>”包裹的“<kernel>”。用“<”和“>”包裹的是Tomoyo的名字空间,下文会有讲述。

any也可以替换为域名或路径名:

这条语句导致在系统启动过程启动的ssh服务进程处在初始化的域中,而其他方式启动的ssh进程则不是。

(3)创建名字空间

首先看一下什么是Tomoyo的名字空间(namespace)。名字空间的形式是用“<”和“>”包裹的一个字符串。一个名字空间会关联一组策略、异常以及9.3.3节要提到的轮廓。Tomoyo缺省的名字空间是“<kernel>”。创建新名字空间的语句是“reset”语句:

上述语句的含义是:在任意域中执行/usr/sbin/sshd导致域转换到新的名字空间“</usr/sbin/sshd>”,也就是说,sshd进程的新域是“</usr/sbin/sshd>”。假设sshd进程创建了子进程,并在子进程中执行/bin/bash,那么子进程的域就是“</usr/sbin/sshd>/bin/bash”。

(4)异常的异常

为了增加灵活性,Tomoyo又提供了3个no开头的异常策略语句:no_keep_domain、no_initialize_domain、no_reset_domain,来抵消keep_domain、initialize_domain、reset_domain的作用。举几个例子:

上述异常策略语句表示在ssh登录产生的shell中,如果shell进程(创建的子进程)执行了/bin/cat,那么cat进程所在的域是“<kernel>/usr/sbin/sshd/bin/bash/bin/cat”。shell进程执行其他文件时,其所在的域是“<kernel>/usr/sbin/sshd/bin/bash”。(www.xing528.com)

上述异常策略语句表示,如果一个进程的域的最后一个字段是“/bin/mail”,也就是说,该进程所执行的文件是/bin/mail,那么当该进程执行/usr/sbin/sendmail时,新的域是“…/bin/mail/usr/bin/sendmail”。反之,如果进程的域的最后一个字段不是“/bin/mail”,那么进程执行/usr/sbin/sendmail后的新域就是“<kernel>/usr/sbin/sendmail”。

上述异常策略语句表示,如果一个进程的域的最后一个字段是“/bin/mail”,那么当该进程执行/usr/sbin/sendmail时,新的域是“…/bin/mail/usr/sbin/sendmail”。反之,如果进程的域的最后一个字段不是“/bin/mail”,那么进程执行/usr/sbin/sendmail后的新域就是“</usr/sbin/ sendmail>”。

2.其他异常

异常策略语句的另一个作用是提供归类功能,减少策略语句数量,节约内核内存,节省策略制定者的时间和精力。

(1)聚合

Tomoyo是基于路径的,一条典型的访问控制策略是:

这条语句的意思是允许执行/bin/less。less和more功能相同,能不能对两者一视同仁呢?于是产生了聚合语句:

上述异常策略语句表示在策略文件中“/bin/less”和“/bin/more”同义,凡是对“/bin/less的操作许可,默认也存在于“/bin/more”之上。

(2)路径组、数字组和地址

1)路径组

总是写全路径名太麻烦了,引入正则表达式会方便些。于是有了路径组:

在策略中使用path_group所定义的“HOME-DIR-FILE”需要前缀“@”:

2)数字组

同理,数字组的出现是为了避免在策略文件中反复输入同一个数字:

使用的策略:

3)地址组

再看为网络地址而设的地址组:

使用的策略

(3)访问控制组

前面提到有些操作许可在每个域都应该具备,比如“file write/dev/null”。如果每个域都为这种通用的操作许可写一条策略语句,那就很浪费资源了。访问控制组就用来定义通用的操作许可。

下面看一个例子:

策略会在每一个域下面声明这个域使用的访问控制组,下面看一个例子:

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈