Portal:SELinux

跳转到:导航搜索
欢迎来到 SELinux 门户
SELinux 是一种强制访问控制系统 (MAC)。


我应该为什么在强制模式下启用 SELinux?
要理解 SELinux 的重要性,我们需要了解 Linux 在没有它的情况下如何工作。

默认情况下,Linux 在安全控制方面非常有限 - 您是 root 用户,没有任何限制可以执行任何操作,或者您是用户,无法与其他用户的的文件或进程交互。像 sudo 这样的工具允许您成为 root 用户并删除您之前拥有的所有限制。

这就是为什么 Linux 上的安全问题(例如权限提升)如此具有破坏性。一旦您能够成为 root 用户,您将没有任何限制。

此外,拥有自己文件的用户可以自行决定更改所有者以及更改这些文件的权限。这可能会导致用户意外地将他们的秘密泄露给系统上的其他帐户。

SELinux 改变了这一点。SELinux 为每个文件和进程贴上标签,允许存在更严格的规则,甚至可以限制 root 用户可以执行的操作。这可以防止某些漏洞起作用,并且如果漏洞确实成功并且攻击者成为 root 用户,他们仍然受到限制,并且在他们可以执行或查看的内容方面受到限制。由于这是一个强制访问控制系统,用户无法逃避或修改规则,从而防止错误。

阅读更多关于 SELinux 可以和不能做的事情。

SELinux 是如何做到这一点的?
SELinux 为系统上的所有内容赋予一个类型。这包括进程(例如 sshd_t)、文件(例如 user_home_t)甚至网络套接字(ldap_port_t)。策略定义了允许或拒绝从一种类型到另一种类型的操作的规则。

您的用户(user_t)可能会尝试读取主目录中的文件(user_home_t),这是允许的。

但是,如果攻击者攻陷了一个像 Web 服务器这样的进程(httpd_t),然后尝试写入 root 的 ssh 密钥(root_home_ssh_t)以获取后门,他们将被拒绝此权限。

SELinux 在 (open)SUSE 上是如何实现的?

openSUSE SELinux 策略使用 Fedora SELinux 策略 作为上游,并进行了一些 openSUSE 特定的更改。这意味着,大多数 Fedora 的文档也适用于 openSUSE。

  • openSUSE SELinux 策略的仓库可以在 这里 找到。
  • 与 fedora 策略的主要区别记录在 这里
阅读更多关于 SELinux 概念的内容。
报告 SELinux 错误
要报告 SELinux 的问题,请在 Bugzilla 中打开一个错误。请确保您遵循以下指南,以便可以快速找到并处理该错误。然后我们将与您联系,并在需要时请求更多信息。

您可以使用错误创建模板快速打开错误:Tumbleweed 的 SELinux 错误创建模板在 Bugzilla 上:openSUSE.orgSUSE.com

摘要行

编写一个包含 [SELinux] 前缀标签的摘要行。一个有效的摘要行示例可以是

[SELinux] transactional-update 在 cloud-init 下 selinux=permissive 模式下无法运行

描述

请在您的错误的描述中说明以下信息

  • 操作系统:您可以通过例如运行找到它:hostnamectl | grep "Operating System"
  • SELinux 状态、模式和策略名称:您可以通过运行找到它:sestatus
  • SELinux 策略版本和仓库:您可以通过例如运行找到它:zypper info selinux-policy
  • 受 SELinux 问题影响的软件(包括版本)和错误消息
  • SELinux 审计日志:您可以使用 ausearch 检索审计日志。
    AVC 列表至关重要!请始终在错误中提供此信息。
    例如,要检索自启动以来的所有 SELinux 违规行为
 $ ausearch -ts boot -m avc,user_avc,selinux_err,user_selinux_err
  • 准确的重现步骤,即如何配置和使用系统以触发 AVC
  • 任何其他重要细节:例如,发生错误时您尝试完成什么,其他日志
 NOTE: The output of setroubleshoot does not add any value, you do not have to provide it.

常见陷阱

在打开错误之前,请检查您的问题是否可能是由常见陷阱引起并且可以轻松解决。这些常见陷阱包括

  • 将系统从“宽松”模式设置为“强制”模式,而没有重新标记:如果您最近从“宽松”模式切换到“强制”模式,请检查您是否使用以下命令触发了重新标记:touch /.autorelabel。否则,在“宽松”模式期间文件系统上的标签可能会发生变化,并在以“强制”模式运行时导致问题。
  • SELinux 拒绝了常见的 workload:如果您运行一个非常常见的 workload 并且 SELinux 拒绝了该 workload 的一部分,这可能是因为您需要为此启用 SELinux 布尔值。检查 ausearch -m avc -ts today | audit2allow 以获取建议的布尔值。如果没有建议,那么您的 issue 很可能是一个 bug,您应该报告它。如果建议了布尔值,您可以安装 selinux-policy-doc 并检查该特定服务的 SELinux 手册页来调查是否是正确的布尔值 man SERVICENAME_selinux。布尔值可以永久启用 setsebool -P BOOLEANNAME=1
如有疑问,请仍然打开一个错误。
打包人员的文档
(open)QA / 测试人员的文档
SELinux 爱好者的文档
了解更多关于 SELinux 的信息
状态

openSUSE MicroOS:
SELinux 在强制模式下启用

openSUSE Tumbleweed:
自 Build 20250211 起,SELinux 默认在强制模式下启用。AppArmor 可以作为替代方案选择。
迁移到 SELinux 的指南

openSUSE Leap 16:
计划默认在强制模式下启用 SELinux。AppArmor 可以作为替代方案选择。

openSUSE Leap 15.x:
默认是 AppArmor。SELinux 可以手动启用,但错误当前将以较低的优先级处理
在 Leap 上启用 SELinux