Gostaria de configurar um servidor git sobre ssh, com uma única conta SSH para o projeto. Todos os membros do projeto devem ter suas chaves SSH listadas emauthorized_keys. O bloqueio deve restringir o acesso apenas para fazer coisas git e apenas dentro de um diretório dedicado.
Qual é a melhor maneira de criar tal configuração? Existe o git-shell, que aparentemente pode bloquear apenas comandos git, mas não consigo descobrir como restringir o acesso a um único diretório. Existem também vários wrappers Python e Ruby - em qual deles devo confiar?
Responder1
Responder2
Qual é o seu modelo de ameaça?
O mocinho destrói acidentalmente o repositório git ou outros dados:Certifique-se de que seus usuários possam escrever apenas em seu homedir, tmp e no repositório git. Faça backup do repositório após cada confirmação e pratique os procedimentos de recuperação regularmente.
O bandido rouba a chave privada de alguém e quer ser dono do seu sistema:Sua superfície de ataque é limitada a partes do sshd protegidas por autenticação - e a qualquer interface de shell que você usar, portanto, torne-a o menor possível. Os wrappers Python/Ruby envolvem muito código e muito espaço para erros. Use o git-shell ou considere usar as diretivas Match e ChrootDirectory em sshd_config para limitar quais partes do sistema de arquivos os usuários podem acessar.
O bandido rouba a chave privada de alguém e obtém seu código-fonte:Ensine aos usuários como proteger suas chaves privadas e estabeleça procedimentos para revogar chaves rapidamente (por exemplo, para quem ligar às 4h da manhã para revogar as chaves).
Não use .ssh/authorized_keys
, em vez disso use a AuthorizedKeyfile
palavra-chave em sshd_config para especificar um caminho onde os usuários não têm acesso de gravação, por exemplo /etc/ssh/keys/%u
. É muito difícil garantir que os usuários nunca consigam substituir .ssh/authorized_keys por sua própria cópia.
Além disso, mantenha os arquivos-chave do usuário e sshd_config controlados por versão para permitir auditorias.