WSL[2] 如何对来宾 Linux 系统造成限制?

Kat*_*l3s 5 centos linux-kernel windows-subsystem-for-linux redhat-enterprise-linux wsl2

当我在 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...,然后我了解到Windows 应用商店正在提供“Fedora Remix for WSL”,价格为 9.99 美元,并注明:

以下软件包已从 Fedora Remix for WSL 的默认安装中删除:grub、plymouth、kernel、sssd、linux-firmware、dracut、parted、e2fsprogs、iprutils、ppc64-utils、selinux-policy、policycoreutils、sendmail、firewalld、 fedora-release、fedora-logos 和 fedora-release-notes。

那么,主要问题是:WSL 如何限制 Linux 功能?

那么,我们感兴趣的显然是如何绕过它们:我首先担心的是:与互联网的连接安全吗?在我看来,如果人们可以通过某些服务连接到我的 WSL Linux,则没有防火墙可以阻止他们进入我的主机 PC。关于我上面写的内容:为什么我会收到该错误nmcli?到底有没有可能让 SELinux 运行起来?是否有可能像人们一样管理单位systemctl

小智 5

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 系统。