Como posso configurar as permissões no Linux para que dois usuários podem atualizar a mesma cópia de trabalho SVN no servidor?

StackOverflow https://stackoverflow.com/questions/164597

  •  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!

Foi útil?

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

.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top