Acceder a SSH_AUTH_SOCK desde otro usuario no root

11

El escenario:

Estoy ejecutando ssh-agent en mi PC local, y todos mis servidores / clientes están configurados para reenviar la autenticación del agente SSH. Puedo saltar entre todas mis máquinas usando el agente ssh en mi PC local. Eso funciona.

Necesito poder usar SSH en una máquina como yo mismo (usuario1) , cambiar a otro usuario llamado usuario2 ( sudo -i -u usuario2 ) y luego pasar a otro cuadro usando el agente ssh que tengo en mi PC local. Digamos que quiero hacer algo como ssh user3 @ machine2 (suponiendo que user3 tenga mi clave SSH pública en su archivo autorizado_keys).

He configurado sudo para mantener la variable de entorno SSH_AUTH_SOCK .

Todos los usuarios involucrados (usuario [1-3]), son usuarios no privilegiados (no root).

El problema:

Cuando cambio a otro usuario, aunque la variable SSH_AUTH_SOCK esté configurada correctamente, (digamos que está configurada en: /tmp/ssh-HbKVFL7799/agent.13799) user2 no tiene acceso al socket creado por el usuario1 - Cuál de Por supuesto, tiene sentido, de lo contrario, user2 podría secuestrar la clave privada de user1 y saltar como ese usuario.

Este escenario funciona bien si en lugar de obtener un shell a través de sudo para user2, obtengo un shell a través de sudo para root. Porque, naturalmente, la raíz tiene acceso a todos los archivos de la máquina.

La pregunta:

Preferiblemente usando sudo, ¿cómo puedo cambiar de usuario1 a usuario2, pero aún así tener acceso a SSH_AUTH_SOCK del usuario1?

Danny F
fuente

Respuestas:

12

Hay dos cosas que debes hacer:

  1. configura la SSH_AUTH_SOCKvariable para que apunte al archivo correcto
  2. permitir que el otro usuario se conecte al socket (usando los permisos del sistema de archivos)

Por lo tanto, lo que puedes hacer es:

Como usuario1, permita que el usuario2 se conecte al socket (acceso completo al socket y permisos para ingresar al directorio). Espero que /tmppermita ACL.

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

Cambie al otro usuario y exporte la variable correctamente.

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

Si desea abrir un shell interactivo utilizando sudo, tendría que exportar la SSH_AUTH_SOCKvariable usted mismo después de obtener el shell.

chutz
fuente
Gracias por la respuesta. Eso funciona perfectamente y tiene mucho sentido. Perdón por la respuesta tardía, no recibí el aviso de que alguien había respondido.
Danny F