Crie usuário SSH com privilégios limitados para usar apenas o repositório Git

12

Eu tenho um repositório git hospedado no meu servidor SunOS, que eu uso remotamente através do ssh

git clone ssh://[email protected]/path/to/git

Agora preciso adicionar mais usuários para poder acessar esse repositório, mas não sei como.

Adicionei um testUser ao ssh, mas não consigo limitar os privilégios de usuário para usar apenas o git.

testUser é capaz de navegar e navegar por todo o servidor.

Como posso criar usuários que só podem acessar o git remotamente, para clonar / puxar / empurrar etc ...

obrigado

Bach
fonte

Respostas:

12

Você pode considerar o uso do gitolite em um único usuário em vez de configurar vários usuários do git-shell (e as permissões de grupo e grupo necessárias para que eles possam compartilhar o acesso aos repositórios).

O gitolite é executado sob um único usuário normal no servidor e usa chaves públicas SSH para diferenciar o acesso aos repositórios Git (consulte “ como o gitolite usa ssh ” para obter alguns detalhes de como o gitolite faz sua identificação baseada em SSH). O gitolite oferece controle de acesso por repositório, por filial e até mesmo por caminho.

Chris Johnsen
fonte
1
+1 para gitosis ... Foi feito exatamente para esta configuração.
quer
12

Você basicamente tem duas opções.

  1. Como o topdog mencionado, ao criar usuários no servidor, defina seu shell como git-shell ( entrada do livro aqui ). Isso permitirá que o usuário efetue login via SSH, mas em vez de executar um shell normal com todos os recursos (por exemplo, sh, bash, etc.), Ele executará o git-shell, que apenas fornece acesso à funcionalidade git.

  2. Como alternativa, você pode disponibilizar seus repositórios por outro protocolo, como TCP (usando git-deamon ) ou HTTP / HTTPS. Eu recomendaria apenas esse cenário para acesso somente leitura.

Você mencionou que deseja dar suporte à funcionalidade "push" para seus usuários, portanto, você deve realmente optar pela opção 1.

chuckx
fonte
5

você precisa mudar seu shell para git-shell, que lhes dará acesso apenas às funções git.

Melhor cachorro
fonte
Obrigado topdog. Basicamente, o usuário estará usando seu próprio shell git no seu Mac. Eu realmente não quero que ele seja capaz de ssh para o servidor. Portanto, se o repositório git estiver em mydomain.com a partir do computador testUser / Mac, no terminal ele poderá simplesmente clonar ssh: //[email protected]/path/to/git, solicitando sua senha e faça o download do repositório. Eu apenas tentei agora definir seu shell para git-shell. Ele é solicitado ao chamar o clone, mas a senha está sendo rejeitada.
Bach
você precisa configurar o shell myUsers como git-shell, se tudo o que você deseja que eles façam no servidor é executar comandos git e não conseguir fazer o shell. Para obter as solicitações de senha, use as teclas. Para uma cobertura mais detalhada do git em um olhar servidor no livre git livro progit.org/book/ch4-0.html
topdog
obrigado pela referência do livro! muito útil. Acabou usando gitolite, ainda tendo problemas com a instalação.
Bach
git-shell : "Este é um shell de login para SSH contas para fornecer acesso Git restrito Ele permite a execução apenas do lado do servidor Git comandos implementar a funcionalidade puxar / push, além de comandos presentes em um subdiretório chamado git-Shell-comandos personalizada. diretório inicial do usuário ". No Linux, adicione "/ bin / git-shell" a "/ etc / shells" e depois "usermod --shell / bin / git-shell $ USER". Btw, o livro git está agora em git-scm.com/book/en/ch4-0.html
David Tonhofer
0

Outra maneira de fazer isso é limitar o acesso dos usuários no ssh.

( http://prefetch.net/blog/index.php/2006/09/05/limiting-access-to-openssh-directives/ )

O exemplo é apenas usando apenas um usuário, mas se os usuários estiverem no mesmo grupo, você poderá filtrá-los usando a diretiva de grupo. Algo como

AllowTcpForwarding yes
X11Forwarding yes

Match Group Users
         AllowTcpForwarding no
         X11Forwarding no
         $Here is a directive for git$
Nikolaidis Fotis
fonte