Forma segura de permitir que os usuários façam upload de suas chaves públicas

2

Eu preciso que usuários não confiáveis, estranhos, façam upload de seu id_rsa.pub para o meu servidor e para o usuário authorized_keys (usuário git no meu caso). Qual é a maneira mais segura de conseguir isso, sem ter que fazer nada manualmente?

Estou particularmente pensando em uma interface da web, mas se houver strongs vantagens de outro método, estou aberto a ideias.

O daemon http é executado como usuário http e git não deve estar vulnerável a ataques do usuário http , no caso de http ser comprometido.

    
por Flavius 18.12.2014 / 22:22

2 respostas

2

Use outros processos como intermediário. Seu serviço da Web (ou qualquer outro) grava novas solicitações em um spool em algum lugar. O intermediário observa o spool, remove e sanity verifica as novas entradas e anexa o que é válido ao arquivo authorized_keys do git . O mesmo intermediário pode dar feedback que o serviço da Web pode ler. Mas um usuário http comprometido não pode manipular o intermediário ou o usuário git. Seu intermediário pode ser um daemon ou até mesmo um trabalho cron.

Como alternativa, já que obviamente você está com más idéias :), podemos aproveitar o fato de que 1), não importa qual, o usuário git terá acesso de gravação ao seu próprio arquivo authorized_keys e 2) você concorda com qualquer pessoa que tenha acesso SSH ao usuário git . Portanto, como o seu usuário http se enquadra em "qualquer pessoa", forneça ao seu par de chaves ssh de http e adicione a chave pública ao arquivo de chaves autorizadas do usuário git . Agora, seu serviço da Web pode simplesmente fazer um ssh -n git@localhost echo $key >> ~/.ssh/authorized_keys . Não há lapso na segurança aqui, porque um estranho com acesso SSH seria capaz de fazer exatamente isso de qualquer maneira.

Se a obtenção de um shell não for algo que você deseja para seu usuário git de acesso aberto (porque a segurança é importante, você sabe), mas se você ainda permitir que git push seja emitido sobre SSH, então você pode obter meta realmente criando um repositório apenas para commits de chave pública. Seu usuário http terá um clone desse repositório e seu serviço da web emitirá commits e push. Em seguida, um gancho do lado do servidor pode verificar a (s) chave (s) no commit e adicioná-lo ao arquivo authorized_keys do seu usuário git após a validação.

Mas vamos supor que tudo isso seja concluído de alguma forma de alguma forma. O que você terá é um sistema em que qualquer pessoa pode conceder acesso SSH para seu usuário git . Então, qual é o sentido da autenticação SSH? Você quer que estranhos tenham acesso ao shell? Por que não apenas anular a senha do usuário git e permitir senhas vazias? Ou, se você não pretende que esses usuários tenham algo a não ser a capacidade de clonar o SSH, por que não evitar toda essa confusão apenas servindo seus repositórios através do protocolo http ou git?

    
por 19.12.2014 / 15:35
2

Como não há problemas em permitir que usuários não confiáveis adicionem suas chaves públicas ao arquivo authorized_keys do usuário git , você também pode informar a senha de git .

    
por 19.12.2014 / 10:51