Accesso a SSH_AUTH_SOCK da un altro utente non root


11

Lo scenario:

Sto eseguendo ssh-agent sul mio PC locale e tutti i miei server / client sono impostati per inoltrare l'autenticazione dell'agente SSH. Posso saltare tra tutte le mie macchine usando l'agente ssh sul mio PC locale. Che funzioni.

Devo essere in grado di SSH su una macchina come me stesso (utente1) , passare a un altro utente chiamato user2 ( sudo -i -u user2 ) e quindi ssh in un'altra casella usando l'agente ssh che ho in esecuzione sul mio PC locale. Diciamo che voglio fare qualcosa di simile a ssh user3 @ machine2 (supponendo che user3 abbia la mia chiave SSH pubblica nel suo file authorized_keys).

Ho configurato sudo per mantenere la variabile d'ambiente SSH_AUTH_SOCK .

Tutti gli utenti coinvolti (utente [1-3]), sono utenti non privilegiati (non root).

Il problema:

Quando cambio a un altro utente, anche se la variabile SSH_AUTH_SOCK è impostata correttamente, (diciamo che è impostata su: /tmp/ssh-HbKVFL7799/agent.13799) user2 non ha accesso al socket creato dall'utente1 - Quale di Naturalmente ha senso, altrimenti user2 potrebbe dirottare la chiave privata di user1 e spostarsi come tale utente.

Questo scenario funziona bene se invece di ottenere una shell tramite sudo per utente2, ottengo una shell tramite sudo per root. Perché naturalmente root ha accesso a tutti i file sulla macchina.

La domanda:

Preferibilmente usando sudo, come posso cambiare da utente1 a utente2, ma avere ancora accesso a SSH_AUTH_SOCK dell'utente1?

Risposte:


12

Ci sono due cose che devi fare:

  1. imposta la SSH_AUTH_SOCKvariabile in modo che punti al file corretto
  2. consentire all'altro utente di connettersi al socket (usando le autorizzazioni del file system)

Pertanto, ciò che potresti fare è:

Come utente1, consenti all'utente2 di connettersi al socket (accesso completo al socket e autorizzazioni per accedere alla directory). Spero che i tuoi /tmppermessi ACL.

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

Passare all'altro utente ed esportare correttamente la variabile.

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

Se vuoi aprire una shell interattiva usando sudo, dovresti esportare SSH_AUTH_SOCKtu stesso la variabile dopo aver ottenuto la shell.


Grazie per la risposta. Funziona perfettamente e ha un senso totale. Ci scusiamo per la risposta tardiva, non ho ricevuto la notifica che qualcuno aveva risposto.
Danny F,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.