web-dev-qa-db-fra.com

Impossible d'ouvrir le fichier 'svn/repo/db/txn-current-lock': autorisation refusée

J'ai configuré un serveur Linux et installé Apache, SVN et dav_svn dessus. Maintenant, quand j'essaye de télécharger vers https://x.x.x.x:x/svn/repo avec Tortoise SVN, je reçois 

Can't open file '/server/svn/repo/db/txn-current-lock': Permission denied

J'ai correctement configuré mon SSL (je peux passer à la caisse, aucun problème, même à distance en raison de la redirection de port).

Je suppose que cela a à voir avec la propriété Linux des dossiers du référentiel. Comment dois-je définir ceci/quelles sont les commandes?

49
wsd

C'est un problème commun. Vous rencontrez presque certainement des problèmes d'autorisations. Pour le résoudre, assurez-vous que l'utilisateur Apache dispose d'un accès en lecture/écriture sur l'ensemble de votre référentiel. Pour ce faire, chown -R Apache:apache *, chmod -R 664 * pour tout ce qui se trouve dans votre référentiel svn.

Voir aussi ici et ici si vous êtes toujours bloqué.


Mise à jour pour répondre à la question supplémentaire d'OP dans les commentaires:

La chaîne "664" est une représentation octale (base 8) des autorisations. Il y a ici trois chiffres représentant les autorisations pour les propriétaire _, groupe et tous les autres (parfois appelés «monde»), respectivement pour ce fichier ou répertoire .

Notez que chaque chiffre de base 8 peut être représenté avec 3 bits (000 pour "0" à 111 pour "7"). Chaque bit signifie quelque chose:

  • premier bit: autorisations de lecture
  • deuxième bit: autorisations d'écriture
  • troisième bit: exécuter les autorisations

Par exemple, 764 sur un fichier signifierait que:

  • le propriétaire (premier chiffre) a les droits de lecture/écriture/exécution (7)
  • le groupe (deuxième chiffre) a une permission de lecture/écriture (6)
  • tout le monde (troisième chiffre) a lu la permission (4)

J'espère que ça clarifie les choses!

67
John Feminella

C'est un problème de permission. Ce ne sont pas les droits de lecture/écriture "classiques" des utilisateurs Apache, mais bien ceux de Selinux.

Apache ne peut pas écrire dans les fichiers étiquetés httpd_sys_content_t, ils ne peuvent être lus que par Apache.

Vous avez 2 possibilités:

  1. étiqueter les fichiers de référentiel svn en tant que httpd_sys_content_rw_t:

    chcon -R -t httpd_sys_content_rw_t /path/to/your/svn/repo
    
  2. set selinux boolean httpd_unified --> on

    setsebool -P httpd_unified=1
    

Je préfère la 2e possibilité. Vous pouvez aussi jouer avec d'autres booléens selinux connectés avec httpd:

getsebool -a | grep httpd
13
mezek

J'ai également eu ce problème récemment, et c'est le SELinux qui l'a causé… .. J'essayais de faire en sorte que le post-commit de Subversion informe Jenkins que le code a été modifié pour que Jenkins puisse le construire et le déployer sur Nexus.

Je devais faire ce qui suit pour le faire fonctionner. 

1) J'ai d'abord vérifié si SELinux est activé:

    less /selinux/enforce

Cela affichera 1 (pour activé) ou 0 (pour désactivé)

2) désactiver temporairement SELinux:

    echo 0 > /selinux/enforce

Maintenant, teste si cela fonctionne maintenant. 

3) Activer SELinux:

    echo 1 > /selinux/enforce

Changez la politique pour SELinux. 

4) Tout d’abord, visualisez la configuration actuelle:

    /usr/sbin/getsebool -a | grep httpd

Cela vous donnera: httpd_can_network_connect -> off

5) Activez cette option pour que votre post-commit fonctionne avec SELinux:

    /usr/sbin/setsebool -P httpd_can_network_connect on

Maintenant, il devrait fonctionner à nouveau.

3
user2169568

par exemple sur debian

Sudo gpasswd -a svn-admin www-data
Sudo chgrp -R www-data svn/
Sudo chmod -R g=rwsx svn/
1
puchu

Je viens d'avoir ce problème 

  1. Avoir plusieurs utilisateurs utilisant le même repo a causé le problème 
  2. Déconnexion evey autre utilisateur utilisant le repo 

J'espère que cela t'aides

0
Pascal

3 étapes que vous pouvez suivre

  1. chmod -R 775 <repopath>  
    --->permissions for repository
    
  2. chown -R Apache:apache  <repo path>  
    ---> change owner as like svn conf file
    
  3. chcon -R -t httpd_sys_content_t /<repo path>  
    ----> change security context for svn repositary
    
0
Dreem Job

Outre les autorisations du référentiel, le répertoire /tmp doit également être accessible en écriture pour tous les utilisateurs.

0
Lofty Lion