jueves, 22 de marzo de 2007

Subversion + UBUNTU + Apache + MySQL - Parte 5

A continuación les describo los pasos necesarios para que la autenticación de acceso a svn se haga contra una base de datos MySQL y no contra el archivo de passwords generado por htpasswd2.

Lo primero que debemos hacer es instalar mysql y el modulo de autenticación para apache.

$ sudo apt-get install mysql-server libapache2-mod-auth-mysql

Lo segundo es decirle a apache que tiene un nuevo modulo disponible para hacer autenticación.

$ cd /etc/apache2/mods-enabled/
$ sudo ln -s /etc/apache2/mods-available/auth_mysql.load .

Lo siguiente es configurar MySQL para que almacene la información de los usuarios:

Si MySQL no estaba configurado antes debemos asignarle un password al usuario root

$ mysqladmin -u root password

Después debemos crear la base de datos y la tabla de usuarios

mysql -uroot -p

mysql> grant all on svn_auth.* to svn_admin_user@localhost identified by 'password';

mysql> flush privileges;

mysql> create database svn_auth;

CREATE TABLE `clients` (
`username` varchar(25) NOT NULL default '',
`passwd` varchar(25) NOT NULL default '',
`groups` varchar(25) NOT NULL default '',
PRIMARY KEY (`username`),
KEY `groups` (`groups`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;


Para insertar usuarios se puede usar el siguiente sql:

INSERT INTO `clients` VALUES ('id del usuario', 'password', 'grupo');

El password se puede crear como encrypt('password') o se puede usar uno generado por el comando htpasswd2

insert into `clients` values ('user', encrypt('user1'), '');

$ htpasswd2 -bnm user user1
user:$apr1$l.Iwf/..$uSY81FEI6BT5SNozcT51t1

insert into `clients` values ('user', '$apr1$l.Iwf/..$uSY81FEI6BT5SNozcT51t1', '');

Ahora solo nos queda modificar Apache para que tome el cambio. Para eso debemos modificar el Location de /svn

$ sudo vi /etc/apache2/apach2.conf


DAV svn
# Directorio padre de todos los repositorios
SVNParentPath /ruta/a/dir/padre/de/repositorios
# Archivo con definicion de acceso a los repositorios
AuthzSVNAccessFile /etc/apache2/.svn_access_control
# Solo usuarios autorizados
Require valid-user
# How to authenticate a user
AuthType Basic
AuthName "Coloque su clave de acceso a Subversion"
# Configuracion de acceso a MySQL
AuthMYSQL on
AuthMySQL_Authoritative on
AuthMySQL_Host localhost
AuthMySQL_DB svn_auth
AuthMySQL_Password_Table clients
# Aqui se deben colocar los datos del usuario con acceso a la BD
AuthMySQL_User svn_admin_user
AuthMySQL_Password svn_admin_user_password
AuthMySQL_Group_Table clients
AuthMySQL_Empty_Passwords off
AuthMySQL_Encryption_Types Crypt_DES PHP_MD5 MD5
# Otros valores posibles
#AuthMySQL_Encryption_Types PHP_MD5 SHA1Sum Crypt_DES Plaintext Crypt_MD5 Crypt MySQL MD5
# Esto ya no hace falta
#AuthUserFile /etc/apache2/.dav_svn.passwd


Por ultimo, reiniciamos Apache

$ sudo /etc/init.d/apache2 force-reload

Y listo, así de fácil se hace la configuración.

No hay comentarios.: