Guía rápida de instalación de Subversion (SVN) en CentOS

...

La siguiente guía permite instalar Subversion bajo CentOS (Linux) utilizando Apache como servidor de acceso a los repositorios mediante el protocolo http.

Nota: los comandos detallados en esta guía, salvo aclaración en contrario, se asumen ejecutados con la identidad de root.

Acerca de la versión de CentOS

Aunque el procedimiento de instalación de subversion en CentOS es similar para todas las versiones, conviene conocer la versión y el bitnes del OS. Los siguientes comandos permiten identificar la versión de CentOS y la arquitectura del procesador.

# cat /etc/redhat-release
# uname -a

Instalación y configuración de Subversion en CentOS

Instalación de los paquetes de binarios requeridos por Subversion

# yum install subversion
# yum install mod_dav_svn

Creación de un repositorio

Los siguiente comandos realizan la creación del directorio /var/svn y un repositorio denominado repo001 dentro del mismo.

# mkdir /var/svn
# svnadmin create /var/svn/repo001

Para permitir que el repositorio sea expuesto por http utilizando un servidor Apache tendremos que cambiar el owner del repositorio asignado el usuario utilizado por el servidor.

# chown -R apache /var/svn/repo001

Verificar el contenido del nuevo directorio "repo001" correspondiente al repositorio creado.

# ls -l /var/svn/repo001/
total 48
drwxr-xr-x 2 apache root 4096 Aug 15 14:52 conf
drwxr-sr-x 6 apache root 4096 Aug 15 14:52 db
-r--r--r-- 1 apache root    2 Aug 15 14:52 format
drwxr-xr-x 2 apache root 4096 Aug 15 14:52 hooks
drwxr-xr-x 2 apache root 4096 Aug 15 14:52 locks
-rw-r--r-- 1 apache root  229 Aug 15 14:52 README.txt

Configuración del servidor web Apache

Consideraciones si está habilitado SELinux

SELinux o "Security-Enhanced Linux" es un mecanismo que proporciona políticas de control de acceso obligatorio al sistema operativo, estas políticas definen como las aplicaciones y los usuarios pueden acceder a los archivos, directorios, etc. De esta manera se incorpora una capa de protección adicional, asignando un "Contexto de seguridad" a cada archivo, directorio y proceso; cuando un proceso accede a un archivos esta capa de seguridad verificará que el contexto de seguridad del mismo sea compatible con el contexto de seguridad del archivo al que desea acceder.

Ejecutando el comando sestatus podemos conocer el estado de SELinux.

# sestatus
SELinux status:                 enabled
SELinuxfs mount:                /selinux
Current mode:                   enforcing
Mode from config file:          enforcing
Policy version:                 24
Policy from config file:        targeted

Para ejecutar Subversion con Apache será necesario establecer el contexto de seguridad de los repositorios para que el servidor Apache pueda acceder al contenido de los mismos.

De manera similar a como el comando chmod establece los permisos tradicionales de Linux, el comando chcon es utilizado para establecer el contexto de seguridad de los archivos.

# chcon -R --type httpd_sys_content_t /var/svn/repo001

El mecanismo anterior persiste los cambios entre reinicios del sistema, sin enbargo ante un proceso de re-etiquetado ("relabeled') se perderán, por ello es conveniente indicar a SELinux cual será la "política" por omisión para los archivos ubicados en el repositorio utilizando el comando semanage fcontext.

# semanage fcontext -a -t httpd_sys_content_t "/var/svn/wds/src(/.*)?" 
# semanage fcontext -a -t httpd_sys_script_rw_t "/var/svn/wds/src/[^/]+/(dav|db)(/.*)?" 
# semanage fcontext -a -t httpd_sys_script_exec_t "/var/svn/wds/src/[^/]+/hooks(/.*)?" 
# restorecon -Rv /var/svn/wds/src

El modificador -a del comando fcontext indica que estaremos agregando una regla y con el modificador -t especificamos el contexto aplicar en los archivos.

Utilizaremos el contexto httpd_sys_content_t para los archivos generales del repositorio. Dentro de los directorios dav y db se encuentran los archivos fuente y otros archivos que son modificados por el servidor, en este caso utilizaremos el contexto httpd_sys_script_rw_t. En el directorio hooks se disponen los programas que serán ejecutados ante determinados comandos o eventos dentro del servidor, por ello utilizaremos el contexto httpd_sys_script_exec_t.

El comando restorecon permite restaurar -aplicar en nuestro caso- los permisos por omisión de los archivos.

Archivo de credenciales para autenticación básica

Cuando se configura el acceso a los repositorios mediante un servidor Apache, el mecanismo de autenticación básico (HTTP Basic authentication) es la forma mas simple de agregar seguridad para la verificación de identidades.

Utilizando la utilidad htpasswd podremos administrar las credenciales de los usuarios en un archivo, el siguiente comando permite crear el archivo y agregar un nuevo usuario al mismo.

# htpasswd -c -m /etc/svn-auth.htpasswd user01   
New password:
Re-type new password:
Adding password for user user01

Nota: la primera vez que utilizamos el comando htpasswd tendremos que utilizar el parámetro -c para crear el archivo.

Modificar configuración del servidor Apache para exponer los repositorios

Si necesitamos acceder a los repositorios a través de http será necesario configurar el servidor Apache para que actue como servidor SVN.

Para realizar las siguientes modificaciones será necesario editar el el archivo /etchttpd/conf.d/subversion.conf.

Identificar la sección de carga de módulos y verificar que se encuentra habilitada la carga de los módulos mod_dav_svn.so y mod_authz_svn.so.

LoadModule dav_svn_module     modules/mod_dav_svn.so
LoadModule authz_svn_module   modules/mod_authz_svn.so

Al final del archivo agregar la siguiente definición para exponer los repositorios svn:

<Location>
DAV svn
# Directiva para exponer multiples repositorios
SVNParentPath /var/svn  
# Autenticación Basica
AuthName "Repositorio Subversion"
AuthType Basic
AuthUserFile /etc/svn-auth.htpasswd  
# Autorizar solo usuarios autenticados
Require valid-user
</Location>

La definición precedente permitirá:

  • exponer todos los repositiores definidos en la ubicación /var/svn
  • autenticación básica de acuerdo a las credenciales definidas en el archivo /etc/svn-auth.htpasswd.
  • acceso solo a los usuarios autenticados.

Referencias


Modificado por última vez en Martes, 01 Octubre 2013 09:21

Acerca del autor

Diego E. Mendoza

Diego se desempeña como arquitecto de software en MicroGestion participando en el proceso de análisis y diseño de soluciones que tengan requerimientos de alta disponibilidad, integración de ambientes heterogéneos, orientación a servicios, gestión de procesos de negocio, etc.