Acessando SSH_AUTH_SOCK de outro usuário não root

7

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. Eu posso pular entre todas as minhas máquinas usando o ssh-agent no meu PC local. Isso funciona.

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

Eu tenho 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 são root).

O problema:

Quando eu mudo para outro usuário, mesmo que a variável SSH_AUTH_SOCK esteja configurada corretamente, (digamos que esteja configurada para: /tmp/ssh-HbKVFL7799/agent.13799) o usuário2 não tem acesso ao soquete que foi criado pelo user1 - O que, claro, faz sentido, caso contrário, o usuário2 poderia seqüestrar a chave privada do usuário1 e pular como esse usuário.

Este cenário funciona muito bem se, em vez de obter um shell via sudo para user2, eu recebo um shell via sudo para root. Porque naturalmente o root tem acesso a todos os arquivos na máquina.

A pergunta:

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

    
por Danny F 25.10.2012 / 01:21

1 resposta

8

Existem duas coisas que você precisa fazer:

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

Portanto, o que você poderia 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 /tmp permita 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ê quiser abrir um shell interativo usando sudo , você deverá exportar a variável SSH_AUTH_SOCK depois de obter o shell.

    
por 25.10.2012 / 06:05