Linux 開機過程中出現 unable to load selinux policy. machine is in enforcing mode. halting now. 導致核心恐慌,通常由兩種情境引起:SELinux 設定錯誤與虛擬機非正常關機導致檔案系統不一致。本文針對兩種情境提供 GRUB 參數修正與根本修復方案。
# 錯誤寫法(大小寫、拼寫錯誤)
SELINUX=disable # 應為 disabled
# 或
SELINUX=permissive # 拼寫錯誤
核心讀取設定失敗,預設回落到 enforcing 模式,但政策檔案未正確載入,導致開機中止。
linux / linuxefi 開頭的行,行尾加入:enforcing=0
vi /etc/selinux/config
# 正確內容:
SELINUX=disabled # 或 enforcing / permissive
# 重開機驗證
reboot
# 檢查當前狀態
getenforce
sestatus
# 修正設定
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
# 若需啟用 SELinux,請依序:permissive → 重開機 → enforcing
/etc/inittab 顯示初始化失敗,含 unable to load selinux policy。selinux=0
# 掛載根分區檢查(若為 LVM 需先 vgchange -ay)
fsck -y /dev/mapper/rootvg-rootlv
# 或
fsck -y /dev/sda2
# 修復 SELinux 標籤(關鍵)
touch /.autorelabel
reboot
virsh shutdown vm_name 等待超時後再 virsh destroy。| 模式 | 行為 | 適用場景 |
|---|---|---|
enforcing | 強制執行政策,拒絕違規存取並記錄 | 生產環境預設 |
permissive | 僅記錄違規,不拒絕 | 除錯、政策開發、相容性測試 |
disabled | 完全停用 SELinux(核心不載入政策) | 不支援 SELinux 的應用、特定嵌入式環境 |
注意: 在 enforcing ↔ disabled 切換時,必須重開機 並經過 /.autorelabel 重新標記檔案安全上下文,否則會導致權限錯誤或再次出現 unable to load selinux policy。
sestatus
# 輸出應顯示:
SELinux status: disabled (或 enforcing/permissive)
# 無 "unable to load selinux policy" 錯誤即成功
enforcing=0 進入 → 修正 /etc/selinux/config 拼寫/大小寫 → 重開機。selinux=0 進入 → fsck 修復檔案系統 → touch /.autorelabel 重標記 → 重開機。enforcing=0 臨時設為寬容模式(政策仍載入);selinux=0 完全停用 SELinux 子系統(政策不載入)。Ubuntu 清理舊核心釋放 /boot 空間:安全移除不再使用的 Linux Kernel
find 命令報錯「paths must precede expression」根因與解決:通配符展開陷阱
Linux 掛載 ISO 檔案完整指南:mount 指令與圖形化工具 Furius ISO Mount
Linux 雙伺服器 IP 無縫切換實戰:ifconfig 別名介面 + arping 免費 ARP 宣告秒級遷移
Linux Shell 指令碼程式設計入門:變型、參數與控制結構完整指南
Linux ext3grep 誤刪文件恢復實戰指南:安裝、參數詳解與恢復流程