Permitir que um usuário acesse um único repositório Git

1

Considere um servidor que hospede vários repositórios Git:

$ ls -l /opt/git/
drwxrwxr-x 7 ubuntu root   4096 Jan  2  2014 george.git
drwxrwxr-x 7 ubuntu root   4096 Dec 29  2013 john.git
drwxrwsr-x 7 ubuntu root   4096 Jul  4  2013 paul.git
drwxrwsr-x 7 ubuntu root   4096 Jun 30  2013 ringo.git

Até agora, todos os desenvolvedores tinham acesso a todos os repositórios do Git via SSH. Agora estou adicionando um desenvolvedor que deve ter acesso somente ao john.git repo. Eu criei um usuário Linux yoko , mas não sei como devo deixar yoko acessar o diretório /opt/git/john.git da maneira mais segura sem permitir que ele acesse os outros diretórios em /opt/git/ .

Qual é a maneira canônica de restringir o acesso como tal?

Minha inclinação é tornar o john.git como grupo foobar e adicionar esse grupo aos grupos do usuário yoko . No entanto, o que acontece se mais tarde eu precisar adicionar outro usuário que possa acessar dois repos? Por exemplo, talvez eu queira adicionar o usuário cynthia com acesso a ambos os john.git e paul.git . Eu deveria ter um grupo separado para cada repositório do Git? Eu pude ver que ficar muito difícil de gerenciar

Observe que esses usuários devem ter acesso a nada além de seus próprios diretórios /home/user/ e, além disso, ao (s) repo (s) do Git que são permitidos. Se houver uma maneira de fazer uma ligação simbólica, ou seja, /home/yoko/john.git to /opt/git/john.git de uma maneira que impeça o acesso ao restante de /opt/git/ , o melhor seria, mas não consigo configurar o sistema como tal.

O servidor está executando o Ubuntu Server 12.04, mas eu poderia atualizá-lo para o 14.04, se houver necessidade. Os usuários se conectam via SSH usando chaves RSA, sem senha. Eles estarão executando git pull e git push no servidor, nada mais.

    
por dotancohen 07.08.2014 / 14:52

1 resposta

1

Para um pequeno número de repos, a abordagem de grupos funciona bem. Sim, cada repositório precisa do seu próprio grupo e fica mais complicado se você tiver mais repos. Como o @AlexeyTen mencionou nos comentários, se você tiver um número maior de repos, ou se quiser uma interface de gerenciamento mais "de alto nível", você deve procurar um gerenciador de repo como gitolite ou gitlab. O Gitolite é gerenciado através de arquivos de texto em um repositório git (arquivos de configuração e chaves SSH estão comprometidos com um repositório git especial e enviados, e tudo está configurado). O Gitlab, por outro lado, é um aplicativo da web tudo-em-um similar em conceito a um Github auto-hospedado. Se você não precisa de todos os sinos e assobios, o gitolite quase certamente fará o trabalho perfeitamente.

    
por 13.08.2015 / 00:55