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

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

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

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

sudo chown -R $USER:www-data /var/www/html/project_root/all_required_folders

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

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

老实说,我不认为这个问题来自 nginx,我猜是其他地方?

需要注意的是,并非所有文件夹组都会被重置,只有部分文件夹会被重置。这些文件夹通常是 /node_modules、/storage 和 /bootstrap(是的,我正在运行 Laravel)。

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

答案1

堆栈溢出

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

[automount] 
options = "metadata" 

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

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

还考虑新方法微软于 2018 年宣布。此方法更加深入,并涉及mount命令。

答案2

通常我们当出现这种类型的“权限或所有权”问题时,怀疑metadata对 drvfs 文件系统的支持(如现有答案中所述)。

然而,在这种情况下,我不认为这是你所看到的情况,原因如下:

  • 首先,该metadata选项仅适用于 Windows 驱动器安装。除非您的/var/www/...路径中有一个您未提及的符号链接,否则这里似乎不是这种情况。

  • 但更重要的是,如果你遇到的是这个问题,那么chown根本行不通。如果没有metadata支持,Windows 驱动器上的文件和目录总是归默认用户所有。Achown不会产生任何效果。

  • 您提到权限未重置,因此我假设您已经能够设置一些非默认权限。如果没有此选项,在 Windows 驱动器上也不可能实现此metadata操作。

因此,排除这个可能性(我相信),我会考虑另外两个可能的罪魁祸首:

  • 我的下一个“正常”怀疑(如果这不是 Web 应用程序)是您的 shell 启动中存在问题。但是,我在这里没有看到这种情况。wsl -e bash --noprofile --norc如果您想测试它,可以通过运行来轻松消除启动配置。

  • 但我真正思考你在这里看到的是。这确实是“正常行为”——以 身份运行的 Web 服务器www-data正在创建文件/目录。这些文件自然归创建它们的用户/进程所有。我不思考WSL 重新启动时,所有权将被重置。我思考它们一开始就是以这种所有权来书写的。

    如果这对你的开发造成了问题,那么添加你的用户添加到www-data带有 的群组sudo usermod -aG www-data $USER。或者参阅链接的答案以了解更多选项。

相关内容