Permissões apropriadas do Subversion usando HTTP e autorização de repositório com usuários do Linux

2

Desculpe por essa pergunta "estúpida", mas não consigo encontrar uma solução na internet. Por favor me ajude.

Estou usando o Subversion em um servidor Linux para manter sob controle de versão os arquivos de um projeto de website que estou mantendo.

Esta é minha configuração:

Pasta do projeto (uma cópia de trabalho do repositório no servidor, para acessar o projeto e ver o site com um navegador - o Apache aponta para esse diretório como DocumentRoot):

/var/projects/prj

Pasta do repositório:

/var/repo/prjrepo

Quando instalei o SVN ( apt-get install subversion libapache2-svn ), ele não criou nem a subversão do usuário nem a subversão do grupo. Eu não entendo o porquê.

Eu uso o TortoiseSVN no Windows para fazer o checkout / update / commit.

Eu uso HTTP para me conectar a repositórios com uma lista de usuários autorizados:

http://1.2.3.4/svn/prjrepo

A lista de usuários autorizados para o repositório é salva em um arquivo htpasswd com a lista de usuários e suas senhas MD5.

Claro que o Apache é executado como www-data.

A pasta prj é de propriedade de root: root e outros possuem apenas acesso rx aos arquivos, exceto para aqueles diretórios que o www-data precisa escrever (upload de arquivos, por exemplo).

A pasta do repositório é de propriedade de um usuário e grupo que eu criei svn: svn, mas talvez isso seja insuspeito. As permissões são rwx para usuário e para grupo e nada para outros. Além disso, forcei g + s em todas as pastas, para que o grupo svn sempre seja o proprietário de todos os novos arquivos.

O problema é que quando eu envio um arquivo para o repositório, ele diz que ele falhou devido a "permissão negada". Eu posso entender o porquê: a pasta do repositório é de propriedade do svn: svn, mas o Tortoise faz uma requisição HTTP para o servidor quando ele se compromete. As solicitações HTTP são executadas como www-data, que obviamente não têm permissões para o repositório.

Também adicionei uma ação de pós-commit para atualizar a cópia de trabalho (pasta prj) em cada commit. Se eu mudar o grupo de proprietários do repositório para www-data, o Tortoise é capaz de confirmar, mas é claro que a ação de pós-commit continua com erro porque o www-data não pode gravar TODOS os diretórios e arquivos na pasta prj. E isso está correto (o www-data não pode escrever arquivos que tem apenas para ler - é o Apache, é o site…).

Então, eu realmente não consigo descobrir como configurar corretamente as permissões nas pastas para que tudo funcione corretamente. Lembre-se que o www-data NÃO DEVE ter acesso de gravação ao prj porque ele tem apenas que ler esses arquivos (exceto algumas pastas como a usada para uploads de arquivos, por exemplo).

Outra questão: agora, o Apache é configurado para permitir acesso ao repositório apenas para os usuários definidos em um arquivo htpasswd específico criado para essa finalidade (veja acima). Existe alguma maneira de tornar o repositório acessível a alguns usuários do LINUX sem definir novos usuários apenas para o acesso ao repositório? Isso é possível? Como?

    
por tobia.zanarella 06.02.2014 / 19:55

1 resposta

3

Se você estiver usando a opção DAV para subversão, precisará fornecer ao servidor da web acesso ao repositório. Isso pode ser tão simples quanto alterar todos os arquivos / diretórios para o repositório que pertence a www-data.

Se você quiser que sua ação pós-commit faça algo útil, provavelmente precisará verificar a configuração sudo sem senha para os scripts / comandos específicos que precisa executar durante a execução como www-data. Então, no seu script de pós-comando, você pode ter algo como

sudo bash -c 'cd /var/projects/prj ; svn update'
    
por 06.02.2014 / 20:20