我想以这样的方式设置 WSL(Ubuntu),即 WSL 中的 root 用户无法访问 Windows 中的所有驱动器。理想情况下,他们可以在 Linux 世界中执行所有操作,但无法挂载 c: 或任何其他驱动器。当然,他们应该可以访问 Linux 根文件夹及其中的所有其他内容(无论在 Windows 中挂载在哪里)。
WSL 默认在启动时将所有驱动器挂载在 /mnt/c 等上。我当然可以创建一个任务来卸载这些驱动器。但我认为这还不够,因为 root 当然可以再次挂载它们。所以这似乎必须是某种 Windows 解决方案。我在 ubuntu 中创建了一个受限帐户或将用户置于 chroot jail 中,但这不是我想要的。
答案1
完全关闭根访问 Windows 驱动器可能有点困难。WSL 确实是为 Windows/Linux 互操作而设计的。
禁用自动挂载和互操作的机制是通过/etc/wsl.conf
文件实现的,但是,当然,具有 WSL 实例 root 访问权限的人仍然可以编辑该文件并撤消您的更改。话虽如此,我肯定会从包含以下内容的文件开始/etc/wsl.conf
:
[automount]
enabled=false
[interop]
enabled=false
appendWindowsPath=false
禁用互操作对于防止 root 用户从 WSL 内部调用命令非常重要wsl.exe
。这至少可以防止 root 用户“重新启动”WSL 实例。
但是,如果我没记错的话,即使关闭了自动挂载,Windows 驱动器仍然可以手动挂载,因为该功能是由 WSL 提供的/init
。
最终,我确实认为您必须创建一个 chroot jail。但是,您可以使用以下命令直接将 WSL 启动到此 jail 中:
wsl -u root -e sh -c "cd /newroot; exec /usr/sbin/chroot /newroot/" su - username
... 并且用户不应该能够退出它。我已经有一段时间没有尝试过了,但我已经让它工作了这个答案用于不同的目的。请注意,该特定答案还包含 chroot 设置说明。