Controle de acessos no Git simples e seguro com Gitosis
14 de fevereiro de 2010 6:13 pm · Tags: CentOS,Desenvolvimento,Gentoo,Git,Linux,Segurança,UbuntuExistem 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:
- scie.nti.st » Hosting Git repositories, The Easy (and Secure) Way
- http://www.kernel.org/pub/software/scm/git/docs/gittutorial.html
Posts Relacionados:
Related posts brought to you by Yet Another Related Posts Plugin.
Tags: CentOS,Desenvolvimento,Gentoo,Git,Linux,Segurança,Ubuntu
Categories: Artigos
No Comments »

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