[学习记录]通过selinux实现跨域

selinux下的跨域指的是进程A想要访问文件B,但A的上下文并没有权限访问文件B,selinux支持我们开放进程A的权限使其可以通过具有权限访问文件B的上下文的进程C来间接实现对B的访问。

 

样例如下:

allow  A_t   B_t: file {getattr execute  read open};

allow C_t  B_t : file entrypoint;

allow   A_t  C_t:  process transition;

type_transition A_t  B_t :  process C_t;

 

如果需要实现跨域,至少需要满足上述条件

1)原进程类型对目标文件类型具有执行和获取属性权限

2)新进程类型对目标文件类型具有entrypoint

3)原进程类型对新进程类型 具有进程转换权限

 

最后设置默认的域转换规则,当A_t试图访问B_t时总是默认转换为C_t

 

当然,以上条件为最低条件,其它内容还需要根据日志中的avc记录进行完善。不过这些主要是为了帮助C_t类型的进程正常执行工作。

 

这里提一点额外内容

selinux对于角色所能拥有的类型有限制,尤其是进程类型,因此定义了一个新的进程类型时,需要将其分配到某个角色下才能构成一个合法的安全上下文

以system_r为例

role system_r types new_t

posted @ 2019-12-18 15:36  冷血无情康纳酱  阅读(620)  评论(0编辑  收藏  举报