WSL2 上的 Ubuntu 20.04:每次启动后都会重置文件夹所有者和组

Max*_*izh 9 permissions nginx windows-subsystem-for-linux 20.04

嗯,我有一个带有 Ubuntu 20.04.3 LTS 的 WSL2。它用于 Web 开发,因此安装了 nginx、php 和其他相关应用程序。没有图形用户界面。

因此,当我从 Windows PowerShell 启动它时wsl,我始终必须转到项目根目录并设置正确的文件夹权限:

sudo chown -R $USER:www-data /var/www/html/project_root/all_required_folders
Run Code Online (Sandbox Code Playgroud)

它工作正常,直到我重新启动 WSL,然后启动后,权限被重置回来,我必须再次设置它们。

我知道我可以添加这些命令在启动后运行,但我很好奇原因,因为我以前没有经历过这种情况(除非我从 HDD 转移到干净的系统到 SSD,但我不认为这可能是原因)。

老实说,我不认为这个问题来自 nginx,我猜是在 esle 的某个地方?

必须注意,并非所有文件夹组都被重置,只是其中的一些文件夹组以某种方式被重置。这些通常是 /node_modules、/storage 和 /bootstrap (是的,我正在运行 Laravel)。

那么,为什么会发生这种情况呢?它不会重置文件夹权限 - 仅重置所有者和组。

Win*_*nix 6

来自堆栈溢出

要启用更改文件所有者和权限,您需要编辑 /etc/wsl.conf并插入以下配置选项:

[automount] 
options = "metadata" 
Run Code Online (Sandbox Code Playgroud)

这可能需要重新启动 WSL(例如使用wsl --shutdown)或主机才能生效。自 2018 年以来,这已成为可能。

请访问上面的链接以获取完整答案以及您可能喜欢的其他两个答案。

还要考虑微软在 2018 年宣布的新方法。这种方法更深入,涉及到mount命令。


Not*_*1ds 3

通常,当发生此类“权限或所有权”问题时(如现有答案中所述),我们确实会怀疑对 drvfs 文件系统的支持。metadata

然而,在这种情况下,出于多种原因,我不相信这就是您所看到的:

  • 首先,该metadata选项仅适用于 Windows 驱动器安装。除非您的路径中存在/var/www/...您未提及的符号链接,否则此处的情况似乎并非如此。

  • 但更重要的是,如果这就是您遇到的问题,那么chown根本不起作用。如果没有metadata支持,Windows 驱动器上的文件和目录始终归默认用户所有。Achown根本没有任何作用。

  • 而且您提到权限不会重置,所以我假设您已经能够设置一些非默认权限。如果没有该选项,这在 Windows 驱动器上也是不可能的metadata

因此,排除了这一点(我相信),我会看看另外两个可能的罪魁祸首:

  • 我的下一个“正常”怀疑(如果这不是一个网络应用程序)将是您的 shell 启动中的某些内容。然而,我认为这里的情况并非如此。wsl -e bash --noprofile --norc如果您想测试它,可以通过运行来轻松消除启动配置。

  • 但我认为您在这里看到的确实是这样的。这确实是“正常行为”——运行为 的网络服务器www-data正在创建文件/目录。这些文件自然由创建它们的用户/进程拥有。我认为WSL 重新启动时所有权不会被重置。我认为它们一开始就是以这种所有权来编写的。

    如果这导致您的开发出现问题,请将您的用户添加到www-data具有 的组中sudo usermod -aG www-data $USER。或者查看链接的答案以获取其他选项。