-
一-rk3399_android7.1_软件开发指南_v2.09_20190527中的系统调用
资源介绍
与第 2章中描述的域转换一样,transition许可控制进程通过 execve(2)系统调用从一
个域转到另一个域的能力,如果允许,域转换或明确地请求时可能会自动产生一个
type_transition规则,请求明确的域转换的能力是由 setexec许可控制的,这个请求会往
proc文件系统中写一个特定的文件,这个过程在 setexeccon(3)库函数中被抽象出来,为下
一个请求 execve(2)系统调用查看当前请求的转换的能力是由 getattr许可控制的。
noatsecure许可使内核在进行域转换时不设置 glibc的安全模式,在安全模式下,glibc
清除进程环境,包括相当多的环境变量,如 LD_PRELOAD,如果不清除环境,源域可能会控
制目标域的关键部分,当域转换进入更高特权域时,允许 noatsecure许可是特别危险的。
dyntransition许可与转换许可类似,但它是控制进程在任何时间改变域类型的能力,
不仅仅是执行程序那一刻,这个许可比 transition许可更危险,因为它允许起始域在新域
中执行任意的代码,由于这个原因,dyntransition许可只有在目标域是起始域的一个受限
的子集时可以安全地使用,否则,想要理解域改变的保护就会失败,所有授予目标域的访问
权对起始域都必须要能够可访问。
警告:随意使用 dyntransition许可改变进程域类型会破坏标记的性质,在 SELinux
中,标记意味着在一个运行的系统中,创建一个客体后,它的类型将会被改变,尽管存在受
信任的操作系统组件偶然改变了客体的类型的可能,SELinux还是会严格控制进程的类型改
变,dyntransition 许可的引入打破了这种固有属性,使得所有的策略安全分析都变得极为
复杂,我们强烈建议你永远都不要使用这个许可,除非你在编写用户空间客体管理器或其它
SELinux扩展。
dyntransition许可的 setcurrent许可与 transition许可的 setexec 许可类似,它控
制请求改变进程域类型的能力,成功改变域类型需要 dyntransition许可,另外还要
setcurrent许可,和 setexec类似,请求被写入到 proc文件系统的一个特殊文件中,这个
过程抽象在 setcon(3)库函数中。
4.4.2.3.创建文件
与域转换类似,与文件有关的客体的安全上下文设置可以通过继承或 type_transition
规则进行自动创建,也可以明确地创建,通过在 proc文件系统中写入一个特定的文件实现