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 的类型。

相关推荐
还卿一钵无情泪7 小时前
Unsloth 微调 构建自己的大模型 没有GPU也能微调
linux·开发语言·人工智能·python·大模型·nlp·unsloth
高山有多高7 小时前
【Linux笔记】IO模型
linux
不会就选b7 小时前
Linux之TCP理论<1>
linux·运维·服务器
小π军8 小时前
操作系统面试题
java·linux·服务器
倔强的石头1069 小时前
应用账号最小权限实践:读写账号、报表账号、运维账号分层
java·运维·开发语言
Lsetea9 小时前
curl用IP测试HTTPS报证书不匹配:--resolve与Host头别混用
linux·https·ssl证书·openssl·curl
Hao2859 小时前
Windows11 下把 WSL2 Ubuntu 26.04 装到 D 盘完整
linux
Android系统攻城狮10 小时前
Linux Gstreamer深度解析之gst_audio_encoder_get_frame_samples_min调用流程与实战(六十)
linux·运维·服务器·音视频·gstreamer音视频·音视频进阶·gstreamer音视频进阶
_upupup10 小时前
Linux中的自动化构建——make/Makefile
linux·运维·自动化
HEJOO911 小时前
Linux 设备驱动系列——使用全局工作队列
java·linux·算法