


系统启动时的策略
SELinux在系统启动时就起作用,所有的进程必须标识合适的域。系统启动时init进程在启动进程时标识进程和同步强制策略。有关init进程装载和同步策略过程,说明如下:
1.系统启动时在内核装载后,初始的进程指定为预定义的初始的SID kernel,在策略被装载前,初始的SID用于启动时的系统调用等。
2./sbin/init挂接文件系统/proc/,接着查找selinuxfs文件系统,如果它存在,表明内核中SELinux激活了。
3.如果init在内核中没找到SELinux,或者发现它通过selinux=0关闭SELinux,或者配置文件/etc/selinux/config定义了SELINUX=disabled,系统用无SELinux设置启动进程。如果当前SELinux的启动状态不同于配置文件/etc/selinux/config中状态,init进程在启动时的参数传递中将设置该文件,默认设置为permissive模式,直到策略被装载。配置文件或启动参数enforcing=1时,SELinux设置为enforcement模式。
4.如果内核中SELinux存在,将selinuxfs文件系统挂接到/selinux/。
5.内核检查/selinux/policyvers是否是支持的策略版本,init进程检查/etc/selinux/config看策略(如:targeted)是否激活,并装载$SELINUX_POLICY/policy策略文件。
如果二进制策略是内核不支持的版本,并且它是一个以前的旧版本,init进程尝试装载这个策略文件。这种机制提供了与旧策略版本的一个向后兼容性。
如果/etc/selinux/targeted/booleans中的设置不同于编译在策略文件中的设置,init进程修改已装载到内存中的策略。
6.到此策略已装载好,初始的SID映射到策略中定义在$SELINUX_SRC/initial_sid_contexts的安全上下文。在targeted策略中,新的域是user_u:system_r:unconfined_t。从现在开始,内核能从内核中的安全服务器动态获得安全上下文了。
7.接着,init再次执行它自己,以便它能转移到不同的域(如果策略文件定义了转移策略)。targeted策略没定义类型转移,init还是保持在unconfined_t域。
8.到这里后,init继续它的正常启动。
init进程重执行它自己的原因是为了与stricter策略控制相适应,重执行后,init转移到新的域,进程仅能在执行期间获得域,这意味着init进程是进入域的唯一入口点。
例如:如果策略指定init的域为init_t,需要将init的初始SID(如:kernel)转移到合适的域init_t,进程init需要在装载策略后重执行它自己。如果策略文件中有规则domain_auto_trans(kernel_t, init_exec_t,
新文章:
- CentOS7下图形配置网络的方法
- CentOS 7如何添加删除用户
- 如何解决centos7双系统后丢失windows启动项
- CentOS单网卡如何批量添加不同IP段
- CentOS下iconv命令的介绍
- Centos7 SSH密钥登陆及密码密钥双重验证详解
- CentOS 7.1添加删除用户的方法
- CentOS查找/扫描局域网打印机IP讲解
- CentOS7使用hostapd实现无AP模式的详解
- su命令不能切换root的解决方法
- 解决VMware下CentOS7网络重启出错
- 解决Centos7双系统后丢失windows启动项
- CentOS下如何避免文件覆盖
- CentOS7和CentOS6系统有什么不同呢
- Centos 6.6默认iptable规则详解