强制 ssh 忽略 id_rsa 权限

强制 ssh 忽略 id_rsa 权限

我有一个非常具体的要求,要求多个用户使用一个私钥。我知道这有多糟糕。问题是,如果身份文件的权限太宽容(在我的情况下是 444),ssh 将简单地忽略它们。

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @        
WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0444 for '/var/vendor/id_rsa' are too open. It is
recommended that your private key files are NOT accessible by others.
This private key will be ignored.

来自手册页

包含用于身份验证的私钥。这些文件包含敏感数据,应仅供用户读取,但其他人不能访问(读/写/执行)。如果其他人可以访问私钥文件,ssh 将忽略该文件。

有没有办法强制 ssh 使用密钥而不检查权限?

答案1

正如其他答案所提到的,似乎没有办法强制 SSH 忽略该选项。检查发生在验证文件功能sshkey_perm_ok

if ((st.st_uid == getuid()) && (st.st_mode & 077) != 0) {
    error("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
    error("@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @");
    error("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
    error("Permissions 0%3.3o for '%s' are too open.",
        (u_int)st.st_mode & 0777, filename);
    error("It is required that your private key files are NOT accessible by others.");
    error("This private key will be ignored.");
    return SSH_ERR_KEY_BAD_PERMISSIONS;
}

如果无法更改密钥文件的权限,则解决方案是下载 OpenSSH 源代码,从代码中删除该检查并重建它。

答案2

一个相关问题的答案表明没有办法绕过权限检查。

但是,我遇到了同样的问题 --- 我希望多个用户共享同一个密钥,以便能够访问和控制一大组主机 --- 我的解决方法可能对其他人有用。

这是我所做的:

  1. 创建一个特殊的用户(例如master)和组(master)来持有密钥。
  2. 在中创建/存储密钥文件~master/.ssh/
  3. 授予组对密钥文件的读取权限chmod g+r ~master/.ssh/id_rsa
  4. 将每个授权用户添加到master组。
  5. ~user/.ssh/id_rsa建立从到 的链接~master/.ssh/id_rsa

这样授权用户就可以ssh毫无问题地使用密钥,但可以避免向所有人公开密钥。此外,密钥所有者不是 root。

奇怪的是,master用户本身仍会收到“未受保护的私钥”警告。可以通过将密钥文件的所有者(而不是组)更改为某个永远不需要使用密钥的特殊用户来规避此问题, sudo chown daemon ~master/.ssh/id_rsa例如。

答案3

您可以使用访问控制列表使其可供访问。使用实用程序getfaclsetfacl

请记住还要使用 设置适当的掩码setfacl,因为通常如果组权限不一样,您添加的任何单独权限都不会有效。

不过,你的文件系统需要支持它。如果未启用,则必须在 fstab 中添加挂载选项。

答案4

@João Rodrigues 对 @Andrei Savin 的回答的评论最后为我使用 sudo 提供了提示:

sudo -u nobody ssh -i <path to identity file> <ssh server>

以下错误消息(示例)

Could not create directory '/var/empty/.ssh'.
The authenticity of host 'xxx' can't be established.
ECDSA key fingerprint is SHA256:yyy.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Failed to add the host to the list of known hosts (/var/empty/.ssh/known_hosts).

可以忽略。它使用 Debian Buster (OpenSSH_7.9p1、OpenSSL 1.1.1d) 和 MacOS Big Sur (OpenSSH_8.1p1、LibreSSL 2.7.3) 开箱即用。

相关内容