SELinux 损坏了?现在无法启动启用了 SELinux 的 CentOS 7

SELinux 损坏了?现在无法启动启用了 SELinux 的 CentOS 7

我们最近经历了一次电源故障和备用发电机同时故障,严重到需要安全关闭所有服务器,因为它们的 UPS 正在耗尽电量。

在将一台 CentOS 7.4.1708 服务器重新启动后(这是几个月来第一次“重启”,但就 CentOS 更新而言,它是最新的),我遇到了一个难题,无法在启用 SELinux 的情况下启动它。我进行了广泛的研究,但似乎找不到其他人遇到过这种情况的证据,我也不知道下一步该怎么做。我希望这里有人能提供一些想法。

以下是时间线:

  1. 已启动
  2. 由于多项服务未启动导致启动失败:

    FAILED Failed to start Login Service.
    See 'systemctl status systemd-logind.service' for details.
    FAILED Failed to start Authorization Manager.
    See 'systemctl status polkit.service' for details.
    DEPEND Dependency failed for Dynamic System Tuning Daemon.
    
  3. 提示我使用selinux=0grub重启

  4. 这有效并使系统运行,但由于 SELinux 被禁用,这对我们来说不可行,只能作为一种临时解决方法

  5. 已关注在网上找到的建议

    sudo yum reinstall selinux-policy-targeted
    
  6. 重新启动

  7. 启动现在失败,原因是:

    Failed to load SELinux policy, freezing
    
  8. selinux=0再次使用 grub重新启动

  9. 成立更多建议如此执行:

    sudo yum reinstall selinux-policy-targeted
    sudo touch /.autorelabel
    

    并设置允许/etc/selinux/config

  10. 重新启动

  11. 可以看到如下的横幅:

    Warning -- SELinux targeted policy relabel is required.
    Relabeling could take a very long time, depending on file
    system size and speed of hard drives.
    

    但系统并没有真正执行重新标记,而是立即重新启动——速度太快而看不到任何其他输出

  12. 启动再次失败,并出现原来的错误。

    唉,我们又回到这里了。我发现问题/.autorelabel仍然存在,说明重新贴标签并没有发生。不过,令我惊讶的是,我们又回到了错误原点。

    还要记住,SELinux 仍然处于宽容模式,而不是强制模式。

最终的结果是,我无法在宽容模式或强制模式下启用 SELinux,这是不行的。

我该如何继续?

答案1

总结:一切都归结为 的无效值SELINUXTYPE

确保SELINUXTYPE具有有效值,然后根据需要重新标记(例如,如果您在诊断期间在 SELinux 关闭的情况下启动),重新启动并打开香槟。


由于某种原因,在某个时间点,/etc/selinux/config获得了该设置SELINUXTYPE=permissive

对于该参数来说,这不是一个有效的选项,并且根据 Dbus、登录服务和授权管理器失败的原因列出,它似乎使该值回落到“默认值”:

Failed to open "/etc/selinux/default/contexts/dbus_contexts": No such file or directory

selinux-policy-default这很麻烦,因为CentOS 7 中没有软件包(例如,在 Debian 中,它在 Jessie 中被故意删除所以我想这里的情况也是如此)。

restorecon我怀疑这也是为什么尝试使用(从单用户模式,以及从通过 到达的 shell )重新标记文件系统init=/sbin/sh会导致令人困惑的“没有这样的文件或目录”输出,并且getenforce仍然会无缘无故地显示“已禁用”。

切换selinux-policy-targeted安装后,我修复了配置SELINUXTYPE=targeted(我相信它应该一直如此),然后再次重新启动enforcing=0 autorelabel=1

然后进行重新标记。之后,系统正常启动。

答案2

您应该能够使用以下命令重新标记文件系统:

# restorecon -rv /

我不能 100% 确定这是否在禁用模式下有效,您可能需要处于许可/强制模式。

您可以在启用 selinux 的情况下启动吗init=/bin/sh

答案3

您应该将其启动到恢复模式,然后启动 root shell 终端并设置 disabled=1,然后恢复而不重新启动,然后在配置文件上禁​​用它...然后卸载 selinux,然后重新启动

答案4

有时,即使正确设置了 SELinuxtype,也会因为 SELinux 策略而遇到同样的问题。并且在启动屏幕上显示以下行:
Failed to load SELinux policy, freezing
要解决此问题,另一种解决方法是先将 SELinux 设置为permissive模式,
然后重新启动机器,您将在重新启动屏幕上看到 SELinux 生成策略。之后,您可以再次将其设置为强制模式,而不会出现问题。

在解决问题之前,您可以检查策略开发包。
sudo yum install policycoreutils-devel
当您尝试安装它时,也许会收到错误。这主要是因为冲突包,即使对于 Red Hat 8 也会出现这种情况

相关内容