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 /etc/httpd/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
- Apache Subversion FAQ (http://subversion.apache.org/faq.html)
- CentOS - HowTo - SELinux (http://wiki.centos.org/es/HowTos/SELinux)