关注公众号 “融码一生”,领取全套 PDF / 电子书
- 传统 Linux 系统使用访问控制方式的基础上,附加使用 SELinux 可增强系统安全。 在解释 SELinux 的工作模式之前先了解几个概念:
-
- 主体(Subject):想要访问文件或目录资源的进程
-
-
- 想要得到资源的基本流程:由用户调用命令,由命令产生进程,由进程去访问文件或目录资源。
- 在自主访问控制系统中(Linux 默认权限中)靠权限控制的主体是用户
- 在强制访问控制系统中(SELinux 中),靠策略规则控制的主体是进程
-
-
- 目标(Object):需要访问的文件或目录资源
- 策略(Policy):Linux 系统中进程与文件的数量庞大,限制进程是否可以访问文件的 SELinux 规则数量就更加烦琐,如果每个规则都需要管理员手工设定,则 SELinux 的可用性就会极低。SELinux 默认定义了两个策略(规则都已经在这两个策略中写好,默认只要调用策略就可以正常使用):
-
-
-targeted
:SELinux 的默认策略,主要限制网络服务,对本机系统的限制极少(我们使用这个策略已经足够)-mls
:多级安全保护策略,这个策略限制得更为严格
-
-
- 安全上下文(Security Context):每个进程、文件和目录都有自己的安全上下文,进程具体是否能访问文件或目录,要看这个安全上下文是否匹配。如果进程的安全上下文和文件或目录的安全上下文能匹配,则该进程可以访问这个文件或目录。判断进程的安全上下文和文件或目录的安全上下文是否匹配需要依靠策略中的规则。举个例子,我们需要找对象,男人可以看作主体,女人就是目标了。而男人是否可以追到女人(主体是否可以访问目标),主要看两个人的性格是否合适(主体和目标的安全上下文是否匹配)。两个人的性格是否合适需要靠生活习惯、为人处世、家庭环境等具体的条件来进行判断(安全上下文是否匹配是需要通过策略中的规则来确定的)。
- 安全上下文(Security Context):每个进程、文件和目录都有自己的安全上下文,进程具体是否能访问文件或目录,要看这个安全上下文是否匹配。如果进程的安全上下文和文件或目录的安全上下文能匹配,则该进程可以访问这个文件或目录。判断进程的安全上下文和文件或目录的安全上下文是否匹配需要依靠策略中的规则。举个例子,我们需要找对象,男人可以看作主体,女人就是目标了。而男人是否可以追到女人(主体是否可以访问目标),主要看两个人的性格是否合适(主体和目标的安全上下文是否匹配)。两个人的性格是否合适需要靠生活习惯、为人处世、家庭环境等具体的条件来进行判断(安全上下文是否匹配是需要通过策略中的规则来确定的)。
- 当主体想要访问目标时,如果系统中启动了 SELinux,则主体的访问请求首先需要和 SELinux 中定义好的策略进行匹配。
-
- 如果进程符合策略中定义好的规则,则允许访问,这时进程的安全上下文就可以和目标的安全上下文进行匹配:
-
-
- 如果比较失败,则拒绝访问,并通过 AVC(Access Vector Cache,访问向量缓存,主要用于记录所有和 SELinux 相关的访问统计信息)生成拒绝访问信息
- 如果安全上下文匹配,则可以正常访问目标文件
-
-
- 当然,最终是否可以真正地访问到目标文件,还要匹配产生进程(主体)的用户是否对目标文件拥有合理的读、写、执行权限。
- 在进行 SELinux 管理时一般只会修改文件或目录的安全上下文,使其和访问进程的安全上下文匹配或不匹配,以控制进程是否可以访问文件或目录资源;很少会去修改策略中的具体规则,因为规则实在太多,修改起来过于复杂。不过,我们可以人为定义规则是否生效、控制规则的启用与关闭。
- SELinux 提供了 3 种工作模式:Disabled、Permissive 和 Enforcing,而每种模式都为 Linux 系统安全提供了不同的好处。
1、Disable 工作模式(关闭模式)
- Disable 模式中 SELinux 被关闭,默认的 DAC 访问控制方式被使用。该模式对于那些不需要增强安全性的环境非常有用。
- 例如,若从你的角度看正在运行的应用程序工作正常,但却产生了大量的 SELinux AVC 拒绝消息,最终可能会填满日志文件,从而导致系统无法使用。这种情况下最直接的解决方法就是禁用 SELinux(当然,也可以在应用程序所访问的文件上设置正确的安全上下文)。
- 注意:在禁用 SELinux 之前需考虑是否可能会在系统上再次使用 SELinux,如果决定以后将其设置为 Enforcing 或 Permissive,则当下次重启系统时系统将会通过一个自动 SELinux 文件重新进程标记。
- 关闭 SELinux 的方式也很简单,只需编辑配置文件
/etc/selinux/config
,并将文本中SELINUX=
更改为SELINUX=disabled
即可,重启系统后SELinux 就被禁用。
2、Permissive 工作模式(宽容模式)
- Permissive 模式中 SELinux 被启用,但安全策略规则并没有被强制执行;当安全策略规则应该拒绝访问时,访问仍然被允许;然而此时会向日志文件发送一条消息表示该访问应该被拒绝。
- Permissive 模式主要用于以下几种情况:
-
- 审核当前的 SELinux 策略规则
- 测试新应用程序,看看将 SELinux 策略规则应用到这些程序时会有什么效果
- 解决某一特定服务或应用程序在 SELinux 下不再正常工作的故障
- 某些情况下,可使用 audit2allow 命令读取 SELinux 审核日志并生成新的 SELinux 规则,从而有选择性地允许被拒绝的行为,而这也是一种在不禁用 SELinux 的情况下让应用程序在 Linux 系统上工作的快速方法。
3、Enforcing 工作模式(强制模式)
- 从此模式的名称就可以看出,在 Enforcing 模式中 SELinux 被启动,并强制执行所有的安全策略规则。
关注公众号 “融码一生”,领取全套 PDF / 电子书