16.5.3 【Linux】SELinux 三种模式的启动、关闭与观察

并非所有的 Linux distributions 都支持 SELinux 的,所以你必须要先观察一下你的系统版本为何。 目前 SELinux 依据启动与否,共有三种模式,分别如下:

enforcing:强制模式,代表 SELinux 运行中,且已经正确的开始限制 domain/type 了;

permissive:宽容模式:代表 SELinux 运行中,不过仅会有警告讯息并不会实际限制

domain/type 的存取。这种模式可以运来作为 SELinux 的 debug 之用;

disabled:关闭,SELinux 并没有实际运行。

图16.5.4、SELinux 的三种类型与实际运行流程图示意

并不是所有的程序都会被 SELinux 所管制,因此最左边会出现一个所谓的"有受限的程序主体"。通过 ps -eZ 去观察有没有受限 (confined )。

在目前 target 这个政策下面,只有第三个类型 (type) 字段会有影响,因此我们上表仅列出第三个字段的数据而已。 我们可以看到, crond 确实是有受限的主体程序,而 bash 因为是本机程序,因此就是不受限 (unconfined_t) 的类型。也就是说, bash 是不需要经过图 16.5.4 的流程,而是直接去判断 rwx 而已。

首先,如果是Disabled 的模式,那么 SELinux 将不会运行,当然受限的程序也不会经过 SELinux , 也是直接去判断 rwx 而已。那如果是宽容 (permissive) 模式呢?这种模式也是不会将主体程序抵挡。

Enforcing 模式,就是实际将受限主体进入规则比对、安全本文比对的流程,若失败,就直接抵挡主体程序的读写行为,并且将他记录下来。 如果通通没问题,这才进入到rwx 权限的判断。

通过getenforce可以知道目前的SELinux模式:

使用sestatus可以知道SELinux的政策:

如上所示,目前是启动的,而且是 Enforcing 模式,而由配置文件查询得知亦为 Enforcing 模式。 此外,目前的默认政策为 targeted 这一个。配置文件是/etc/selinux/config。看看内容:

若有需要修改默认政策的话,就直接改 SELINUX=enforcing。

SELinux 的启动与关闭

上面是默认的政策与启动的模式!你要注意的是,如果改变了政策则需要重新开机;如果由enforcing 或 permissive 改成 disabled ,或由 disabled 改成其他两个,那也必须要重新开机。这是因为 SELinux 是整合到核心里面去的, 你只可以在 SELinux 运行下切换成为强制(enforcing) 或宽容 (permissive) 模式,不能够直接关闭 SELinux 的! 如果刚刚你发现getenforce 出现 disabled 时,请到上述文件修改成为 enforcing 然后重新开机。

如果从 disable 转到启动 SELinux 的模式时, 由于系统必须要针对文件写入安全性本文的信息,因此开机过程会花费不少时间在等待重新写入 SELinux 安全性本文(有时也称为 SELinux Label) ,而且在写完之后还得要再次的重新开机一次。等到下次开机成功后,再使用 getenforce 或 sestatus 来观察看看有否成功的启动到 Enforcing 的模式。

如果你已经在 Enforcing 的模式,但是可能由于一些设置的问题导致 SELinux 让某些服务无法正常的运行, 此时你可以将 Enforcing 的模式改为宽容 (permissive) 的模式,让SELinux 只会警告无法顺利连线的讯息, 而不是直接抵挡主体程序的读取权限。让 SELinux模式在 enforcing 与 permissive 之间切换的方法为:

setenforce 无法在 Disabled 的模式下面进行模式的切换。

在某些特殊的情况下面,你从 Disabled 切换成 Enforcing 之后,竟然有一堆服务无法顺利启动,都会跟你说在 /lib/xxx 里面的数据没有权限读取,所以启动失败。这大多是由于在重新写入 SELinux type (Relabel) 出错之故,使用 Permissive 就没有这个错误。最简单的处理办法就是在Permissive的状态下,使用" restorecon -Rv / "重新还原所有SELinux 的类型。

相关推荐
用户805533698038 小时前
主线 U-Boot 上 RK3506:和闭源 rkbin 拔河的三个隐性契约
linux·嵌入式
用户034095297918 小时前
linux fcitx 5 雾凇拼音 设置在中文输入法下仍然输入英文标点
linux
乘云数字DATABUFF9 小时前
5分钟部署开源APM Databuff:OpenTelemetry全链路追踪入门实战
运维·后端
Web3探索者2 天前
可视化服务器管理和传统命令行区别是什么?新手教程:Linux 运维到底该用图形界面还是 SSH 命令行?
linux·ssh
zylyehuo2 天前
Linux系统中网线与USB网络共享冲突
linux
荣--2 天前
一键部署不是为了省时间 —— 它是把"买来的 PaaS"变成"自己的平台"的拐点
运维·zabbix·工程化·一键部署·平台化·边界设计
江华森2 天前
动手实战学 Docker — 从零到集群编排完全指南
运维
Avan_菜菜3 天前
FRP 内网穿透完整实战:从 HTTP 映射到 HTTPS 自签代理
运维·nginx·https
Sokach10153 天前
Linux Shell 脚本从零到能用:一个新手的一天学习总结
linux
SelectDB4 天前
Litefuse 开源并推出单进程轻量模式,25 秒就能跑起来的 Agent 可观测与评估平台
运维·后端·自动化运维