在同一台机器上验证另一个用户的 SSH 和 GPG 密钥

在同一台机器上验证另一个用户的 SSH 和 GPG 密钥

我很好奇这是否可行或者是否值得推荐。

假设我想防止有人设法入侵我的用户帐户(我们称之为帐户)而窃取我的 SSH 或 GPG 密钥user。因此,我想将密钥的私有部分放在我无权访问的另一个帐户上(我们称之为帐户)。user-keys因此,如果我希望能够进行任何类型的 SSH 或 GPG 身份验证,我需要将该请求发送到该user-keys帐户,它会执行身份验证工作,然后将结果发送回我的user帐户。

这可能吗?如果可以,怎么做?另外,这是推荐的吗?或者除了从互联网上下载和运行软件时要小心之外,还有其他更好的方法来保护密钥吗?

答案1

您或多或少会寻找ssh-agent类似的工具。它们将签名密钥保存在内存中(通常被锁定,因此即使调试工具也无法访问它们),并且仅在请求时分发签名。

  • ssh-agent 并非专为在账户之间共享而构建,但ssh它本身确实具有“代理转发”模式 - 因此您可以以用户 1 的身份启动代理,然后运行ssh -A user2@localhost,现在以用户 2 身份运行的进程可以连接到代理并要求其签署身份验证质询。(请注意,它们必须知道由“ssh -A”创建的 $SSH_AUTH_SOCK 值。)

    这是可行的,因为 ssh-agent 的协议中没有导出私钥的命令。你可以添加代理的私钥;你可以让它签署东西;你可以列出民众键;就是这样。

    或者,您可以在主帐户下运行代理,并将实际私钥保存在远程某个地方 - 然后使用 连接ssh -A,添加密钥并断开连接。当然,这需要您信任 ssh-agent 使用的 OS 提供的锁定功能(例如无法附加 gdb)。

  • gpg-agent 是有点复杂通过 SSH 转发,但其基本思想仍然相同。GnuPG 已经要求它,但它为应用程序提供了两个不同的套接字来连接;S.gpg-agent提供完全访问权限(包括密钥导出),而S.gpg-agent.extra仅提供与 ssh-agent 类似的基本签名/解密功能的访问权限。

    请注意,gpg-agent 与 ssh-agent 不同,前者具有执着的密钥存储(作为 ~/.gnupg/ 下的文件),因此“替代”方法不起作用。它还坚持启动自己的密码对话框弹出窗口(pinentry),这在尝试 SSH 转发时可能再次造成困难。

    因此,如果您的发行版支持它,我实际上会研究“强制访问控制”模块,例如 AppArmor 或 SELinux,它们可用于拒绝对 ~/.gnupg/ 的所有访问即使来自同一个 UID除通过代理进程外。

相关内容