Esta semana tuve la necesidad de crear un nuevo usuario en un sistema de control de versiones Subversion. Una tarea sencilla, la cual dejo documentada en este breve artículo.



Subversion (abreviado SVN) es un sistema de control de versiones libre desarrollado y mantenido por la Fundación Apache. Fue creado originalmente como un sucesor de CVS y es utilizado por una gran cantidad de proyectos y empresas de desarrollo de software.

Los servidores SVN son generalmente implementados utilizando el módulo de Apache dav_svn (sobre el protocolo http://) y utilizando los mecanismos de autenticación Basic y Digest provistos por Apache. Aunque también es posible implementar un servidor SVN con svnserve (utilizando el protocolo svn://). Este artículo sin embargo cubre sólo la implementación de SVN sobre HTTP.

Anteriormente he cubierto y he explicado someramente los mecanismos de autenticación de Apache Basic y Digest, por ello veamos directamente la configuración del módulo dav_svn.

Tal como mencioné en párrafos anteriores, al implementar SVN como módulo de Apache (es decir, sobre el protocolo http://) se utilizan los mecanismos de autenticación provistos por Apache. Ya sea se utilice autenticación Basic o Digest, las credenciales de los usuarios se almacenan dentro de un archivo htaccess, y se administran a través de la herramienta htpasswd. La ubicación del archivo de credenciales (base de datos con pares usuario/contraseña) está definida en la configuración del módulo de Apache dav_svn. Por ejemplo:

root@ubuntu:~# nano /etc/apache2/mods-enabled/dav_svn.conf
<Location /svn_linuxito>
    DAV svn
    SVNPath /var/svn/repo_linuxito

    Options -FollowSymlinks -MultiViews
    AllowOverride None
    Order deny,allow
    Deny from all
    Allow from 192.168.1

    SetInputFilter DEFLATE
    SetOutputFilter DEFLATE

    AuthType Basic
    AuthName SVN_LINUXITO
    AuthUserFile /etc/apache2/htpasswd
    Require valid-user

    <IfModule mod_authz_svn.c>
       AuthzSVNAccessFile /etc/apache2/mods-enabled/dav_svn.authz
    </IfModule>
</Location>

Tal como se observa en esta configuración de módulo, se toman las credenciales desde el archivo /etc/apache2/htpasswd. A su vez se utiliza el módulo authz_svn, el cual toma la configuración de permisos (Path-Based Authorization) desde el archivo /etc/apache2/mods-enabled/dav_svn.authz.

Si se necesita agregar un nuevo usuario, o cambiar la contraseña de uno existente, se utiliza la herramienta htpasswd indicando la ruta al archivo que contiene las credenciales. Por ejemplo, crear el usuario "emiliano" con el siguiente comando:

root@ubuntu:~# htpasswd /etc/apache2/htpasswd emiliano

Al finalizar se observa la nueva entrada en el archivo especificado:

emiliano:$apr1$xxxxxxxxxx

Los mecanismos de autenticación Basic y Digest determinan el acceso al servidor (quién puede utilizar el sistema). La definición de permisos (qué pueden hacer los usuarios sobre los repositorios) en cambio se definen en el archivo /etc/apache2/mods-enabled/dav_svn.authz:

[groups]
todos = admin, guest, emiliano
linuxito = emiliano
solo_lectura = guest

[svn_linuxito:/]
@linuxito = rw
@solo_lectura = r
* =

La documentación de SVN cubre en profundidad la configuración de permisos de los usuarios definidos anteriormente, sobre los diferentes repositorios alojados en el servidor. Por defecto, los usuarios no tienen ningún tipo de privilegio sobre los repositorios.

Siempre es conveniente asignar permisos por grupo de usuarios (simplifica la administración). Para hacer miembro de un grupo a un usuario, basta con agregar el nombre de usuario separando con coma.

En la configuración anterior se definen los grupos de usuarios "todos", "linuxito" y "solo_lectura" a partir de los usuarios "admin", "emiliano" y "guest". Luego se define qué permisos tienen los grupos "linuxito" y "solo_lectura" sobre el repositorio "svn_linuxito". El asterisco en la configuración indica cuáles son los permisos por defecto.

Luego de editar este archivo, o el archivo de credenciales, no hace falta reiniciar el servicio apache2 ya que los cambios se ven reflejados inmediatamente.

Referencias

Version Control with Subversion - For Subversion 1.7

Version Control with Subversion [DRAFT] - For Subversion 1.8

Version Control with Subversion - For Subversion 1.7 - httpd, the Apache HTTP Server

Version Control with Subversion - For Subversion 1.7 - Path-Based Authorization


Tal vez pueda interesarte


Compartí este artículo