Tengo múltiples repositorios de subversión que se sirven a través de Apache 2.2 y WebDAV. Todos están ubicados en un lugar central, y utilicé este artículo de debian-administration.org como base (aunque abandoné el uso de la autenticación de la base de datos para un archivo htpasswd simple).
Desde entonces, también comencé a usar WebSVN . Mi problema es que no todos los usuarios del sistema deberían poder acceder a los diferentes repositorios, y la configuración predeterminada de WebSVN es permitir que cualquiera que pueda autenticarse.
De acuerdo con la documentación de WebSVN, la mejor manera de evitar esto es usar el sistema de acceso de ruta de Subversion, así que busqué crear esto, usando la directiva AuthzSVNAccessFile.
Sin embargo, cuando hago esto, sigo recibiendo mensajes "403 Prohibidos".
Mis archivos tienen el siguiente aspecto:
Tengo la configuración de política predeterminada en un archivo:
<Location /svn/>
DAV svn
SVNParentPath /var/lib/svn/repository
Order deny,allow
Deny from all
</Location>
Cada repositorio obtiene un archivo de política como el siguiente:
<Location /svn/sysadmin/>
Include /var/lib/svn/conf/default_auth.conf
AuthName "Repository for sysadmin"
require user joebloggs jimsmith mickmurphy
</Location>
El archivo default_auth.conf contiene esto:
SVNParentPath /var/lib/svn/repository
AuthType basic
AuthUserFile /var/lib/svn/conf/.dav_svn.passwd
AuthzSVNAccessFile /var/lib/svn/conf/svnaccess.conf
No estoy completamente seguro de por qué necesito el segundo SVNParentPath en default_auth.conf, pero lo agregué hoy porque recibía mensajes de error como resultado de agregar la directiva AuthzSVNAccessFile.
Con un archivo de acceso totalmente permisivo
[/]
joebloggs = rw
el sistema funcionó bien (y esencialmente no cambió), pero tan pronto como empiezo a tratar de agregar algún tipo de restricciones, como
[sysadmin:/]
joebloggs = rw
en cambio, vuelvo a aparecer los errores 'Permiso denegado'. Las entradas del archivo de registro son:
[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
¿Qué necesito hacer para que esto funcione? ¿He configurado Apache incorrectamente o no entiendo bien el archivo svnaccess.conf?
Si voy por este camino equivocado, no tengo un apego particular a mi enfoque general, así que siéntase libre de ofrecer alternativas también.
ACTUALIZACIÓN (20090528-1600):
Intenté implementar esta respuesta , pero todavía no puedo hacer que funcione correctamente.
Sé que la mayoría de la configuración es correcta, ya que he agregado
[/]
joebloggs = rw
al principio y 'joebloggs' tiene el acceso correcto.
Sin embargo, cuando trato de ir al repositorio específico, hago algo como
[/]
joebloggs = rw
[sysadmin:/]
mickmurphy = rw
luego recibí un error de permiso denegado para mickmurphy (joebloggs todavía funciona), con un error similar al que ya tenía anteriormente
[Thu May 28 10:40:20 2009] [error] [client 89.100.219.180] Access denied: 'mickmurphy' GET svn:/sysadmin
Además, olvidé explicar previamente que todos mis repositorios están debajo
/var/lib/svn/repository
ACTUALIZACIÓN (20090529-1245):
Todavía no hubo suerte para que esto funcione, pero todos los signos parecen estar apuntando al problema de que el control de acceso a la ruta en subversion no funciona correctamente. Mi suposición es que no he configurado apache o svn para reconocer correctamente mi estructura de repositorio.
Esto se debe a que la entrada '[/]' parece funcionar perfectamente.
También se me ocurre que esta pregunta puede ser mejor en StackOverflow.
ACTUALIZACIÓN (20090603-1740):
En respuesta a uno de los comentarios a esta pregunta, mi configuración de WebDAV para la subversión en sí recibe la ubicación / svn / repos pero websvn está configurado en / websvn.
fuente
Respuestas:
El problema probablemente esté relacionado con la división de la configuración entre dos directivas de ubicación, pero no estoy seguro.
En lugar de definir permisos en dos lugares (configuración de apache y el archivo authz), simplemente defínalos en el archivo authz. Al igual que:
httpd.conf
svn.authz
Obviamente, también necesitará los usuarios adecuados en el archivo htpasswd.
fuente
No tengo idea de si ha resuelto o no este problema, pero este es el procedimiento que funciona para mí.
Olvídese de jugar con las directivas de apache, en su lugar edite el archivo config.php de WebSVN e incluya / descomente la siguiente directiva:
$ config-> useAuthenticationFile ('/ ruta / a / your / authz / file');
fuente
esto funciona para mi
user1 puede ver "/" y "/ project1" user3 puede ver solo "/ project1"
[grupos]
groupa = usuario1, usuario2
grupob = usuario3, usuario4
[/]
@groupa = rw
[/Proyecto 1]
@groupb = rw
fuente
He luchado mucho con esto, y la única configuración que funciona para mí es la siguiente:
Como resultado, group1 tiene acceso de lectura y escritura al proyecto1, y group2 tiene acceso de lectura al proyecto2. Todos los demás no tienen acceso a ningún proyecto.
Debo enfatizar que "proyecto1" y "proyecto2" son proyectos dentro del repositorio definidos en el archivo de configuración de Apache
subversion.conf
como.Mi problema actual es que no es posible enumerar los proyectos en el repositorio
/svn/repos
(aunque se puede acceder a ellos correctamente).SVNListParentPath
en la directiva, independientemente de dónde lo coloque, no ayuda.Actualmente my
/var/www/svn
no es un repositorio, sino solo un directorio en un sistema de archivos de servidores./var/www/svn/repos
es un repositorio creado consvnadmin create
fuente
Deberías haber leído el documento de websvn y todo habría sido obvio :)
fuente