从另一个非root用户访问SSH_AUTH_SOCK


11

场景:

我在本地PC上运行ssh-agent,并且所有服务器/客户端均设置为转发SSH代理身份验证。我可以使用本地PC上的ssh-agent在所有机器之间切换。那个有效。

我需要能够以自己的身份(user1)SSH到计算机,更改为另一个名为user2的用户(sudo -i -u user2),然后使用我在本地PC上运行的ssh-agent ssh到另一个机器。可以说我想做类似ssh user3 @ machine2的操作(假设user3在他们的authorized_keys文件中有我的公共SSH密钥)。

我已将sudo配置为保留SSH_AUTH_SOCK环境变量。

所有涉及的用户(user [1-3])都是非特权用户(不是root)。

问题:

当我更改为另一个用户时,即使正确设置了SSH_AUTH_SOCK变量,(将其设置为:/tmp/ssh-HbKVFL7799/agent.13799),user2也无法访问user1创建的套接字-哪个当然这是有道理的,否则user2可以劫持user1的私钥并以该用户身份跳来跳去。

如果我不是通过user2的sudo获取外壳,而是通过root的sudo获取shell,则此方案很好用。因为root自然可以访问计算机上的所有文件。

问题:

最好使用sudo,如何从user1更改为user2,但仍然可以访问user1的SSH_AUTH_SOCK?

Answers:


12

您需要做两件事:

  1. 设置SSH_AUTH_SOCK变量,使其指向正确的文件
  2. 允许其他用户连接到套接字(使用文件系统权限)

因此,您可以做的是:

以user1身份,允许user2连接到套接字(对套接字的完全访问权限和进入目录的权限)。希望您/tmp允许ACL。

setfacl -m u:user2:rw $SSH_AUTH_SOCK
setfacl -m u:user2:x $(dirname $SSH_AUTH_SOCK)

更改为其他用户,然后正确导出变量。

sudo -u user2 env SSH_AUTH_SOCK=$SSH_AUTH_SOCK ssh user3@machine2

如果要使用打开交互式外壳sudo,则必须SSH_AUTH_SOCK在获取外壳后自行导出变量。


感谢您的回答。那完美地工作,并且完全有意义。对不起,我的回复很晚,我没有收到有人响应的通知。
Danny F
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.