Ali*_*rdy 4 ssh symbolic-link openssh permissions wsl2
应其他用户请求从 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*
Run Code Online (Sandbox Code Playgroud)
简短回答:
在您的 WSL 实例中创建一个包含以下内容的实例/etc/wsl.conf(您需要使用):sudo
[automount]
options = "metadata,umask=22,fmask=11"
Run Code Online (Sandbox Code Playgroud)
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 中具有读写执行权限,则该文件将设置用户、组和其他读写执行权限(即 或rwxrwxrwx)777。
这是因为 WSL 中的所有内容都以您的 Windows 用户身份有效运行。所以这些权限并没有错。但它可能会妨碍采用类似 Linux 权限的 Linux 应用程序/服务。所以 Linuxssh看到777了config并且正确地拒绝运行。它不知道 Windows 权限是否有足够的限制 - 它只知道 Linuxstat告诉它什么。
这就是元数据的用武之地。metadata打开该选项后,您可以chmod在 Windows 驱动器上保存文件,WSL 会将新权限存储在元数据中。也就是说,如果您有chmod 400一个文件,那么您在 WSL 中的用户将无法更改它,即使 Windows 用户确实拥有这样做的权限。当然,WSL root 用户仍然可以进行更改。
如果没有metadata,chmodWindows 文件上的 a 根本没有任何作用。
另一方面,umask/指定在没有任何元数据的情况下 Windows 文件应与 WSL 一起显示的默认权限。因此,通过为文件提供默认值 744,您至少可以通过使其不再是全局可写来安抚。fmasksshconfig
1感谢评论中的@Ino提醒我我在原来的文章中错过了这一步!
| 归档时间: |
|
| 查看次数: |
4174 次 |
| 最近记录: |