Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> 關於 Linux

Linux 開機報錯 "unable to load selinux policy" 兩大原因與解決方案

編輯:關於 Linux

Linux 開機過程中出現 unable to load selinux policy. machine is in enforcing mode. halting now. 導致核心恐慌,通常由兩種情境引起:SELinux 設定錯誤與虛擬機非正常關機導致檔案系統不一致。本文針對兩種情境提供 GRUB 參數修正與根本修復方案。

情境一:手動修改 /etc/selinux/config 導致

錯誤操作

# 錯誤寫法(大小寫、拼寫錯誤)
SELINUX=disable   # 應為 disabled
# 或
SELINUX=permissive # 拼寫錯誤

核心讀取設定失敗,預設回落到 enforcing 模式,但政策檔案未正確載入,導致開機中止。

GRUB 臨時繞過方案

  1. 開機 GRUB 選單按 e 進入編輯模式。
  2. 找到以 linux / linuxefi 開頭的行,行尾加入:
enforcing=0
  1. 按 Ctrl+x 或 F10 啟動。
  2. 進入系統後立即修正設定檔:
vi /etc/selinux/config
# 正確內容:
SELINUX=disabled   # 或 enforcing / permissive
# 重開機驗證
reboot

永久修復(若已進入系統)

# 檢查當前狀態
getenforce
sestatus

# 修正設定
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
# 若需啟用 SELinux,請依序:permissive → 重開機 → enforcing

情境二:KVM 虛擬機強制關機 / 實體機斷電導致

現象

  • 虛擬機宿主機強制關機,客體未正常關機。
  • 重開機進入 GRUB,選擇核心後出現錯誤畫面,進入 GRUB 命令列。
  • 嘗試執行 /etc/inittab 顯示初始化失敗,含 unable to load selinux policy。

GRUB 臨時繞過方案

  1. GRUB 選單按 e 編輯核心行。
  2. 行尾加入:
selinux=0
  1. 按 Ctrl+x 啟動。
  2. 進入系統後執行檔案系統修復:
# 掛載根分區檢查(若為 LVM 需先 vgchange -ay)
fsck -y /dev/mapper/rootvg-rootlv
# 或
fsck -y /dev/sda2

# 修復 SELinux 標籤(關鍵)
touch /.autorelabel
reboot

根本預防

  • 虛擬機安裝 QEMU Guest Agent 並啟用 ACPI 關機信號傳遞。
  • 宿主機關機腳本優雅關閉客體:virsh shutdown vm_name 等待超時後再 virsh destroy。
  • 實體機配置 UPS 聯動關機腳本。

SELinux 模式說明

模式行為適用場景
enforcing強制執行政策,拒絕違規存取並記錄生產環境預設
permissive僅記錄違規,不拒絕除錯、政策開發、相容性測試
disabled完全停用 SELinux(核心不載入政策)不支援 SELinux 的應用、特定嵌入式環境

注意: 在 enforcing ↔ disabled 切換時,必須重開機 並經過 /.autorelabel 重新標記檔案安全上下文,否則會導致權限錯誤或再次出現 unable to load selinux policy。

驗證修復結果

sestatus
# 輸出應顯示:
SELinux status:                 disabled (或 enforcing/permissive)
# 無 "unable to load selinux policy" 錯誤即成功

總結

  • 設定檔錯誤:GRUB 加 enforcing=0 進入 → 修正 /etc/selinux/config 拼寫/大小寫 → 重開機。
  • 非正常關機:GRUB 加 selinux=0 進入 → fsck 修復檔案系統 → touch /.autorelabel 重標記 → 重開機。
  • 兩者核心差異:enforcing=0 臨時設為寬容模式(政策仍載入);selinux=0 完全停用 SELinux 子系統(政策不載入)。
Copyright © Windows教程網 All Rights Reserved