2 votes

SVN txn-current-lock : Permission refusée

Je viens de mettre en place un dépôt SVN sur un serveur fonctionnant sous CentOS 6. J'ai suivi les instructions ici et les choses se passaient plutôt bien.

Jusqu'à ce que j'essaie d'importer ma structure de fichier initiale

svn import /path/to/wc http://svn.host.com/svn/repos -m "Init repo"

m'a donné les informations suivantes
svn: Can't open file '/home/podsvn/svn/repos/db/txn-current-lock': Permission denied

Cependant, svn import /path/to/wc file:///path/to/repository -m "Init Repo" Fonctionne à merveille, mais n'est pas utile pour travailler à distance avec le repo.

Un peu de recherche m'a permis de voir qu'il s'agissait d'un problème de permissions, mais toute configuration des permissions pour le repo a échoué :

Il s'agit des permissions par défaut du repo selon le tutoriel ci-dessus, qui échoue :

-rw-rw-r-- 1 apache apache  229 Jul 24 08:58 README.txt  
drwxrwxr-x 2 apache apache 4096 Jul 24 09:17 conf/  
drwxrwsr-x 6 apache apache 4096 Jul 24 08:58 db/  
-r--r--r-- 1 apache apache    2 Jul 24 08:58 format  
drwxrwxr-x 2 apache apache 4096 Jul 24 08:58 hooks/  
drwxrwxr-x 2 apache apache 4096 Jul 24 08:58 locks/  

J'ai ensuite ajouté root, apache, et mon utilisateur principal (appelé poduser qui a créé le repo via svnadmin create repos ) vers un nouveau groupe appelé svn, échoue toujours (même après s'être connecté et déconnecté à partir de ssh) :

-rw-rw-r-- 1 apache svn 229 Jul 24 08:58 README.txt  
drwxrwxr-x 2 apache svn 4096 Jul 24 09:17 conf/  
drwxrwsr-x 6 apache svn 4096 Jul 24 08:58 db/  
-r--r--r-- 1 apache svn 2 Jul 24 08:58 format  
drwxrwxr-x 2 apache svn 4096 Jul 24 08:58 hooks/  
drwxrwxr-x 2 apache svn 4096 Jul 24 08:58 locks/  

J'ai couru chmod -R g+w ./ . (Le ls -la j'obtiens toujours l'erreur Permission Denied.

Il semble que lorsque j'exécute import ou checkout il tente d'accéder au référentiel en tant qu'utilisateur autre que root, apache ou poduser.

Il est possible qu'il essaie de travailler avec l'utilisateur qui s'est connecté au repo (configuré dans /etc/svn-auth-conf via le tutoriel). Cependant, l'utilisateur SVN que j'ai configuré ici est séparé de tous les comptes sur le serveur réel, n'est-ce pas ? Je ne devrais pas avoir à me soucier de faire correspondre les utilisateurs SVN et les utilisateurs du serveur ?

Merci,
-Esa

4voto

user129509 Points 11

J'ai trouvé ma propre réponse. Derp.

J'ai donc compris que puisque je fais tourner un serveur svn apache, les commandes svn sont exécutées sous l'utilisateur du processus httpd.

J'ai donc tout d'abord lancé ps aux | egrep '(apache|httpd)' et j'ai trouvé ceci :

nobody    1488  0.0  0.2  99604  4960 ?        S    06:02   0:00 /usr/local/apache/bin/httpd -k start -DSSL  
root      1962  0.0  0.0   4140   668 pts/0    S+   06:28   0:00 egrep (apache|httpd)  
root     11404  0.0  0.2  99208  5188 ?        Ss   Jul24   0:00 /usr/local/apache/bin/httpd -k start -DSSL  
root     27766  0.0  0.1  99208  2340 ?        S    00:18   0:00 /usr/local/apache/bin/httpd -k start -DSSL  
nobody   27767  0.0  0.2  99604  5184 ?        S    00:18   0:00 /usr/local/apache/bin/httpd -k start -DSSL  
nobody   27768  0.0  0.2  99568  5188 ?        S    00:18   0:00 /usr/local/apache/bin/httpd -k start -DSSL  
nobody   27769  0.0  0.2  99604  5196 ?        S    00:18   0:00 /usr/local/apache/bin/httpd -k start -DSSL  
nobody   27770  0.0  0.2  99568  5168 ?        S    00:18   0:00 /usr/local/apache/bin/httpd -k start -DSSL  
nobody   27771  0.0  0.2  99568  5184 ?        S    00:18   0:00 /usr/local/apache/bin/httpd -k start -DSSL  

C'est là que le bât blesse. Les processus apache s'exécutent en tant que 'nobody' et non 'apache' ou 'svn' ou quoi que ce soit d'autre.

Il y a deux solutions possibles (je n'en ai essayé qu'une).

La seule chose que j'ai faite (et qui a fonctionné) a été d'aller dans httpd.conf, et de changer les lignes :

User nobody
Group nobody

A :

User apache
Group apache

Et puis service httpd restart et maintenant tous ces processus "nobody" sont exécutés par apache, et svn import fonctionne !

Une autre solution qui fonctionnerait probablement, mais que je n'ai pas testée, est d'aller dans votre repo et d'exécuter chgrp -R svn ./* pour que tous les fichiers du repo aient le groupe svn, puis ajouter l'utilisateur nobody au groupe svn ( usermod -g svn nobody ). Vous pouvez également ajouter d'autres utilisateurs au groupe, si vous le souhaitez (ce qui est probablement plus utile si vous utilisez une application svnserve svn, plutôt que par l'intermédiaire d'apache).

Je ne sais pas pourquoi la configuration d'Apache a été définie pour fonctionner en tant que personne, cela semble être la valeur par défaut sur les serveurs CentOS de GoDaddy (qui est le serveur sur lequel je fonctionne).

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X