面向使用 CentOS 的初学者的 SELinux
安全增强型 Linux 或 SELinux 由 NSA 开发,旨在防止恶意访问和入侵,是大多数现代 Linux 发行版附带的高级访问控制功能。 SELinux 被定义为强制访问控制 (MAC) 系统,作为自主访问控制系统 (DAC) 的替代品而开发。
在大多数现代系统中,SELinux 看起来令人畏惧并且很难实现。然而,配置 SELinux 在增强安全性和故障排除方面都有巨大的好处。
本教程将讨论 SELinux 实现的各种概念,并探索实现 SELinux 的各种实用方法。
注意:在开始之前,最好以 root 用户或 sudoers 组中的用户身份使用本教程中的命令。
安装 SELinux 软件包
让我们安装各种 SELinux 软件包,这将有助于使用 SELinux 策略。
在继续安装 SELinux 软件包之前,最好先验证当前系统上安装了哪些软件包。
在大多数 REHL 发行版的安装中,默认情况下会安装一些软件包。这些套餐包括:
setools – 该包用于监视日志、查询策略和上下文文件管理。
policycoreutils-python – 提供用于管理 SELinux 的 python 核心实用程序
policycoreutils – 该软件包还提供了用于管理 SELinux 的实用程序。
mcstrans – mcstrans 提供 SELinux 翻译守护进程,它将各种级别翻译成易于理解的简单格式。
setools-console – 与 setools 类似。
Selinux-policy – 提供配置SELinux策略的参考
Selinux-policy-targeted – 类似于 SELinux-policy
Libselinux-utils – SELinux libselinux 实用程序,有助于管理 SELinux
Setroubleshoot-server – SELinux 故障排除工具
要验证系统上已安装哪些软件包,您可以使用 rpm –qa 命令并将结果通过管道传输到 SELinux 的 grep,如下所示:
libselinux-utils-2.9-4.el8_3.x86_64
rpm-plugin-selinux-4.14.3-4.el8.x86_64
selinux-policy-targeted-3.14.3-54.el8_3.2.noarch
python3-libselinux-2.9-4.el8_3.x86_64
selinux-policy-3.14.3-54.el8_3.2.noarch
libselinux-2.9-4.el8_3.x86_64
这将为您提供为 SELinux 支持而安装的所有软件包的输出
如果您的系统上未安装所有 SELinux 软件包,请使用 yum 安装它们,如以下命令所示:
SELinux 模式和状态
现在让我们开始使用 SELinux,特别是 SELinux 模式。
SELinux 模式
启用后,SELinux 可以是三种可能的模式:
执行
宽容的
残疾人
强制模式
如果SELinux模式强制执行,它将确保任何用户或进程对系统的未经授权的访问不会被拒绝。强制模式还保留任何未经授权的访问尝试的日志。
宽容模式
宽容模式的作用类似于部分启用的 SELinux 状态。在此模式下,不会拒绝任何访问,因为 SELinux 不会在此模式下强制执行其策略。但是,宽容模式确实会保留任何策略违规尝试的日志。这种模式对于在完全启用之前进行测试非常有效,因为用户和组件仍然可以与系统交互,但仍然收集日志。这允许您以您认为合适的方式微调系统。
禁用模式
禁用模式也可以被视为禁用状态,其中 SELinux 被禁用并且不提供任何安全性。
SELinux 状态
一旦 SELinux 安装在系统上。它可以有二进制状态:启用和禁用。要查看 SELinux 的状态,请使用以下命令:
Disabled
上面的输出表明 SELinux 当前已禁用。
您还可以使用 sestatus 命令,如下所示:
SELinux status: disabled
启用和禁用 SELinux
SELinux 的状态和配置由位于 /etc/selinux/config 中的配置文件处理。可以使用cat命令查看其内容。
#This file controls the state of SELinux on the system.
#SELINUX= can take one of these three values:
#enforcing - SELinux security policy is enforced.
#permissive - SELinux prints warnings instead of enforcing.
#disabled - No SELinux policy is loaded.
SELINUX=enforcing
#SELINUXTYPE= can take one of these three values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
从上面的输出中,我们启用了两个主要指令。 SELINUX 指令指定了 SELinux 的配置模式。 SELINUXTYPE 指令指定 SELinux 策略集。默认情况下,SELinux 使用有针对性的策略,允许您自定义访问控制权限。另一种策略是多级安全性或 MLS。
您可能会发现某些版本中存在最低政策。
[ls -l
total 4
-rw-r--r-- 1 root root 548 Feb 16 22:40 config
drwxr-xr-x 1 root root 4096 Feb 16 22:43 mls
-rw-r--r-- 1 root root 2425 Jul 21 2020 semanage.conf
drwxr-xr-x 1 root root 4096 Feb 16 22:40 targeted
现在让我们看看如何在系统上启用 SELinux。我们建议首先将 SELINUX 模式设置为宽容而非强制。
现在将 SELINUX 指令编辑为:
保存文件后,重新启动系统。
注意:我们强烈建议在强制执行 SELinux 之前将 SELINUX 指令设置为 permissive。
重新引导系统后,检查 /var/log/messages 中 SELinux 报告的任何日志。
接下来,确保没有错误并通过在 /etc/selinux/config 中设置要强制执行的指令来强制执行 SELinux
最后,您可以使用 sestatus 命令查看 SELinux 状态:
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinux
Loaded policy name: targeted
Current mode: enforcing
Mode from config file: error (Success)
Policy MLS status: enabled
Policy deny_unknown status: allowed
Memory protection checking: actual(secure)
Max kernel policy version: 31
您还可以使用 setenforce 命令在各种 SELinux 模式之间切换。例如,要将模式设置为宽容,请使用以下命令:
此模式是临时的,重启后将恢复为配置文件中的模式。
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinux
Loaded policy name: targeted
Current mode: permissive
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 初学者感到困惑,我们不会深入探讨 SELinux 策略是如何实施的,而只是简单地介绍一下,让您有一个概念。
SELinux 通过实施安全策略来工作。 SELinux 策略是指用于定义系统中每个对象的访问权限的规则。对象是指用户、进程、文件和角色。
每个上下文都以用户:角色:类型:级别的形式定义。
例如,在主目录中创建一个目录并查看其 SELinux 安全上下文,如以下命令所示:
ls –Z ~/ | grep linux
这将显示输出,如下所示:
您还可以找到安全上下文如下的其他目录:
您可能会意识到上面的输出遵循 user:role:type:level 的语法。
结论
这是使用 CentOS 8 的 SELinux 初学者教程。虽然该教程是为初学者设计的,但它足以让您在 SELinux 中上手并消除 SELinux 的令人生畏的本质。
感谢您的阅读。