Red Hat Training

A Red Hat training course is available for RHEL 8

1.4. SELinux 构架和软件包

SELinux 是一个内置在 Linux 内核中的 Linux 安全模块(LSM)。内核中的 SELinux 子系统由安全策略驱动,该策略由管理员控制并在引导时载入。系统中所有与安全性相关的、内核级别的访问操作都会被 SELinux 截取,并在加载的安全策略上下文中检查。如果载入的策略允许操作,它将继续进行。否则,操作会被阻断,进程会收到一个错误。

SELinux 决策(如允许或禁止访问)会被缓存。这个缓存被称为 Access Vector Cache(AVC)。通过使用这些缓存的决定,可以较少对 SELinux 策略规则的检查,这会提高性能。请记住,如果 DAC 规则已首先拒绝了访问,则 SELinux 策略规则无效。原始审计消息会记录到 /var/log/audit/audit.log,它们以 type=AVC 字符串开头。

在 RHEL 8 中,系统服务由 systemd 守护进程控制; systemd 启动和停止所有服务,用户和进程使用 systemctl 实用程序与 systemd 通信。systemd 守护进程可以参考 SELinux 策略,检查调用进程标签以及调用者试图管理的单元文件标签,然后询问 SELinux 是否允许调用者的访问。这个方法可控制对关键系统功能的访问控制,其中包括启动和停止系统服务。

systemd 守护进程也可以作为 SELinux 访问管理器使用。它检索运行 systemctl 或向 systemd 发送 D-Bus 消息的进程标签。然后守护进程会查找进程要配置的单元文件标签。最后,如果 SELinux 策略允许进程标签和单元文件标签之间的特定访问,systemd 就可以从内核中检索信息。这意味着,需要与特定服务交互的 systemd 进行交互的应用程序现在可以受 SELinux 限制。策略作者也可以使用这些精细的控制来限制管理员。

如果进程向另一个进程发送 D-Bus 消息,如果 SELinux 策略不允许这两个进程的 D-Bus 通信,则系统会打印 USER_AVC 拒绝消息,以及 D-Bus 通信超时。请注意,两个进程间的 D-Bus 通信会双向运行。

重要

为了避免不正确的 SELinux 标记以及后续问题,请确定使用 systemctl start 命令启动服务。

RHEL 8 提供以下用于 SELinux 的软件包:

  • 策略:selinux-policy-targeted, selinux-policy-mls
  • 工具: policycoreutils,policycoreutils-gui,libselinux-utils,policycoreutils-python-utils,setools-console,checkpolicy