Como conceder leitura / gravação para um usuário específico em qualquer subdiretório existente ou futuro de um determinado diretório?

8

Eu hospedo meu próprio repositório git em um VPS. Digamos que meu usuário seja joão.

Estou usando o protocolo ssh para acessar meu repositório git, então meu URL é algo como ssh://[email protected]/path/to/git/myrepo/ .

Root é o proprietário de tudo o que está sob /path/to/git

Estou tentando dar acesso de leitura / gravação para john a tudo que está em /path/to/git/myrepo

Eu tentei chmod e setfacl controlar o acesso, mas ambos falharam da mesma maneira: eles aplicam direitos de forma recursiva (com as opções corretas) a todos os subdiretórios atuais existentes de /path/to/git/myrepo , mas assim que um novo diretório é criado, meu usuário não pode escrever no novo diretório.

Eu sei que existem ganchos no git que me permitem reaplicar os direitos após cada commit, mas estou começando a pensar que estou indo na direção errada porque isso parece muito complicado para um propósito muito básico.

Q : Como devo configurar o meu direito de dar acesso rw ao john para qualquer coisa em /path/to/git/myrepo e torná-lo resiliente à mudança de estrutura de árvore?

Q2 : Se eu der um passo atrás, mude a abordagem geral, por favor, me diga.

Editar : A pergunta foi respondida como está, mas essa foi a pergunta errada. A pergunta correta seria "Como configurar um repositório git simples no servidor para uso com acesso ssh?". Veja minha própria resposta.

    
por Samuel Rossille 28.09.2012 / 16:01

3 respostas

5

crie um grupo myrepousers , por exemplo, e adicione seus usuários git a esse grupo.

Em seguida, altere o grupo de tudo em / path / to / git / myrepo para myrepousers:

chown -R .myrepousers /path/to/git/myrepo

Em seguida, corrija as permissões:

chmod -R g+w /path/to/git/myrepo
find /path/to/git/myrepo -type d -exec chmod -R {} g+s \;

Deve estar tudo pronto.

    
por 28.09.2012 / 16:43
4

Na verdade, essa foi a abordagem errada. Depois de pesquisas adicionais, descobri que, no meu caso, eu tenho que usar os recursos de buildin do git do usuário para manipular os direitos do sistema de arquivos no repositório.

Basicamente é feito com a opção shared de git init , que pode ter (entre outros) os seguintes valores:

  • group : inicializa o repositório para que os arquivos e diretórios tenham acesso de gravação de usuário e grupo, e todos os outros tenham acesso de leitura
  • 0660 : mesmo, mas sem acesso de leitura para os outros.

Os diretórios e arquivos recém-criados têm automaticamente as permissões corretas. Você também pode usar git init em um repositório existente para reconfigurá-lo sem perder seu conteúdo.

Então, no final, o que eu tive que fazer:

  • Crie um grupo mygitrepo
  • Adicionar usuários a ele
  • chmod -R o repositório git para root:mygitrepo

E agora todos os usuários do grupo podem puxar / empurrar, e ninguém mais pode, e isso sem mexer nos direitos do sistema de arquivos.

git init --bare --shared=0660

link para obter mais informações.

    
por 01.10.2012 / 19:37
2

Se as ACLs forem suportadas, você poderá fazê-lo com as ACLs padrão. Cuidado, é fácil esquecer os que não aparecem quando você faz um ls -l .

find /path/to/git/myrepo -type d -exec setfacl -m d:u:john:rwx {} +

Mas, eu suspeito que você queira fazer algo um pouco mais organizado. A implantação do gitolite pode fornecer uma solução melhor.

    
por 28.09.2012 / 16:56