如何使用 Ubuntu 限制 Linux WSL 的 Windows 子系统的驱动器访问

ste*_*kwr 5 windows linux mount ubuntu windows-subsystem-for-linux

我想以这样的方式设置 WSL (Ubuntu),使 WSL 中的 root 用户无法访问 Windows 中的所有驱动器。理想情况下,他们能够执行 Linux 世界中的所有操作,但无法安装 c: 或任何其他驱动器。当然,他们应该有权访问 Linux 根文件夹以及其中的其他所有内容(无论安装在 Windows 中的何处)。

默认情况下,WSL 在启动时将所有驱动器安装在 /mnt/c 等上。我当然可以创建一个任务来卸载它们。但我认为这还不够,因为 root 当然可以再次安装它们。所以看来这必须是某种 Windows 解决方案。我在 ubuntu 中创建一个受限帐户或将用户放入 chroot 监狱,但这不是我想要的。

Not*_*1ds 4

完全关闭root访问 Windows 驱动器的能力可能有点困难。WSL 确实是为 Windows/Linux 互操作而设计的。

禁用自动挂载和互操作的机制是通过该/etc/wsl.conf文件,但是,拥有 WSL 实例 root 访问权限的人当然仍然可以编辑该文件并撤消更改。也就是说,我肯定会从/etc/wsl.conf以下内容开始:

[automount]
enabled=false

[interop]
enabled=false
appendWindowsPath=false
Run Code Online (Sandbox Code Playgroud)

禁用互操作对于防止 root 用户从 WSL 内部调用命令非常重要wsl.exe。这至少可以防止 root 用户“重新启动”WSL 实例。

但是,即使关闭自动安装,如果我没记错的话,仍然可以手动安装 Windows 驱动器,因为该功能是由 WSL 提供的/init

最终我相信你必须创建一个 chroot 监狱。但是,您可以使用以下命令直接将 WSL 启动到此监狱中:

wsl -u root -e sh -c "cd /newroot; exec /usr/sbin/chroot /newroot/" su - username
Run Code Online (Sandbox Code Playgroud)

...并且用户不应该能够逃脱它。自从我尝试它以来已经有一段时间了,但我让它为这个答案工作是出于不同的目的。请注意,该特定答案还包含 chroot 设置说明。