前排提示(2022-08-18):这 post 一直躺在我的草稿箱里面,没有写完,但不发出来又觉得难过

基于规则的安全模型

具体地说,在CentOS和Fedora的默认配置中,SELinux使用的targeted策略只覆盖了有限的(系统)应用程序。用户,特别是在/usr/local和/home目录运行的东西不受targeted约束。设计这样的默认配置显然是为了在易用性和安全性之间取得某种平衡。

三种模式

SELinux的有三种运行模式,它们分别是

  • Enforcing(默认):生效状态,对受保护的应用的相关的存取会被拒绝,当然也会记录日志;
  • Permissive:只记录日志但不会拒绝任何东西;
  • Disable:完全关闭。

我认为介于enforcing和disabled之间的permissive是用来调试策略用的,其主要使用场景可能是在enforcing和permissive之间切换,观察日志和应用的行为。

要查看当前的SELinux模式,应使用sestatus命令:

$ sestatus
SELinux status:                 enabled
SELinuxfs mount:                /sys/fs/selinux
SELinux root directory:         /etc/selinux
Loaded policy name:             targeted
Current mode:                   enforcing
Mode from config file:          enforcing
Policy MLS status:              enabled
Policy deny_unknown status:     allowed
Memory protection checking:     actual (secure)
Max kernel policy version:      31

/etc/selinux/config设置了当前的SELinux模式。修改后重启生效。

从disabled向其他模式切换的时候还需要额外relabel文件系统。其中一个方法是创建/.autorelabel然后重启

四种存取控制形式

  • Type Enforcement (TE):“类型强制”这个常见译名其实并不能做到望文生义。TE是targeted策略的主要存取控制机制;
  • Role-Based Access Control (RBAC):“基于SELinux角色的访问控制”。不用于默认的targeted策略;
  • Multi-level Security (MLS): “多层次安全”。在默认的targeted策略里面是隐藏的不常用
  • Multi-Category Security (MCS): “多类目安全”。是对MLS的扩展。在实现红帽系的一种叫sVirt的虚拟化技术中有涉及到。在默认targeted策略中启用

由此可见,初学者应重点掌握TE这种形式。

认识SELinux Security Context:Z是个酷炫的字母

为ps、ls等命令加上-Z选项,立刻就能查看所谓的SELinux Security Context ( __“SELinux安全上下文”这种神秘翻译到底是谁想出来的

正如文件权限由rwx组成一样,SELinux的相关“权限”(security context fileds)由user:role:type:mls四个部分组成。下面是一些例子

$ ls -Z /usr/bin/bash
system_u:object_r:shell_exec_t:s0 /usr/bin/bash
$ ls -dZ /home
system_u:object_r:home_root_t:s0 /home

在我们得到的四个字段中,前三个security context fileds都有用下划线后跟一字母的方式提示这是哪个字段的值。这让我想起了匈牙利命名法使用首字母提示当前变量的type。

只有当进程和它想作用的对象拥有近似的type的时候,存取才可能发生。为什么说是近似呢?CentOS的wiki举了一个例子:httpd进程的type字段是httpd_t,那么httpd可以读取type字段是httpd_sys_content_t的文件,但是不能访问type字段是user_home_t的用户家目录下面的文件。

排错:我学习SELinux是为了不至于不关掉它!

TODO

用semanage做一些有实质影响的事情

TODO