¿Cómo restrinjo el acceso al repository a través de WebSVN?

Nota: Originalmente hice esta pregunta en serverfault.com pero solo obtuve una respuesta hasta el momento, y cuanto más pienso en ello, más me doy count de que probablemente sea mejor en stackoverflow.

Tengo varios repositorys de subversión que se sirven a través de Apache 2.2 y WebDAV. Todos están ubicados en un lugar central, y usé este artículo de debian-administration.org como base (sin embargo, abandoné el uso de la authentication de database para un file htpasswd simple).

Desde entonces, también he comenzado a usar WebSVN . Mi problema es que no todos los usuarios en el sistema deberían poder acceder a los diferentes repositorys, y la configuration pnetworkingeterminada de WebSVN es permitir que cualquiera pueda autenticarse.

De acuerdo con la documentation de WebSVN, la mejor manera de evitar esto es utilizar el sistema de acceso de routes de Subversion, así que busqué crear esto, usando la directiva AuthzSVNAccessFile.

Cuando hago esto, sigo recibiendo posts de "403 prohibidos".

Mis files se ven así:

Tengo una configuration de política pnetworkingeterminada en un file:

<Location /svn/> DAV svn SVNParentPath /var/lib/svn/repository Order deny,allow Deny from all </Location> 

Cada repository obtiene un file de política como a continuación:

 <Location /svn/sysadmin/> Include /var/lib/svn/conf/default_auth.conf AuthName "Repository for sysadmin" require user joebloggs jimsmith mickmurphy </Location> 

El file 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 acabo de agregar que hoy recibí posts de error como resultado de agregar la directiva AuthzSVNAccessFile.

Con un file de acceso totalmente permisivo

 [/] joebloggs = rw 

el sistema funcionó bien (y esencialmente no se modificó), pero a medida que empiezo a tratar de agregar cualquier tipo de restricciones como

 [sysadmin:/] joebloggs = rw 

en su lugar, recibo los errores de "Permiso denegado" de nuevo. Las inputs del file de logging 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é debo hacer para que esto funcione? ¿Ha configurado mal el apache o mi comprensión del file svnaccess.conf es incorrecta?

Si estoy haciendo esto de la manera equivocada, no tengo ningún apego particular a mi enfoque general, así que no dude en 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 configuration es correcta, ya que he agregado

 [/] joebloggs = rw 

al comienzo y 'joebloggs' tiene todo el acceso correcto.

Sin embargo, cuando bash ir al repository específico, hago algo como

 [/] joebloggs = rw [sysadmin:/] mickmurphy = rw 

luego recibí un error de permiso denegado para mickmurphy (joebloggs aún 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 repositorys están debajo

 /var/lib/svn/repository 

ACTUALIZACIÓN (20090529-1245):

Todavía no hay suerte en hacer que esto funcione, pero todos los signos parecen indicar que el problema es que el control de acceso a routes en subversión no funciona correctamente. Mi suposition es que no he configurado apache o svn para reconocer adecuadamente mi estructura de repository.

Esto se debe a que la input '[/]' parece funcionar perfectamente.

También se me ocurre que esta es una pregunta que puede pertenecer mejor a StackOverflow.

Puede generar files de contraseña md5 utilizando la utilidad htpasswd de apache (ubicada en el directory bin).

Luego, en su httpd.conf:

 <Location /svn> DAV svn SVNParentPath "repo path" AuthType Basic AuthName "Repository" AuthUserFile "password file path" Require valid-user SVNListParentPath on #if you want a repository listing for the whole svn directory </Location> 

Esto requerirá authentication de usuario, y solo se aceptarán para el acceso las combinaciones de nombre de usuario / contraseña ubicadas en el file de contraseña (desde htpasswd).

Además, también puede especificar el acceso de solo lectura para todos, pero use el file de contraseña para commits, etc. de la siguiente manera (dentro de la label de location):

 <LimitExcept GET PROPFIND OPTIONS REPORT> Require valid-user </LimitExcept> 

Si entiendo lo que necesita, esto debería resolverlo para acceder a nivel de usuario.

EDITAR:

Olvidé mencionar que si utiliza un file de contraseña, asegúrese de que no se puede acceder a través de la web (es decir, no se asignan alias o directory en apache donde está almacenado).

Debes dar a todos acceso de lectura a la raíz. Luego elimine el acceso de lectura de repositorys específicos según sea necesario. Trabajar con grupos de usuarios puede ayudar a mantener la configuration pequeña.

Puede probarlo así:

 [/] * = r [sysadmin:/] mickmurphy = joebloggs = rw