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