Zugriff auf SSH_AUTH_SOCK von einem anderen Benutzer ohne Rootberechtigung

10

Das Szenario:

Ich führe ssh-agent auf meinem lokalen PC aus und alle meine Server / Clients sind so eingerichtet, dass sie die SSH-Agentenauthentifizierung weiterleiten. Ich kann mit dem ssh-agent auf meinem lokalen PC zwischen all meinen Computern wechseln. Das funktioniert.

Ich muss in der Lage sein, eine SSH auf einem Computer als ich selbst (Benutzer1) durchzuführen , zu einem anderen Benutzer mit dem Namen Benutzer2 ( sudo -i -u Benutzer2 ) zu wechseln und dann mit dem ssh-Agenten, den ich auf meinem lokalen PC ausgeführt habe, zu einer anderen Box ssh. Nehmen wir an, ich möchte so etwas wie ssh user3 @ machine2 ausführen (vorausgesetzt, user3 hat meinen öffentlichen SSH-Schlüssel in der Datei "authorized_keys").

Ich habe sudo so konfiguriert, dass die Umgebungsvariable SSH_AUTH_SOCK beibehalten wird.

Alle beteiligten Benutzer (Benutzer [1-3]) sind nicht privilegierte Benutzer (nicht root).

Das Problem:

Wenn ich zu einem anderen Benutzer wechsle, hat Benutzer2 keinen Zugriff auf den Socket, der von Benutzer1 erstellt wurde Natürlich macht es Sinn, sonst könnte Benutzer2 den privaten Schlüssel von Benutzer1 entführen und als dieser Benutzer herumspringen.

Dieses Szenario funktioniert einwandfrei, wenn ich anstelle einer Shell über sudo für Benutzer2 eine Shell über sudo für root erhalte. Weil root natürlich Zugriff auf alle Dateien auf dem Computer hat.

Die Frage:

Wie kann ich vorzugsweise mit sudo von Benutzer1 zu Benutzer2 wechseln, aber trotzdem Zugriff auf SSH_AUTH_SOCK von Benutzer1 haben?

Danny F.
quelle

Antworten:

11

Es gibt zwei Dinge, die Sie tun müssen:

  1. SSH_AUTH_SOCKStellen Sie die Variable so ein, dass sie auf die richtige Datei zeigt
  2. Ermöglichen Sie dem anderen Benutzer, eine Verbindung zum Socket herzustellen (mithilfe von Dateisystemberechtigungen).

Daher können Sie Folgendes tun:

Erlauben Sie als Benutzer1 Benutzer2, eine Verbindung zum Socket herzustellen (vollständiger Zugriff auf den Socket und Berechtigungen zum Betreten des Verzeichnisses). Ich hoffe, Sie /tmperlauben ACLs.

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

Wechseln Sie zum anderen Benutzer und exportieren Sie die Variable korrekt.

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

Wenn Sie eine interaktive Shell mit öffnen möchten sudo, müssen Sie die SSH_AUTH_SOCKVariable selbst exportieren , nachdem Sie die Shell erhalten haben.

Chutz
quelle
Danke für die Antwort. Das funktioniert perfekt und macht total Sinn. Entschuldigung für die verspätete Antwort, ich habe nicht die Nachricht erhalten, dass jemand geantwortet hat.
Danny F