Acessando SSH_AUTH_SOCK de outro usuário não raiz

11

O cenário:

Estou executando o ssh-agent no meu PC local e todos os meus servidores / clientes estão configurados para encaminhar a autenticação do agente SSH. Posso pular entre todas as minhas máquinas usando o agente ssh no meu PC local. Isso funciona.

Eu preciso ser capaz de fazer o SSH em uma máquina como eu (usuário1) , mudar para outro usuário chamado user2 ( sudo -i -u user2 ) e depois ssh para outra caixa usando o ssh-agent que estou executando no meu PC local. Digamos que eu queira fazer algo como ssh user3 @ machine2 (supondo que o user3 tenha minha chave SSH pública em seu arquivo allowed_keys).

Eu tenho o sudo configurado para manter a variável de ambiente SSH_AUTH_SOCK .

Todos os usuários envolvidos (usuário [1-3]), são usuários não privilegiados (não root).

O problema:

Quando mudo para outro usuário, mesmo que a variável SSH_AUTH_SOCK esteja definida corretamente, (digamos que esteja configurada para: /tmp/ssh-HbKVFL7799/agent.13799) user2 não tem acesso ao soquete criado pelo usuário1 - Qual das O curso faz sentido; caso contrário, o user2 pode seqüestrar a chave privada do user1 e saltar como esse usuário.

Esse cenário funciona bem se, em vez de obter um shell via sudo para o usuário2, eu obtiver um shell via sudo para root. Porque naturalmente o root tem acesso a todos os arquivos na máquina.

A questão:

De preferência usando o sudo, como posso mudar de usuário1 para usuário2, mas ainda assim ter acesso ao SSH_AUTH_SOCK do usuário1?

Danny F
fonte

Respostas:

12

Há duas coisas que você precisa fazer:

  1. defina a SSH_AUTH_SOCKvariável para que aponte para o arquivo correto
  2. permitir que o outro usuário se conecte ao soquete (usando permissões do sistema de arquivos)

Portanto, o que você pode fazer é:

Como usuário1, permita que o usuário2 se conecte ao soquete (acesso total ao soquete e permissões para entrar no diretório). Espero que o seu /tmppermita ACLs.

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

Mude para o outro usuário e exporte a variável corretamente.

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

Se você deseja abrir um shell interativo usando sudo, precisará exportar a SSH_AUTH_SOCKvariável depois de obter o shell.

chutz
fonte
Obrigado pela resposta. Isso funciona perfeitamente e faz total sentido. Desculpe pela resposta tardia, não recebi o aviso de que alguém havia respondido.
Danny F