WSL[2] 如何對來賓 Linux 系統造成限制?

WSL[2] 如何對來賓 Linux 系統造成限制?

當我在 Windows PC 上安裝 WSL2 後,我就安裝了適配CentOS 8.2版本。當我探索它時,我發現我可以開箱即用地在主機的 NTFS 檔案系統中進行讀寫。它也連接到互聯網,但我無法找到管理連接的方法;我可以安裝網路管理器,但Could not create NMClient object每當執行nmcli命令時我都會收到一個。我沒有找到 SELinux ( getenforce)。我安裝了firewalld,但隨後firewall-cmd會拋出Failed to connect to socket /run/dbus/system_bus_socket.systemctl給了一個錯誤,System has not been booted with systemd...然後我了解到“WSL 的 Fedora Remix”Windows 應用程式商店售價 9.99 美元,附註:

以下軟體包已從 Fedora Remix for WSL 的預設安裝中刪除:grub、plymouth、kernel、sssd、linux-firmware、dracut、parted、e2fsprogs、iprutils、ppc64-utils、selinux-policy、policycoreutils、sendora、firewall -release、fedora-logos 和fedora-release-notes。

那麼,主要問題是:WSL 如何限制 Linux 功能?

那麼,我們感興趣的顯然是如何繞過它們:我首先擔心的是:與互聯網的連接安全嗎?在我看來,如果人們可以透過某些服務連接到我的 WSL Linux,則沒有防火牆可以阻止他們進入我的主機 PC。關於我上面寫的內容:為什麼我會收到該錯誤nmcli?到底有沒有可能讓 SELinux 運作起來?是否有可能像人們一樣管理單位systemctl

答案1

WSL2 本質上是一個使用真實 Linux 核心和自訂 init 系統的 Linux VM。這個自訂核心知道如何使用特殊驅動程式存取 Windows 檔案系統,並透過虛擬網路適配器接收網路存取。

由於您沒有使用系統標準 init 系統(即sysvinitsystemd),因此您沒有啟動系統通常啟動的所有服務,例如dbus。因此,執行systemctl無法啟動或停止服務,需要dbus執行的程式需要您手動啟動它,或使用適當的 sysvinit 樣式腳本。後者應該適用於幾乎任何初始化系統。

WSL2 使用這個自訂 init 系統,因為它使啟動幾乎是瞬時的;否則,您必須等待 Linux 系統完全啟動才能正常運作。因此,不需要設定完整 Linux 系統或僅用於引導的軟體包。

您使用的防火牆(如果有)應該在 Windows 系統上配置,而不是在 Linux 系統上配置。如果您願意,您可能可以直接使用nftablesor ,但是任何依賴都是正確的。出於類似的原因,您不會使用網路管理器,因為您的網路存取由 Windows 控制,並且會反映 Windows 網路堆疊的所有操作。iptablessystemd

我不清楚為什麼 SELinux 不能在 WSL 中工作。這可能是因為 Microsoft Linux 核心沒有使用它來建構或啟用它,也可能是因為其他作業系統不需要 SELinux(例如,Debian 和 Ubuntu 更喜歡 AppArmor)並且它們不想處理多個模組,或者可能是drvfs(WSL文件系統)不支援所需的功能。

如果您想要功能齊全的 Linux 體驗,那麼您應該安裝實際的 Linux 發行版。如果您想使用 Windows 系統並為 Linux 開發或運行應用程式而無需雙啟動,或者如果您必須使用 Windows 但更喜歡 Linux,那麼 WSL2 非常有用,但它並不能取代完整的 Linux 系統。

相關內容