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 仍然會出現這種情況

相關內容