J'ai plusieurs référentiels de subversion qui sont servis via Apache 2.2 et WebDAV. Ils sont tous situés dans un endroit central, et j'ai utilisé cet article debian-administration.org comme base (j'ai cependant abandonné l'utilisation de l'authentification de la base de données pour un simple fichier htpasswd).
Depuis lors, j'ai également commencé à utiliser WebSVN . Mon problème est que tous les utilisateurs du système ne devraient pas pouvoir accéder aux différents référentiels, et la configuration par défaut de WebSVN est d'autoriser quiconque peut s'authentifier.
Selon la documentation WebSVN, la meilleure solution consiste à utiliser le système d'accès au chemin de subversion, j'ai donc cherché à le créer à l'aide de la directive AuthzSVNAccessFile.
Cependant, lorsque je fais cela, je reçois des messages "403 interdits".
Mes fichiers ressemblent à ceci:
J'ai des paramètres de stratégie par défaut dans un fichier:
<Location /svn/>
DAV svn
SVNParentPath /var/lib/svn/repository
Order deny,allow
Deny from all
</Location>
Chaque référentiel obtient un fichier de stratégie comme ci-dessous:
<Location /svn/sysadmin/>
Include /var/lib/svn/conf/default_auth.conf
AuthName "Repository for sysadmin"
require user joebloggs jimsmith mickmurphy
</Location>
Le fichier default_auth.conf contient ceci:
SVNParentPath /var/lib/svn/repository
AuthType basic
AuthUserFile /var/lib/svn/conf/.dav_svn.passwd
AuthzSVNAccessFile /var/lib/svn/conf/svnaccess.conf
Je ne sais pas vraiment pourquoi j'ai besoin du deuxième SVNParentPath dans default_auth.conf, mais je viens d'ajouter cela aujourd'hui car je recevais des messages d'erreur suite à l'ajout de la directive AuthzSVNAccessFile.
Avec un fichier d'accès totalement permissif
[/]
joebloggs = rw
le système a bien fonctionné (et est resté essentiellement inchangé), mais dès que j'ai commencé à essayer d'ajouter tout type de restrictions telles que
[sysadmin:/]
joebloggs = rw
au lieu de cela, je reçois à nouveau les erreurs «Autorisation refusée». Les entrées du fichier journal sont les suivantes:
[Thu May 28 10:40:17 2009] [error] [client 89.100.219.180] Access denied: 'joebloggs' GET websvn:/
[Thu May 28 10:40:20 2009] [error] [client 89.100.219.180] Access denied: 'joebloggs' GET svn:/sysadmin
Que dois-je faire pour que cela fonctionne? Vous avez mal configuré Apache ou ma compréhension du fichier svnaccess.conf est-elle incorrecte?
Si je m'y trompe, je n'ai aucun attachement particulier à mon approche globale, alors n'hésitez pas à proposer également des alternatives.
MISE À JOUR (20090528-1600):
J'ai essayé d'implémenter cette réponse , mais je n'arrive toujours pas à le faire fonctionner correctement.
Je sais que la plupart de la configuration est correcte, comme je l'ai ajouté
[/]
joebloggs = rw
au début et «joebloggs» a alors tous les accès corrects.
Quand j'essaie de me rendre spécifique au référentiel, faire quelque chose comme
[/]
joebloggs = rw
[sysadmin:/]
mickmurphy = rw
puis j'ai obtenu une autorisation refusée erreur pour mickmurphy (joebloggs fonctionne toujours), avec une erreur similaire à ce que j'avais déjà précédemment
[Thu May 28 10:40:20 2009] [error] [client 89.100.219.180] Access denied: 'mickmurphy' GET svn:/sysadmin
De plus, j'ai oublié d'expliquer précédemment que tous mes référentiels sont en dessous
/var/lib/svn/repository
MISE À JOUR (20090529-1245):
Pas de chance pour que cela fonctionne, mais tous les signes semblent indiquer que le contrôle d'accès au chemin dans Subversion ne fonctionne pas correctement. Mon hypothèse est que je n'ai pas configuré apache ou svn pour reconnaître correctement ma structure de référentiel.
En effet, l'entrée «[/]» semble fonctionner parfaitement.
Il me vient également à l'esprit que c'est une question qui pourrait mieux appartenir à StackOverflow?
MISE À JOUR (20090603-1740):
En réponse à l'un des commentaires de cette question, ma configuration WebDAV pour subversion elle-même reçoit l'emplacement / svn / repos mais websvn est défini sur / websvn.