嗯,我有一个装有 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
。或者参阅链接的答案以了解更多选项。