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

8

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.

kaybenleroll
fuente
¿En qué URL relativa del servidor se ejecuta su websvn? En mi configuración actual, websvn está en / websvn, mientras que el repositorio en sí está en / svn
Sander Rijken
hola kaybenleroll me puedes ayudar en esto? stackoverflow.com/questions/13541629/…
Junio

Respuestas:

5

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

<Location /svn>
  DAV svn
  SVNParentPath /var/lib/svn/repository

  Require valid-user
  AuthType Basic
  AuthName "Subversion Repository"
  AuthUserFile /path/to/.htpasswd

  SVNPathAuthz on
  AuthzSVNAccessFile /path/to/svn.authz
</Location>

svn.authz

[groups]
sysadmins = joebloggs jimsmith mickmurphy

# By default, nobody has any permissions
[/]
* = 

# sysadmins get access to the sysadmin repository
[sysadmin:/]
@sysadmins = rw

Obviamente, también necesitará los usuarios adecuados en el archivo htpasswd.

Alex J
fuente
Me puedes ayudar con esto ? stackoverflow.com/questions/13541629/…
Junio
4

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
No, nunca lo resolvió por completo. Probaré tu idea. :)
kaybenleroll
¡+1 tuve el mismo problema y esto lo solucionó por completo! ¡Gracias!
John Virgolino
2

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
1

He luchado mucho con esto, y la única configuración que funciona para mí es la siguiente:

Authz file
------
[groups]
group1=user1
group2=user2

#Read and write for everyone defined in some group, others denied
[/]
@group1=rw
@group2=rw
*=

[project1:/]
@group1=rw
*=

[project2:/]
@group2=r
*=
----end authz file

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.confcomo.

Subversion.conf
----
LoadModule dav_module         modules/mod_dav.so
LoadModule dav_svn_module     modules/mod_dav_svn.so
LoadModule authz_svn_module   modules/mod_authz_svn.so

<Location /svn>
   DAV svn
   SVNParentPath /var/www/svn
   AuthType Basic
   AuthName "Name of the root repositories"
   Require valid-user
</Location>

<Location /svn/repos>
   AuthName "Subversion subrepository"
   AuthUserFile /var/www/svn/repos/conf/passwdfile
#Authz control
   AuthzSVNAccessFile /var/www/svn/repos/conf/authz
</Location>

-----end

Mi problema actual es que no es posible enumerar los proyectos en el repositorio /svn/repos(aunque se puede acceder a ellos correctamente). SVNListParentPathen la directiva, independientemente de dónde lo coloque, no ayuda.

Actualmente my /var/www/svnno es un repositorio, sino solo un directorio en un sistema de archivos de servidores. /var/www/svn/reposes un repositorio creado consvnadmin create

Marko Kosunen
fuente
0

Deberías haber leído el documento de websvn y todo habría sido obvio :)

También tenga en cuenta que no debe usar el comando AuthzSVNAccessFile para definir el archivo de acceso.

Ahora que ha definido su autenticación, se le pedirá su nombre de usuario y contraseña para acceder al directorio WebSVN. Todo lo que queda es configurar WebSVN para usar su archivo de acceso Subversion para controlar el acceso. Agregue esta línea a su archivo config.php:

$ config-> useAuthenticationFile ('/ ruta / a / accessfile');

Bartek
fuente