Servidor bzr multiusuário

5

Atualmente estou investigando se é possível servir o bzr em um setup similar ao que o gitolite faz para o git. Isso significa uma única conta unix, com diferentes usuários gerenciados por meio de suas chaves públicas ssh. Eu ficaria feliz em integrar isso com o gitolite, caso em que o gerenciamento de usuários e a criação de um ~/.ssh/authorized_keys adequado poderiam ser delegados. Isso cuidaria da autenticação.

O que me preocupa é a autorização. Tanto quanto eu vejo, bzr serve fora da caixa tem apenas o --directory sinalizador para fornecer controle de acesso. Isso funciona bem ao fornecer a cada usuário seu próprio conjunto de repositórios, ou para atribuir usuários a grupos e dar a cada grupo um único conjunto fixo de repositórios. Com um pouco mais de trabalho, pode-se usar um diretório por usuário, mas usar links simbólicos para permitir acesso compartilhado a repositórios para vários usuários.

No entanto, isso ainda é muito menor do que o gitolite pode fazer. Usando essa abordagem, não é possível conceder acesso somente leitura a usuários individuais a alguns, mas acesso de leitura / gravação a outros repositórios. Nem é possível evitar a sobrescrita de pushes ou a criação de novos repositórios nos diretórios do usuário.

Pode ser que esses recursos ainda não tenham sido implementados. Em uma pergunta sobre estouro de pilha relacionada , estou perguntando sobre maneiras de implementar isso eu mesmo. Aqui no Server Fault estou me concentrando nas soluções existentes . Existe alguma solução pronta para uso que dota bzr serve com controle de acesso mais refinado do que uma simples --directory restrição? Uma solução completamente integrada como gitolite seria mais interessante, mas até mesmo alguns extensão que pode ser configurado para resolver um dos problemas que mencionei seria bom saber.

    
por MvG 02.12.2013 / 14:21

1 resposta

2

Se você não estiver definido em apenas um usuário, considere a configuração a seguir:

  • Cada usuário tem seu próprio UID.
  • umask para todos os usuários do bzr é 002.
  • Cada repositório tem um UID do proprietário e um grupo exclusivo de permissões de gravação.
  • Cada repositório tem um diretório baseado na árvore do UID do proprietário.
  • Cada diretório do repositório é sgid ( chmod g+s <repo> ).
  • Cada diretório de repositório possui o proprietário padrão fileacl rwX ( setfacl -R -m d:u:UID:rwX <repo>; setfacl -R -m u:UID:rwX <repo> ). Isso garante que o proprietário sempre possa excluir.
  • Cada diretório possui o modo 775 e cada arquivo 664.
  • Ao compartilhar um repositório, ele é vinculado ao diretório UID, como você mencionou usando a restrição de diretório.
  • Ao conceder acesso de gravação a um repositório, o usuário é adicionado ao grupo de permissões de gravação associado a esse repositório.

Assim, você pode controlar o acesso de leitura por "symlink exists" e escrever o acesso por "user in group". Se você quisesse implementar vários usuários principais para um repositório, você poderia adicionar um adicional d: u: UID: rwX, u: UID: rwX, um para cada mestre adicional.

    
por 26.11.2014 / 05:10