別の非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を介してシェルを取得した場合にうまく機能します。当然、rootはマシン上のすべてのファイルにアクセスできます。

質問:

できればsudoを使用して、user1からuser2に変更しながら、user1のSSH_AUTH_SOCKに引き続きアクセスするにどうすればよいですか?

回答:


12

次の2つのことを行う必要があります。

  1. SSH_AUTH_SOCK正しいファイルを指すように変数を設定します
  2. 他のユーザーにソケットへの接続を許可する(ファイルシステムのアクセス許可を使用)

したがって、あなたができることは:

user1として、user2にソケットへの接続を許可します(ソケットへのフルアクセスとディレクトリへのアクセス許可)。/tmpACLを許可してください。

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必要があります。


答えてくれてありがとう。それは完璧に機能し、完全に理にかなっています。返信が遅れてすみませんでした。誰かが返信したという通知を受け取りませんでした。
ダニーF
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.