[学习记录]通过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