当我在 Windows PC 上安装 WSL2 时,我立即安装了一个适配 CentOS 8.2版本。在我探索它时,我发现我可以开箱即用地读取和写入主机的 NTFS 文件系统。它也连接到互联网,但我不知道如何管理连接;我可以安装网络管理器,但Could not create NMClient object
每次运行nmcli
命令时都会得到一个。我没有找到 SELinux(getenforce
)。我安装了防火墙,但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 美元,并附有说明:
以下软件包已从 WSL 的 Fedora Remix 默认安装中删除:grub、plymouth、kernel、sssd、linux-firmware、dracut、parted、e2fsprogs、iprutils、ppc64-utils、selinux-policy、policycoreutils、sendmail、firewalld、fedora-release、fedora-logos 和 fedora-release-notes。
那么,主要问题是:Linux 的功能如何受到 WSL 的限制?
那么,我们感兴趣的显然是如何绕过它们:我首先担心的是:连接到互联网是否安全?在我看来,如果人们可以通过某些服务连接到我的 WSL Linux,那么就没有防火墙可以阻止他们进入我的主机 PC。关于我上面写的内容:为什么我会收到那个错误nmcli
?是否有可能让 SELinux 运行?是否有可能像使用一样管理单元systemctl
?
答案1
WSL2 本质上是一个使用真实 Linux 内核和自定义初始化系统的 Linux VM。这个自定义内核知道如何使用特殊驱动程序访问 Windows 文件系统,并通过虚拟网络适配器获得互联网访问权限。
由于您没有使用系统标准 init 系统(即sysvinit
或systemd
),因此您没有启动系统通常会启动的所有服务,例如dbus
。因此,运行systemctl
无法启动或停止需要dbus
运行的服务和程序,您需要手动启动它,或者使用合适的 sysvinit 样式脚本。后者应该适用于几乎任何 init 系统。
WSL2 使用这个自定义的 init 系统,因为它使启动几乎瞬间完成;否则,您必须等待完整的 Linux 系统启动才能使其正常工作。因此,设置完整 Linux 系统或仅用于启动的软件包将不再必要。
您使用的防火墙(如果有)应在 Windows 系统上配置,而不是在 Linux 系统上配置。如果您愿意,您可能可以直接使用nftables
或,但任何依赖的东西都是不行的。出于类似的原因,您不会使用网络管理器,因为您的网络访问由 Windows 控制,并将反映 Windows 网络堆栈所做的一切。iptables
systemd
我不清楚为什么 SELinux 在 WSL 中不起作用。可能是因为 Microsoft Linux 内核没有使用它或启用它,可能是因为其他操作系统不需要 SELinux(例如,Debian 和 Ubuntu 更喜欢 AppArmor)并且它们不想处理多个模块,或者可能是 drvfs(WSL 文件系统)不支持所需的功能。
如果您想要获得功能齐全的 Linux 体验,那么您应该安装真正的 Linux 发行版。如果您想使用 Windows 系统并开发或运行 Linux 应用程序而无需双启动,或者您必须使用 Windows 但更喜欢 Linux,那么 WSL2 非常适合,但它不能替代完整的 Linux 系统。