Como posso configurar as permissões no Linux para que dois usuários podem atualizar a mesma cópia de trabalho SVN no servidor?
-
03-07-2019 - |
Pergunta
O meu servidor tem tanto Subversion e Apache instalado, eo diretório web Apache é também uma cópia de trabalho do Subversion. A razão para isso é que o svn update /server/staging
comando simples irá implantar a mais recente fonte para o servidor intermediário.
Apache diretório web público: /server/staging
- (. Esta é uma cópia de trabalho SVN)
Eu tenho dois usuários no meu servidor, 'Richard' e 'Austin'. Ambos são membros do grupo 'desenvolvedores'. I recursivamente definir permissões no diretório server / a Richard: desenvolvedores, usando "sudo chown -R richard: desenvolvedores / servidor".
Eu, então, definir as permissões para ler, escrever e executar para ambos 'richard' eo grupo 'desenvolvedores'.
Assim, certamente, 'Austin' agora deve ser capaz de usar o comando svn update /server/staging
? No entanto, quando ele tenta, ele recebe o erro:
svn: Can't open file '/server/staging/.svn/lock': Permission denied
Se eu recursivamente alterar o proprietário de / servidor para Austin:. Desenvolvedores, ele pode executar o comando muito bem, mas, em seguida, 'Richard' não pode
Como faço para corrigir o problema? Eu quero criar um post-commit gancho com implantar automaticamente o site de teste quando os arquivos são cometidos, mas eu não posso ver uma maneira para que isso funcione para ambos os usuários. O gancho seria:
/usr/bin/svn update /server/staging
Usando a mesma conta de usuário para ambos não seria realmente uma solução aceitável, e eu não estou ciente de qualquer maneira para executar o comando no interior do gancho como 'root'.
Qualquer ajuda é apreciada!
Solução
Diretório Set Grupo ID
Se o bit setgid em uma entrada de diretório é definido, arquivos no diretório terá a propriedade de grupo como o diretório, em vez de que o grupo do usuário que criou o arquivo.
Este atributo é útil quando vários usuários precisam ter acesso a certos arquivos. Se os usuários trabalham em um diretório com o conjunto de atributos setgid, então qualquer arquivo criado no diretório por qualquer um dos usuários terão a permissão do grupo. Por exemplo, o administrador pode criar um grupo chamado spcprj e adicionar os usuários Kathy e Mark ao spcprj grupo. O spcprjdir diretório pode ser criado com o conjunto GID conjunto de bits e Kathy e Mark embora em diferentes grupos primários pode trabalhar no diretório e ter acesso completo a todos os arquivos no diretório, mas ainda não ser capaz de acessar arquivos em cada grupo primário diferente de .
O comando a seguir irá definir o GID bit em um diretório:
chmod g+s spcprjdir
A lista do diretório do diretório "spcprjdir":
drwxrwsr-x 2 kathy spcprj 1674 Sep 17 1999 spcprjdir
O "S '' em lugar do bit de execução nas permissões do grupo faz com que todos os arquivos gravados no diretório 'spcprjdir' pertencer ao grupo 'spcprj'.
edit: fonte = Linux Arquivos Permissões de Arquivos e
Outras dicas
Eu configurar svnserve
que é um servidor Subversion simples usando o protocolo svn://
. Você pode configurá-lo para que ele é executado sob a sua própria conta de usuário, em seguida, o repositório só seria acessada por aquele usuário. Este usuário poderia então ter os privilégios corretos para executar svn update /server/staging
em um post-commit gancho.
no SVN repo, você pode encontrar um diretório 'conf', onde você definir permissões. você tem 3 arquivos lá:
- authz
- passwd
- svnserve.conf
você definir no arquivo authz quais usuários têm que tipo de acesso, por usuário ou por grupo. definir grupos lá, grupos SVN grupos de usuários não linux (linhas hash são comentários):
[groups]
# harry_and_sally = harry,sally
projectgroup = richard,austin
# [/foo/bar]
# harry = rw -- user harry has read/write access
# * = -- everybody have no access
# [repository:/baz/fuz]
# @harry_and_sally = rw -- harry_and_sally group members have read/write access
# * = r -- everyone has read access
[/server/staging]
@projectgroup = rw
* = r
trabalho em torno este exemplo e definir a sua configuração. no arquivo 'passwd' você configurar senhas de usuários. executar
cat passwd
você vai ter arquivo comentou com a explicação como configurá-lo.
Eu uso WebDAV - todas as atualizações SVN e commits são tratados via apache e eu nunca ter tais problemas
.