當我在 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 系統(即sysvinit
或systemd
),因此您沒有啟動系統通常啟動的所有服務,例如dbus
。因此,執行systemctl
無法啟動或停止服務,需要dbus
執行的程式需要您手動啟動它,或使用適當的 sysvinit 樣式腳本。後者應該適用於幾乎任何初始化系統。
WSL2 使用這個自訂 init 系統,因為它使啟動幾乎是瞬時的;否則,您必須等待 Linux 系統完全啟動才能正常運作。因此,不需要設定完整 Linux 系統或僅用於引導的軟體包。
您使用的防火牆(如果有)應該在 Windows 系統上配置,而不是在 Linux 系統上配置。如果您願意,您可能可以直接使用nftables
or ,但是任何依賴都是正確的。出於類似的原因,您不會使用網路管理器,因為您的網路存取由 Windows 控制,並且會反映 Windows 網路堆疊的所有操作。iptables
systemd
我不清楚為什麼 SELinux 不能在 WSL 中工作。這可能是因為 Microsoft Linux 核心沒有使用它來建構或啟用它,也可能是因為其他作業系統不需要 SELinux(例如,Debian 和 Ubuntu 更喜歡 AppArmor)並且它們不想處理多個模組,或者可能是drvfs(WSL文件系統)不支援所需的功能。
如果您想要功能齊全的 Linux 體驗,那麼您應該安裝實際的 Linux 發行版。如果您想使用 Windows 系統並為 Linux 開發或運行應用程式而無需雙啟動,或者如果您必須使用 Windows 但更喜歡 Linux,那麼 WSL2 非常有用,但它並不能取代完整的 Linux 系統。