笔者:国际认证信息系统审计师、软考系统分析师
SELinux 策略(Policy)
SELinux安全引擎的核心是策略。策略是一组定义了安全和访问权限的规则,并应用到整个系统的所有实体。“所有实体”,包括用户(user)、角色(role)、进程(process)、文件(file)等等一切。策略定义了这些实体之间的安全关系。
要理解好策略,需要掌握一些基本术语。
最简单、最概括的描述是,SELinux策略定义用户如何访问角色,角色如何访问域(domain),最后是域如何访问类别(type)。
用户
SELinux内置了一些预设的用户,每一个常规linux用户都会被匹配到一个或多个SELinux用户。
Linux的进程是基于用户身份运行的。比如用户tom运行编辑器(以tom的身份)在vi编辑器中打开文件,又如服务账号apache运行httpd守护进程。
在SELinux中,进程(包括守护进程和运行程序)被称为主题(subject)。
角色
角色就如用户和进程之间的关口。角色定义了哪些用户可以访问该进程。角色不像组,而是更像过滤器:
在角色通过授权时,用户可以随时进入该角色,或假设自己为该角色。
SELinux策略中角色的定义,包括定义了哪些用户可以访问该角色。它还定义了角色本身可以访问哪些进程的域。
角色的出现,是因为SELinux的一部分实现是“基于角色的访问控制”,(Role Based Access Control,RBAC)。
主题和对象
一个主题即一个进程,并能对一个对象产生潜在影响。
一个对象,在SELinux中是任何可以被操作的实体。包括文件、目录、端口、TCP SOCKET、光标、X 服务器等等。主题能对对象执行的操作,就是主题的权限。
域之于主题
域是SELinux主题(进程)能在其中运行的上下文(context)。上下文围绕着主题并包裹其中。上下文告诉进程,你能做什么,不能做什么。例如,域可以定义什么文件,目录,链接,设备,甚或端口能被主题访问。
类别之于对象
类别是约定了文件的用途的文件上下文的上下文。这个定义粗略看有点绕。例如,某个文件的上下文或会指出这个文件是个网页,或者这个文件属于/etc目录,或者文件的所有者是某个特定的SELinux用户。
所以,文件的上下文在SELinux中被俗称为文件的类别。
最后,什么是SELinux的策略?
单个SELinux策略规则,定义了用户对角色的访问、角色对域的访问、以及域对类别的访问。
首先,用户需要被授权进入某个角色,然后,该角色需要被授权访问某个域。最后,该域又被限制为仅允许访问某些类别的文件。
策略就是如上一堆规则的合集。
以上整个限制过程,也就是在特定域内运行的进程只能对特定类别的对象执行特定的操作,被称为“类别执行机制”,即 Type Enforcement (TE)。
SELinux策略的实现默认是目标导向的。比如在SELinux配置文件中SELINUXTYPE参数就是被设置为TARGETED。在默认情况下,SELinux将只限制系统中的某些特定的目标进程。那些没有被定义为目标的对象将在无限制的域中运行。目标导向的默认行为,是认为SELinux只需要涉及某些进程。
但也有另一种选择,即是默认拒绝模型。除非得到策略的许可,否则任何对文件的访问都会被拒绝。这是一个非常安全的实现,但也意味着软件开发人员必须在开发时充分预测,程序运行时(进程)对任何一个对象都可能需要的每一个权限。
SELinux 策略的行为
SELinux策略并不能完全取代传统的DAC安全策略。如果DAC规则禁止用户访问文件,则不会评估SELinux策略规则,因为第一道防线已经阻止了访问。在DAC方式完成了安全性评估后,就轮到SELinux的安全性决策发挥作用了。
当一个启用了SELinux的系统启动时,策略将被加载到内存中。SELinux策略采用模块化格式,就像在启动时加载的内核模块一样。相似地,策略模块也可以在运行时动态地从内存中添加和删除它们。
SELinux使用的策略存储区持续跟踪已加载的模块。sestatus命令显示策略的存储名称。semodule -l 命令列出了当前加载到内存中的SELinux策略模块。
运行semodule命令可以观察到如下结果:
semodule -l | less
abrt 1.4.1
accountsd 1.1.0
acct 1.6.0
afs 1.9.0
aiccu 1.1.0
aide 1.7.1
ajaxterm 1.0.0
alsa 1.12.2
amanda 1.15.0
amtu 1.3.0
...
semodule可以用于许多其他任务,如安装、删除、重新加载、升级、启用和禁用SELinux策略模块。
大多数现代Linux发行版都包括了SELinux模块的二进制版本,作为SELinux软件包的一部分。策略文件的扩展名为.pp。
SELinux模块化的工作方式是,当系统启动时,策略模块会被组合到活动策略,然后策略被加载到内存中。这个加载策略的组合二进制版本可以在 /etc/selinux/targeted/policy 目录下找到。
[root@localhost ~]# ls -l /etc/selinux/targeted/policy/
total 3796
-rw-r--r--. 1 root root 3883560 Mar 9 09:26 policy.31
本站微信订阅号:
本页网址二维码: