本文大量摘抄。
SELinux(Security-Enhanced Linux)安全增强Linux。 它是Linux
Kernel的一个子系统。2.6 及以上版本Kernel都已经集成了SELinux.
1. Linux下权限管理背景:
1.1: DAC:
在早期Linux 版本中,决定一个资源是否能够被访问,是由这个用户或组对这个资源是否有对应权限(r, w,
x)决定的。只要访问这个资源的的进程用户或者组符合条件,就可以正常访问。
而资源对root用户不设管制,root用户对系统中任何资源都可以无限制访问。
这种权限管理机制的主题是用户,称为自主访问管理(DAC)
1.2:MAC:
由于DAC风险太大,若一个服务有漏洞,而它是root用户运行的,那攻击者可以通过它为所欲为。所有有了MAC。
决定一个资源是否能被访问的因素除了资源本身的r,w,x设置之外,还需要判断每一类进程是否拥有对某一类资源有访问权限。
此时,当某个服务用root身份运行,也需要判断这个进程的类型以允许访问的资源类型,才能决定它是否能够访问此资源。
这种权限管理机制的主题是进程,称为强制访问管理(MAC) (是不是感觉有点像Android APP的资源权限)
MAC又分 类别安全(MCS)模式和多级安全(MLS)模式。
2. SELinux设计目标和基本概念:
SELinux的主要目的就是最大限度的减小系统中服务进程可访问的资源(资源最小化原则)。
A:主体(Subject):
等同于进程。
B: 对象(Object):
被访问的资源。可以是文件,目录,端口,设备等。
C: 政策和规则(Policy & Rule)
系统中通常有大量的文件和进程,为了节省时间和开销,通常我们只是选择性地对某些进程进行管制。
而哪些进程需要管制、要怎么管制是由政策决定的。
一套政策里面有多个规则。部分规则可以按照需求启用或禁用(以下把该类型的规则称为布尔型规则)。
规则是模块化、可扩展的。在安装新的应用程序时,应用程序可通过添加新的模块来添加规则。用户也可以手动地增减规则。
在 CentOS 7 系统中,有三套政策,分别是:
1. targeted:对大部分网络服务进程进行管制。这是系统默认使用的政策(下文均使用此政策)。
2. minimum:以 targeted 为基础,仅对选定的网络服务进程进行管制。一般不用。
3. mls:多级安全保护。对所有的进程进行管制。这是最严格的政策,配置难度非常大。一般不用,除非对安全性有极高的要求。
政策可以在 /etc/selinux/config 中设定。
D: 安全上下文(Security Context)
安全上下文是 SELinux 的核心。
安全上下文我自己把它分为「进程安全上下文」和「文件安全上下文」。
一个「进程安全上下文」一般对应多个「文件安全上下文」。
只有两者的安全上下文对应上了,进程才能访问文件。它们的对应关系由政策中的规则决定。
文件安全上下文由文件创建的位置和创建文件的进程所决定。而且系统有一套默认值,用户也可以对默认值进行设定。
需要注意的是,单纯的移动文件操作并不会改变文件的安全上下文。
安全上下文的结构及含义
安全上下文有四个字段,分别用冒号隔开。形如:system_u:object_r:admin_home_t:s0。