为什么 WSL Windows 的所有目录权限都设置为完全

为什么 WSL Windows 的所有目录权限都设置为完全

不确定是否所有人都是这种情况,但自从我在 Windows 上安装 WSL 那天起,我就在我的主目录中,但我可以看到所有权限都设置为drwxrwxrwx

我尝试使用 chown 更改权限,但没有成功,有谁能帮忙吗?

先感谢您。

在此处输入图片描述

答案1

简短回答:

通过以下方式打开对 Windows 驱动器的 WSL 元数据支持:

sudo -e /etc/wsl.conf

并添加:

[automount]
options = "metadata"

但请阅读以下内容...

几点说明:

  • 您说您处于“主目录”中,但情况似乎并非如此。这可能只是术语上的混淆,但也可能代表一个真正的问题。您在屏幕截图中显示的目录是“Windows轮廓”(有时称为“Windows 主页”)。这应该不是与您的 WSL/Linux“主目录”相同。

    在 WSL 中,尝试以下命令:

    echo $HOME
    wslpath $(powershell.exe -c '$env:USERPROFILE')
    

    那些应该是不同的目录。如果不是,那么你可能有意将 WSL/Linux 主目录更改为与 Windows 用户配置文件相同。这不是一个好主意。如果 WSL 用户的主目录位于 Linux 文件系统上,WSL 会更好地工作。

  • 不过,假设它们是不同的,那么下一个问题就是你提到通过“更改权限” chown。为清楚起见,chown更改所有权. chmod更改权限。

  • 无论如何,对于更改 Windows 驱动器上文件的权限或所有权,答案几乎是一样的。让我们从权限开始,因为这正是您要问的。

    重要的是要意识到 WSL 对 Windows 驱动器的权限控制非常有限。在 WSL 默认(无)元数据设置的情况下,你唯一能做的就是通过删除所有写权限将 Windows 文件设置为只读。 换句话说:

     cd $(wslpath $(powershell.exe -c '$env:USERPROFILE' | tr -d '\r')) # Should change to the directory you mention in your question
    touch afile
    ls -l afile
    chmod u-x afile
    ls -l afile # no change
    chmod o-w afile
    ls -l afile # no change
    chmod 644 afile
    ls -l afile # no change
    chmod 444 afile
    ls -l afile # All write permissions are removed, and the file is actually read-only to your Windows user
    sudo chown root afile
    ls -l afile # no change
    chmod 644 afile
    ls -l afile # File appears as 777 again to WSL, and the read-only attribute in Windows is removed
    

    metadata将选项添加到后/etc/wsl.conf,退出 WSL,wsl --terminate <distro_name>从 PowerShell 运行,然后重新启动 WSL。

    然后,WSL 会将其他元数据应用到 Windows 驱动器,这样您就可以设置LinuxWindows 文件的权限。更改 Linux 权限仍将不是影响 Windows 权限,除了上面提到的只读情况之外。

    也就是说,WSL 将尊重这些权限。例如:

    # Assuming same file and directory above
    rm afile
    touch afile
    ls -l afile # File is created with default umask 022:  -rw-r--r--
    chmod u-w afile
    ls -l afile # -r--r--r-- and Windows read-only
    chmod +x afile
    ls -l afile # -r-xr-xr-x, still read-only to Windows
    chmod +w afile
    ls -l afile # -rwxr-xr-x, no longer read-only to Windows
    sudo chown root afile
    ls -l afile # root is owner
    sudo rm afile
    

    不过,如上面链接的 Microsoft 权限文档中所述,请记住,您永远无法添加普通 Windows 用户无法添加的权限。例如:

    # From the same user profile directory
    cd ..
    sudo chmod +r Administrator
    # chmod: changing permissions of 'Administrator': Permission denied
    

相关内容