Autenticación nativa de Trac y Svn en hosting compartido de Dreamhost

By | junio 15, 2011

Dreamhost y sus famosos one-click instal son el reemplazo perfecto a los scripts fantastico que conocemos en todos los proveedores de hosting. Hace un año Trac no estaba disponible entre sus one-click install y después de hacer un par de hacks y workarrounds logre instalar mi propio sitio con Trac en mi cuenta de Dreamhost, sin embargo es un proceso un tanto doloroso a nivel de dificultad.

Recientemente Dreamhost añadio la posibilidad de instalar Trac con la salvedad que no podemos usar la autenticación de Trac como tal y en su lugar solo podemos vincularlo al archivo .passwd de nuestro repositorio y solo podremos restringir el acceso al sitio y no definir los niveles de autenticación de trac.

Si no saben de que hablo arriba pueden leer otros post :D

En este tutorial lo que vamos a hacer es lo siguiente

  • Añadir soporte a la administración de cuentas con el Account Manager Plugin sobre el archivo .passwd correspondiente al repositorio svn
  • Deshabilitar el acceso del usuario anonymous a nuestra instalación de trac
  • Crear un usuario “root” para el uso de Trac

Como requisitos tenemos:

  • La instalación de subversion tiene que haber sido realizada via one click install
  • La instalación de trac tiene que haber sido realizada via one click install
  • Conocimientos intermedios de bash y acceso via ssh

Preeliminares

Antes de entrar en materia recordaremos que Apache tiene integrada autenticación basica para restringir acceso a directorios, basta con crear un archivo .htaccess y un almacen de claves en un archivo .passwd para que cada vez que intentemos consultar una pagina dentro de un directorio, Apache no entregue la información sin antes proveer las credenciales correspondientes.

Cuando uno instala Svn y luego instala Trac mediante el one-click install Dreamhost, en teoria deberiamos tener una instalación de este tipo, y al ingresar a la url de Trac, el navegador nos deberia solicitar las mismas credenciales que si lo hicieramos ingresando a la url de nuestro repositorio Svn. Vinculo que en mi caso no funciono :@ y podia ver mi proyecto en Trac sin proveer credenciales.

Además de esto la instalación de Dreamhost crea un usuario anonymous y le da todos los privilegios de lectura sobre nuestro proyecto en Trac, en mi caso necesitaba que solo ciertos usuarios pudieran ver la wiki del proyecto y solo necesitaba un usuario administrador con acceso al explorador de código.

El caso de ejemplo es el siguiente, mi usuario es tuxtor, mi subdominio de proyectos es prueba.shekalug.org, voy a tener instalado Svn en prueba.shekalug.org/svn y tran en prueba.shekalug.org/trac, los directorios importantes seran los siguientes.

Directorio principal ($HOME) = /home/tuxtor

Directorio de binarios ejecutables para mi usuario ($BIN) = /home/tuxtor/packages

Directorio de instalacion de Trac para el dominio ($TRAC)= $HOME/pruebas_shekalug_org_trac_trac

Directorio del proyecto de trac ($PROJ)= $HOME/pruebas.shekalug.org/trac

Directorio de configuraciones de Svn ($SVN) = $HOME/svn

Hasta este punto es buena idea exportar estas variables como variables de entorno para trabajar más comodamente. En una configuracion estandar de Dreamhost, solo la variable $HOME estara disponible y de aqui en adelante solo hare referencia al nombre de las variables de entorno.

Reemplazando el .passwd por el Account Manager Plugin

Como seguramente no funciona el metodo de autenticación del one click install, la mayoria de usuarios de Dreamhost logramos entrar a nuestro proyecto de Trac y vemos el codigo, wiki, administrador de proyecto y al intentar iniciar sesión obtenemos el siguiente resultado:

Internal Error: Authentication information not available. Please refer to the installation documentation.

Basicamente no tenemos el administrador de usuarios instalado en Trac y no entrare en más detalles :D.

Una vez hemos iniciado sesión via secure shell tenemos que generar nuestra propia copia del plugin de administración de cuentas, o en terminologia python nuestro propio egg (modulo) con los siguientes comandos (descarga, genera egg y copia)

1
2
3
4
5
cd
svn checkout http://trac-hacks.org/svn/accountmanagerplugin/0.11
cd 0.11
python setup.py bdist_egg
ls dist

El resultado de estos comandos debe ser el nombre del nuevo egg generado dentro del servidor, similar al siguiente:

TracAccountManager-0.2.1dev_r5836-py2.4.egg

Ahora copiamos el egg hacia nuestro proyecto de trac

1
cp dist/TracAccountManager-0.2.1dev_r5836-py2.4.egg $PROJ/plugins/

Ya que tenemos listo el soporte de account manager, tenemos que enlazarlo a nuestro archivo svn para conservar las mismas credenciales que el respositorio, cuando utilizamos el one-click install todos estos archivos se generan dentro de la carpeta $SVN y el nombre del archivo sera el equivalente al campo ID de proyecto cuando generamos el repositorio.

Por ejemplo si el id de proyecto que se utilizo en la generacion del repositorio fue “chinfunflantortillas” el archivo .passwd correspondiente sera $SVN/chinfunflantortillas.passwd, y con esta información agrego la configuración a mi archivo trac.ini que se encuentra en el directorio $PROJ/conf/trac.ini

[account-manager]
password_file = /home/tuxtor/svn/chinfunflantortillas.passwd
password_store = HtPasswdStore

Además de esto habilito el plugin de account-manager, agregando tambien la siguiente información al archivo trac.ini

[components]
trac.web.auth.LoginModule = disabled
acct_mgr.admin.* = enabled
acct_mgr.api.* = enabled
acct_mgr.db.* = enabled
acct_mgr.htfile.* = enabled
acct_mgr.http.* = enabled
acct_mgr.notification.* = enabled
acct_mgr.pwhash.* = enabled
acct_mgr.svnserve.* = enabled
acct_mgr.web_ui.* = enabled

Eliminando privilegios de usuario anonymous

Una vez tenemos todo listo, tenemos que restringir el acceso a nuestros usuarios, esto lo logramos eliminando los privilegios del usuario anonymous, para eso ejecutamos los siguientes comandos:

1
2
$BIN/trac-admin $PROJ
permission remove anonymous *

Y listo, el usuario anonymous oficialmente no tiene acceso a ninguna sección de nuestro proyecto, ya es un proyecto privado

Agregando un usuario “root”

El equivalente a un usuario root en Trac, es un usuario con privilegios de TRAC_ADMIN, y con un conjunto de instrucciones similar al anterior, asignamos todos los privilegios al usuario tuxtor:

1
2
$BIN/trac-admin $PROJ
permission add tuxtor TRAC_ADMIN

Si todo salio bien hasta este paso tendremos la siguiente pantalla de inicio de sesión, totalmente administrada por Trac:

Aunque suene dificil, creo que es más facil que configurar Drupal

Otros links utiles

Guia de administración de permisos de Trac (en ingles): http://trac.edgewall.org/wiki/TracPermissions

Respuesta de Dreamhost al error mencionado en el post: http://discussion.dreamhost.com/archive/index.php/thread-128767.html

Tutorial original y confuso de Dreamhost: http://wiki.dreamhost.com/Troubleshoot_Trac_One-Click_Install

facebook comments:

One thought on “Autenticación nativa de Trac y Svn en hosting compartido de Dreamhost

  1. dhabyx
    Usando Firefox 4.0.1 Firefox 4.0.1 en GNU/Linux x64 GNU/Linux x64

    hace ratos que no me ponía al tanto con dream host, aunque la comparación con drupal fue buena xD, por cierto yo lo hacía por consola y administración por svn para los usuarios, pero este otro método parece genial :D

Deja un comentario