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 的 Bugzilla 中的 SELinux 错误创建模板,地址为 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:
SELinux 自 Build 20250211 起默认启用强制模式。AppArmor 可以作为替代方案选择。
迁移到 SELinux 的指南

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

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