SELinux 及其工作原理

SELinux 是 NSA(国家安全局)于 2000 年创建的一个项目,旨在为 Linux 系统中的访问控制和用户许可、进程、文件、设备等提供更严格的安全措施。

要了解它是如何工作的,请将每个服务器文件、目录、用户、端口、进程或设备视为一个资源。每个资源都有一个标签(也称为“上下文”),该标签定义了其角色类型,并将表征允许的权限和操作。

包括用户和进程在内的每个操作系统资源都具有某种类型的访问控制属性。此资源类型也称为安全上下文。

安全上下文具有三个元素:用户、角色和类型标识符。每个元素的标识符名称在 SELinux 策略规则中定义。但在一个普通的政策中,99% 的决定都是根据类型做出的。

SELinux 允许或拒绝基于规则的操作,即“上下文 X 的进程可以与上下文 Y 的某事物相关联地这样做”。简而言之:在 SELinux 中,上下文就是一切。

当上下文应用于进程时,该类型称为“域”。类型和域之间没有实际区别,因为所有三个组件都只是名称。政策规则赋予它们意义。

猜测示例:当某个角色中的程序要访问文件等资源时,内核模块会在某些操作即将发生(“钩子”)之前被要求授予权限。某些角色规则应允许此类操作访问此资源类型。如果不是,则权限被拒绝并且无法执行操作系统操作。

SELinux 通过添加 -Z 选项来修改许多系统命令以显示对象和主题的安全上下文。例如,ls -Z 显示文件系统对象的安全上下文,而 ps -Z 显示进程的安全上下文。

上下文与经典的 UNIX 用户 ID、组 ID 或其他内容完全无关。

SELinux 政策

在您的系统中启用 SELinux 时,一切都应该完美无缺,因为这个安全系统将默认包含名为策略的规则,以允许正常使用大多数 Linux 软件。

SELinux 安全引擎的核心是它的策略。策略顾名思义:定义系统中所有内容的安全性和访问权限的一组规则。当我们说一切时,我们指的是用户、角色、进程和文件。该策略定义了这些实体中的每一个如何相互关联。

SELinux 策略定义了用户对角色的访问、对域的角色访问以及对类型的域访问。首先必须授权用户进入角色,然后必须授权角色访问域。该域又被限制为只能访问某些类型的文件。

有两种不同的策略类型:

  • Targeted policy – 基于范式的策略,即只有少数选定的应用程序应受 SELinux 限制。所有其他活动都依赖于良好的旧 UNIX 安全性
  • 严格策略——试图控制所有 SELinux 活动的策略

如前所述,SELinux 策略并不能取代传统的 DAC(用户组其他)安全性。如果 DAC 规则禁止用户访问文件,则不会评估 SELinux 策略规则,因为第一道防线已阻止访问。在评估 DAC 安全性后,SELinux 安全决策开始发挥作用。

当启用 SELinux 的系统启动时,策略会加载到内存中。SELinux 策略采用模块化格式,很像在启动时加载的内核模块。就像内核模块一样,它们可以在运行时从内存中动态添加和删除。SELinux 使用的策略存储会跟踪已加载的模块。sestatus 命令显示策略存储名称。semodule -l 命令列出当前加载到内存中的 SELinux 策略模块。

为了感受一下,让我们运行 semodule 命令:

semodule -l | less

如何准备您的系统以使用 SELinux?

即使您的系统中是否激活了 SELinux,大多数用于管理和更改 SELinux 配置的工具都是通过名为 policycoreutils 的“非必需”包安装在 RHEL 8 中的。因此,首先,通过尝试再次安装来确保在开始本指南之前已在系统中安装了此软件包。 现在我们应该有一个加载了所有 SELinux 包的系统。

sudo dnf install policycoreutils policycoreutils-python

 

我的服务器中有 SELinux Active 吗?

sestatus 用于查看系统上正在运行的 SELinux 的当前状态。
这是启用 SELinux 后在 RHEL 8 上得到的结果:

# sestatus
SELinux status: enabled
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinux
Loaded policy name: targeted
Current mode: enforcing
Mode from config file: enforcing
Policy MLS status: enabled
Policy deny_unknown status: allowed
Memory protection checking: actual (secure)
Max kernel policy version: 31

这向您展示了 SELinux 已启用和强制执行,我们可以继续本教程。

如果您禁用了 SELinux,sestatus 执行会给您不同的结果: 要激活 SELinux 内核模块,您必须编辑 /etc/sysconfig/selinux 文件并在文件中配置参数,如下所示: 然后,重新启动系统,您将获得 SELinux启用。

sestatus
SELinux status: disabled




SELINUX=enforcing
SELINUXTYPE=targeted

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

请叫我曾阿牛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值