无法在 Windows 10 的 Ubuntu Bash 上更改文件权限

iii*_*iii 51 ssh bash ubuntu windows-10 windows-subsystem-for-linux

我试图使用 ssh 实例,但收到以下错误,这很奇怪,因为我尝试使用 更改权限chmod,但这似乎不起作用,因为权限仍然存在777

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0777 for 'privkey.pem' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "privkey.pem": bad permissions
Permission denied (publickey).
Run Code Online (Sandbox Code Playgroud)

我打开git bash并能够毫无问题地通过 SSH 连接到我的实例,并且权限也不777是很好。

小智 78

如果您在 Windows 文件系统中引用文件,默认情况下它们不会保留 Linux 权限。但是,有一种方法可以实现这一点。编辑或创建(使用sudo/etc/wsl.conf并添加以下内容:

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

关闭所有 WSL 实例并重新启动一个实例,chmod现在保留所有更改。

  • 这是绝对正确的答案! (7认同)
  • 对我不起作用。我完全按照你的建议做了,但是使用 `chmod` 设置的权限在执行 `ls -al` 时仍然没有反映。奇怪的是(在进行此更改之前也是如此),某些 `chmod` 值有效而其他值无效。例如,0600 没有效果,但 0400 将其更改为 -r-xr-xr-x。 (3认同)

ero*_*rtc 21

私钥是否在您的 Windows 文件系统上(在 /mnt/ 下)?您无法在 Windows 上的 Ubuntu 上使用 Bash 上的 chmod 修改 Windows 文件系统上文件的权限。您必须将私钥复制到 WSL 主目录 (~) 并在那里执行。

这里的一些讨论:https : //github.com/Microsoft/WSL/issues/81

  • 该讨论至少有 3 页。您确实应该引用您认为与作者相关的信息。 (11认同)
  • @Ramhound,该讨论中的相关信息在我的回答中进行了解释,我只是添加了该链接作为参考来源。相关信息在那里的第一个回复中。我不知道提问者只在 Windows 更新后才遇到这个问题,但他们没有说密钥是否在 Windows 文件系统上,所以我仍然认为这是最有可能的解释,除非他们另有说明。 (3认同)
  • @iii - 哪个更新?您的问题没有提及它之前有效的事实。您的问题也没有提到您最近安装了更新。我不同意这个答案,因为该链接是在 WSL 被修改之前(我相信),以支持您想要做的事情。这就是我敦促作者详细阐述答案的原因 (2认同)
  • 不知道为什么人们对这个答案感到不安,即使它提供了真相(如果您对 `/mnt` 限制有不同看法,请在您的评论中指向相关文档)。我遇到了完全相同的行为;无法使用 `chmod` 更改 `/mnt` 目录下文件的权限。所以我不得不将我的 ssh 密钥移动到我的 `/home/<user>` 目录,然后 `chmod` 按预期工作。 (2认同)

Bas*_*l A 20

正确的处理方法:

  1. /etc/wsl.conf使用以下内容创建:

    [automount]
    enabled  = true
    root     = /mnt/
    options  = "metadata,umask=22,fmask=11"
    
    Run Code Online (Sandbox Code Playgroud)

    要理解上面每个参数的含义,请参考MSDN上的这篇文章

  2. 关闭所有 WSL 终端并打开一个新终端

  3. 重新启动您的机器(如一些评论所示)

现在你已经准备好了;更改 Windows 中文件的权限/mnt/c/将在启动时通过该metadata选项在 WSL 中正确反映和挂载。

  • 对我不起作用。我完全按照你的建议做了,但是使用 `chmod` 设置的权限在执行 `ls -al` 时仍然没有反映。奇怪的是(在进行此更改之前也是如此),某些 `chmod` 值有效而其他值无效。例如,0600 没有效果,但 0400 将其更改为 -r-xr-xr-x。 (4认同)
  • 这仅在我重新启动机器后才对我有用。 (2认同)

Sal*_*ner 7

我创建了一个别名,该别名会加载到我的~/.bashrc文件中,并允许使用“元数据”权限卸载/重新安装文件夹中的C:/驱动器/mnt/c/

alias win-chmod="cd ~ && sudo umount /mnt/c && sudo mount -t drvfs C: /mnt/c -o metadata && cd -"
Run Code Online (Sandbox Code Playgroud)

这允许我仅chmod在需要时启用,防止对挂载的文件系统进行不必要的更改。这只是调用的问题

alias win-chmod="cd ~ && sudo umount /mnt/c && sudo mount -t drvfs C: /mnt/c -o metadata && cd -"
Run Code Online (Sandbox Code Playgroud)

  • 谢谢你!经过几个小时的研究,这是唯一对我有用的东西 (2认同)
  • +1 为独创性。但是@Basil的上述解决方案在重新启动后也有效(必需) (2认同)