我们最近经历了一次电源故障和备用发电机同时故障,严重到需要安全关闭所有服务器,因为它们的 UPS 正在耗尽电量。
在将一台 CentOS 7.4.1708 服务器重新启动后(这是几个月来第一次“重启”,但就 CentOS 更新而言,它是最新的),我遇到了一个难题,无法在启用 SELinux 的情况下启动它。我进行了广泛的研究,但似乎找不到其他人遇到过这种情况的证据,我也不知道下一步该怎么做。我希望这里有人能提供一些想法。
以下是时间线:
- 已启动
由于多项服务未启动导致启动失败:
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.
提示这我使用
selinux=0
grub重启这有效并使系统运行,但由于 SELinux 被禁用,这对我们来说不可行,只能作为一种临时解决方法
已关注在网上找到的建议:
sudo yum reinstall selinux-policy-targeted
重新启动
启动现在失败,原因是:
Failed to load SELinux policy, freezing
selinux=0
再次使用 grub重新启动成立更多建议如此执行:
sudo yum reinstall selinux-policy-targeted sudo touch /.autorelabel
并设置允许
/etc/selinux/config
重新启动
可以看到如下的横幅:
Warning -- SELinux targeted policy relabel is required. Relabeling could take a very long time, depending on file system size and speed of hard drives.
但系统并没有真正执行重新标记,而是立即重新启动——速度太快而看不到任何其他输出
启动再次失败,并出现原来的错误。
唉,我们又回到这里了。我发现问题
/.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 也会出现这种情况