Controle de acessos no Git simples e seguro com Gitosis

14 de fevereiro de 2010 6:13 pm · Tags: ,,,,,,

Existem algumas formas de se fazer controle de acesso no GitW, a forma mais simples é criar o repositório com acesso a um grupo e adicionar os usuários com acesso a esse grupo. Se um grupo apenas não for suficiente para gerenciar os acessos ao repositório pode ser possível utilizar ACL’s.
O único problema desse esquema é que exige que cada usuário tenha acesso SSHW ao servidor e isso muita das vezes não é interessante para o administrador do servidor.

Outra forma de se fazer o controle de acesso é através de WebDAVW. A vantagem é que nesse caso o gerenciamento dos usuários é feito através de um arquigo que deve ser gerado e atualizado com o utilitário htpasswd (htpasswd2 em algumas distribuições como o Gentoo), porém para executar o WebDAV é preciso um servidor web como o Apache ServerW ou LighttpdW.
Se sua escolha for pelo WebDAV, o HowToW disponível na própria documentação do Git ou em http://www.kernel.org/pub/software/scm/git/docs/howto/setup-git-server-over-http.txt explica como fazer.

Uma forma mais simples e segura é utilizar o Gitosis. Sua principal vantagem é ser executado via ssh através de autenticação via chave pública, porém utilizando uma única conta compartilhada cujos comandos disponíveis são limitados.

Instalação

A instalação do Gitosis é simples, se sua distribuição não oferecer um pacote de instalação basta clonar o repositório git://eagain.net/gitosis.

#Gentoo
echo "dev-util/gitosis-gentoo" >> /etc/portage/package.keywords/git
emerge dev-util/gitosis-gentoo -uND 
 
#CentOS (com Epel)
yum install gitosis.noarch
 
#via Git
cd /usr/src/
git clone git://eagain.net/gitosis gitosis
cd gitosis
python setup.py install

Se ao tentar instalar via repositório ocorrer um dos erros abaixo:

-bash: python: command not found

Ou:

Traceback (most recent call last):
  File "setup.py", line 2, in ?
    from setuptools import setup, find_packages
ImportError: No module named setuptools

É preciso instalar o pacote python-setuptools:

#Gentoo
emerge dev-python/setuptools -uND
 
#Ubuntu
apt-get install python-setuptools
 
#CentOS
yum install python-setuptools.noarch

Configuração

Após instalado é preciso criar o grupo e o usuário que serão utilizados pelo Gitosis e adicionar a chave pública do usuário que irá gerenciar a sua configuração. Caso necessário faça o upload da chave pública para um diretório onde o script gitosis-init tenha acesso e execute-o:

#crie o grupo e o usuário
groupadd git
useradd -m -d /home/git/gitosis -g git git
 
#informe a chave pública através de um arquivo
sudo -H -u git gitosis-init < /tmp/ida_rsa.pub
 
#ou cole o conteúdo na entrada padrão do terminal
sudo -H -u git gitosis-init

Agora, a partir do local de sua preferência, faça o clone do admin do gitosis e edite sua configuração:

cd /usr/src/
git clone git://servidor/gitosis-admin.git gitosis-admin
cd gitosis-admin
vim gitosis.conf

Observe que o formato usuario@host1 representa o comentário adicionado ao final da chave pública e que normalmente é o login do usuário seguido do nome da máquina onde a chave foi gerada.

[gitosis]
 
[group admins]
members = usuario1@host1
 
[group gitosis-admin]
writable = gitosis-admin
members = @admins
 
[group devel_projeto1]
writable = projeto1
members = @admins

Mais configurações podem ser feitas no arquivo, verifique o arquivo de exemplo fornecido com Gitosis. Após alterada a configuração faça o commit e sincronize com o servidor:

git commit gitosis.conf -m "permissões para o projeto1"
git push

O primeiro repositório

Uma vez que a configuração esteja feita, é hora de criar o primeiro repositório, pra isso crie um diretório para o projeto e adicione-o ao Git.

#inicia um repositório localmente
mkdir -p ~/projetos/projeto1
cd ~/projetos/projeto1
git init
git remote add origin git@servidor:projeto1.git
 
#adiciona arquivo ao repositório
touch arquivo1.txt
git add arquivo1.txt
git commit arquivo1.txt
 
#inicia o repositório no servidor
git push origin master:refs/heads/master

Definindo os acessos ao repositório

Definir os acessos ao repositório envolve apenas 3 passos; o primeiro deles é adicionar a chave pública do usuário, caso isso ainda não tenha sido feito:

cd /usr/src/gitosis-admin/
cp /tmp/id_dsa.pub keys/fulano.pub
git add keys/fulano.pub

Em seguida é necessário definir os acessos que o usuário deverá ter no arquivo gitosis.conf:

[group devel_projeto1]
writable = projeto1
- members = @admins
+ members = @admins fulano

Por último, é preciso fazer o commit dos arquivos e sincronizar com o repositório remoto:

git commit -a -m "adicionadas permissões para o usuário Fulano"
git push

Pronto, agora já é possível para o usuário Fulano realizar o clone do repositório e executar commits:

cd ~/projetos/
git clone git://servidor/projeto1.git projeto1
 
#execute as alterações
cd projeto1
vim arquivo1.txt
touch arquivo2.txt
 
#e faça o commit para o repositório local e sincronizae com o repositório remoto
git add commit2.txt
git commit arquivo1.txt arquivo2.txt -m "adicionado arquivo2.txt e alterado arquivo1.txt"
git push

Referências:

Compartilhe:

  • Print
  • Digg
  • del.icio.us
  • Google Bookmarks
  • Add to favorites
  • email
  • LinkedIn
  • Netvibes
  • PDF
  • Rec6
  • Reddit
  • RSS
  • Slashdot
  • StumbleUpon
  • Twitter
  • Yahoo! Bookmarks

Posts Relacionados:

Related posts brought to you by Yet Another Related Posts Plugin.

No Responses to “Controle de acessos no Git simples e seguro com Gitosis”

Care to comment?

Powered by WP Hashcash

Switch to our mobile site