WSL Ubuntu ~/ssh/config 符号链接到 c:\users\USER\.ssh\config 权限错误

WSL Ubuntu ~/ssh/config 符号链接到 c:\users\USER\.ssh\config 权限错误

根据另一个用户的请求从 StackOverflow 转发

我正在尝试使用符号链接来简化我的 SSH 配置管理。我的理由是,在家时我使用 CMD 进行 SSH,在办公室时使用 WSL Ubuntu。我更喜欢使用 WSL,但由于使用 Cisco VPN 客户端,让 WSL Ubuntu 工作很麻烦。另外,VS Code 无论如何都是基于位于我的 Windows 主目录中的文件运行的。

我该如何解决执行标题符号链接时遇到的权限错误?

hardya@MYLAPTOP:~/.ssh$ ssh someServer 
Bad owner or permissions on /home/hardya/.ssh/config

hardya@MYLAPTOP:~/.ssh$ ll
total 64
drwxr-xr-x  2 hardya hardya  4096 Jul 20 16:06 ./
drwxr-xr-x 10 hardya hardya  4096 Jul 20 15:37 ../
lrwxrwxrwx  1 hardya hardya    31 Jul 20 16:06 config -> /mnt/c/Users/hardya/.ssh/config*
-rwxr-xr-x  1 hardya hardya  1941 May 19 11:25 config.old*
-rw-------  1 hardya hardya  1823 Oct 27  2020 id_rsa
-rwxr-xr-x  1 hardya hardya   401 Oct 27  2020 id_rsa.pub*
-rwxr-xr-x  1 hardya hardya 41772 May 19 11:25 known_hosts*

hardya@MYLAPTOP:~/.ssh$ ll /mnt/c/Users/hardya/.ssh/
total 24
drwxrwxrwx 1 hardya hardya   512 Jul 20 15:36 ./
drwxrwxrwx 1 hardya hardya   512 Jul 13 13:56 ../
-rwxrwxrwx 1 hardya hardya  3045 Jul 20 16:05 config*
-rwxrwxrwx 1 hardya hardya  1823 Jun  7  2019 id_rsa*
-rwxrwxrwx 1 hardya hardya   401 Jun  7  2019 id_rsa.pub*
-rwxrwxrwx 1 hardya hardya 15815 Jul 12 16:25 known_hosts*

答案1

简短回答:

在您的 WSL 实例中创建一个/etc/wsl.conf(您需要使用sudo),其中包含以下内容:

[automount]
options = "metadata,umask=22,fmask=11"

wsl --terminate <distroname>然后使用或wsl --shutdown(从 PowerShell 或 CMD)退出并重新启动分发。1

至少应该fmask给予config所需的权限。但是当您尝试使用私钥时,您仍然会遇到问题,因为它不是所有人都可读的。

您可以将您的设置设置fmask为更加严格,或者(因为我们已经启用了元数据)您可以chmod 400 id_rsa

解释:

我可以重现你的问题如果我注释掉了我的/etc/wsl.conf。我假设你从来没有设置过,这可能是真正的问题。你/mnt/c/Users/hardya/.ssh/显示的所有文件都具有 777 权限,这是这里的提示。当然,问题在于,因为 '~/.ssh/config` 不能是全局可写的。它是符号链接的事实主要是转移注意力的借口。

默认情况下,在 WSL 中,DrvFS/9P 挂载没有启用元数据支持。如果没有这些额外的元数据,WSL 就无法“假装”设置这些文件的权限。因此,它只是按照该文档中指定的方式进行映射。基本上,如果您的用户在 Windows 中具有读写执行权限,则该文件将设置为具有读写执行权限的用户、组和其他权限(即rwxrwxrwx777)。

这是因为 WSL 中的所有内容实际上都是以 Windows 用户身份运行的。所以它不是错误的这些是权限。但它可能会妨碍那些假定 Linux 类似权限的 Linux 应用程序/服务。因此 Linuxssh看到777config理所当然地拒绝运行。它不知道 Windows 权限是否足够严格 - 它只知道 Linuxstat告诉它的内容。

这就是元数据的作用所在。启用此metadata选项后,您可以chmod在 Windows 驱动器上访问文件,WSL 会将新权限存储在元数据中。也就是说,如果您有chmod 400一个文件,即使 Windows 用户确实有权限,WSL 中的用户也无法更改它。当然,WSL 根用户仍然可以进行更改。

如果没有metadatachmodWindows 文件上的 根本就没有效果。

另一方面,/umask指定fmask默认在缺少任何元数据的情况下,Windows 文件应该以何种权限出现在 WSL 中。因此,通过为文件指定默认值 744,您至少可以ssh通过使其config不再具有全球可写性来安抚它。

1谢谢@伊诺在评论中提醒我,我在最初的写作中错过了这一步!

相关内容