Azure Linux 虛擬機器的 SSH 連線因 SELinux 設定錯誤而失敗
適用於:✔️ Linux VM
注意
本文所參考的 CentOS 是一種 Linux 發行版,且將到達生命周期結束(EOL)。 請據以考慮您的使用和規劃。 如需詳細資訊,請參閱 CentOS 生命週期結束指引。
本文提供因 SELinux 設定錯誤而無法連線至 Azure 虛擬機器的安全殼層 (SSH) 連線問題的解決方案。
Background
Unix 安全性模型是以 Discretionary 存取控制 (DAC) 為基礎。 安全性增強的Linux (SELinux) 會使用核心模組和用戶空間工具,實作Linux的必要 存取控制 (MAC)。 MAC 提供更受控制的資源存取環境,並移除根使用者存取操作系統 (OS) 上所有資源的能力,而不受限制。 它也會利用傳統的 Unix 安全性模型來降低多種安全性風險。
不同的發行版包括現成的 SELinux,或提供直接的方式來啟用核心支援並安裝用戶空間工具。 如需詳細資訊,請參閱下列來自某些主要 Linux 提供者的 SELinux 文章:
Azure 上的 Red Hat 型映射已啟用 SELinux;其他散發套件則不會。 當您在Ubuntu中使用SELinux時,此散發套件上有其未預期的狀態警告。 Ubuntu 為 MAC 實作不同的解決方案,稱為 AppArmor。
必要條件
請確定 已在Linux VM中啟用序列主控台 並正常運作。
徵兆
SELinux 設定錯誤可能會導致OS無法載入 SELinux 原則,這會阻止 OS 完成開機。
從 Azure 入口網站 或透過 Azure CLI 檢查序列主控台。 下列訊息會出現在輸出結尾附近:
SELinux 組態是由系統管理員所管理。 系統管理員可以使用下列其中一種方法來解決此問題。
解決方案 1:使用序列主控台關閉 SELinux 啟動 VM
從 Azure 序列主控台觸發重新啟動 VM(硬式)。
使用 ESC 鍵中斷 GRUB 功能表中的 VM。
選取 E 以修改 GRUB 功能表中的第一個核心專案。
移至這一行,
linux16
並新增selinux=0
以暫時停用 SELinux。驗證並更正 中的
/etc/selinux/config
SELinux 組態。例如,一個常見的錯誤是將
SELINUXTYPE
索引鍵設定為索引鍵所使用的SELINUX
其中一個值。 請參閱下列螢幕擷取畫面作為範例:請注意最後一行,
SELINUXTYPE=disabled
。 索引SELINUXTYPE
鍵應設定為targeted
、minimum
或mls
,disabled
而不是 。 下列螢幕快照顯示正確的設定:
解決方案 2:使用救援 VM 修復 SELinux 設定錯誤
提示
如果您有最近的 VM 備份, 請從備份 還原 VM 以修正設定問題。
如果 Azure 序列主控台 無法在特定 VM 中運作,或不是訂用帳戶中的選項,請使用救援/修復 VM 針對此問題進行疑難解答。 使用 VM 修復命令 來建立修復 VM,該 VM 具有鏈接受影響 VM 的 OS 磁碟復本。 使用 chroot 掛接修復 VM 中的 OS 檔案系統複本。
注意
或者,您可以使用 Azure 入口網站手動建立救援 VM。 如需詳細資訊,請參閱使用 Azure 入口網站將 OS 磁碟連結至復原 VM,以針對 Linux VM 進行疑難排解。
驗證並更正 中的
/etc/selinux/config
SELinux 組態。 若要這樣做,請遵循解決方案 1:從序列主控台關閉 SELinux 的啟動 VM 中的步驟 5。修正 SELinux 組態之後,請執行下列動作:
- 結束 chroot。
- 從救援/修復 VM 卸除文件系統的複本。
az vm repair restore
執行 命令,將修復的OS磁碟與VM的原始OS磁碟交換。 如需詳細資訊,請參閱使用 Azure 虛擬機修復命令修復 Linux VM 中的步驟 5。- 查看 Azure 序列主控台或嘗試連線到 VM,驗證 VM 是否能夠開機。
下一步
如果問題不是因為 SELinux 設定錯誤,請參閱針對 Azure Linux 虛擬機器 開機錯誤進行疑難解答,以取得進一步的疑難解答選項。
與我們連絡,以取得說明
如果您有問題或需要相關協助,請建立支援要求,或詢問 Azure community 支援。 您也可以向 Azure 意見反應社群提交產品意見反應。