jueves, 18 de junio de 2009

Mejorar calidad de LATEX en MOODLE





MOODLE es un sistema de gestión de aprendizaje increíblemente flexible, robusto y ademá mantenido por una comunidad de usuarios y desarrolladores realmente bárbara.

Dado que me ha tocado realizar la virtualización de "Matemática 2" de la Universidad, el uso de fórmulas matemáticas es intensivo.

Luego de haber realizado la habilitación del filtro de "LATEX" en MOODLE, varios profesores manifestaron que la calidad de los gráficos que se generaban era pobre. Pese a que yo los veía claros, decidí darme a la tarea de conseguir mejorar lo que ya era bueno :-)

Investigando en el sitio principal de MOODLE, vi que existían una gran cantidad de discusiones relacionadas con el tema. Hasta que por fin di con un POST que me indicaba claramente lo que debía hacer.

El secreto estaba en configurar MOODLE para que en vez de generar archivos ".gif", produjera archivos ".png". Esto obligó a editar un poco el código fuente del filtro de "LATEX" que trae MOODLE, pero para mi sorpresa no fué nada complicado.

Por el momento, esta solución la considero un "patch". Esperemos que el equipo de desarrollo de MOODLE realice el cambio permanente.

A continuación la solución:
  1. Editar el archivo ubicado dentro de la carpeta de MOODLE en "./filter/tex/texed.php" y cambiar:
    $image = md5($texexp) . ".gif";
    $filetype = 'image/gif';
    ... por ...
    $image = md5($texexp) . ".png";
    $filetype = 'image/png';
  2. Editar el archivo "./filter/tex/pix.php" y cambiar:
    $md5 = str_replace('.gif','',$image);
    ... por ...
    $md5 = str_replace('.png','',$image);
  3. Editar el archivo "./filter/tex/latex.php" y aplicar un par de cambios:
    ... el primero:
    $gif = "{$this->temp_dir}/$filename.gif";
    ... por ...
    $gif = "{$this->temp_dir}/$filename.png";
    ... y el segundo:
    unlink( "{$this->temp_dir}/$filename.gif" );
    ... por ...
    unlink( "{$this->temp_dir}/$filename.png" );
  4. Editar el archivo "./filter/tex/filter.php" y aplicar este último cambio:
    $filename = $md5 . ".gif";
    ... por ...
    $filename = $md5 . ".png";
  5. Finalmente, para aumentar el tamaño de las imágenes generadas por MOODLE, en la configuración del "filtro tex", cambiar el valor de "Densidad" por "160".
En este momento, tendremos nuestro MOODLE creando fórmulas inmejorables :D.

Éxitos!

José Gregorio.

FUENTES:
  1. http://moodle.org/mod/forum/discuss.php?d=120418
  2. http://docs.moodle.org/en/TeX_filter

sábado, 23 de mayo de 2009

SITIO WEB CON APACHE2 Y SSL


La aplicación de seguridad en nuestros sitios Web debe ser una práctica constante y sobretodo cuando existen ambientes hostiles como Internet o Intranets.

En este artículo, muestro cómo realizar la instalación de un certificado autofirmado en un sitio web creado en mi máquina local.

Para este ejemplo consideramos la siguiente información:





  • Sistema operativo: Por supuesto! ... GNU/Linux Debian Lenny :D
  • hostname: jgdu-laptop
  • ip: 192.168.1.114
  • Sólo se puede configurar un sitio seguro por cada dirección IP configurada en el sistema.
  • Suponemos que está instalado el servidor web "Apache 2".
A continuación los pasos necesarios:
  1. Identificar correctamente la máquina que tiene tendrá el sitio Web seguro:
    Esto es necesario revisarlo dado que es probable que nuestra máquina de prueba no esté registrada en ningún servidor de nombres de dominio. Entonces verificamos que el archivo "/etc/hosts" contenga la entrada correspondiente asociando al IP adecuado:
    ...
    192.168.1.114 jgdu-laptop jgdu-laptop
    ...
  2. Creación del certificado digital:
    root@jgdu-laptop:/etc/apache2# cd /etc/apache2
    root@jgdu-laptop:/etc/apache2# mkdir certs
    root@jgdu-laptop:/etc/apache2#cd certs
    ... aquí viene la creación del certificado ...
    root@jgdu-laptop:/etc/apache2# openssl req $@ -new -x509 -days 365 -nodes -out jgdu-laptop.crt -keyout jgdu-laptop.key
    ... se responden unas preguntas sencillas previas a la generación de los archivos.
  3. Verificar la creación de los archivos:
    root@jgdu-laptop:/etc/apache2# ls
    ... deben aparecer los siguientes archivos ...
    jgdu-laptop.crt jgdu-laptop.key
  4. Habilitar el módulo "SSL" en el servidor Web:
    root@jgdu-laptop:/etc/apache2# cd /etc/apache2/mods-available
    root@jgdu-laptop:/etc/apache2# a2enmod ssl
  5. Configurar el sitio Web SSL predeterminado:
    root@jgdu-laptop:/etc/apache2# cd /etc/apache2/sites-available
    root@jgdu-laptop:/etc/apache2# vim default-ssl
    Ubicar las directivas del certificado y establecer las rutas adecuadas a los archivos generados previamente.
    ...
    SSLCertificateFile /etc/apache2/certs/jgdu-laptop.crt
    SSLCertificateKeyFile /etc/apache2/certs/jgdu-laptop.key
    ...
  6. Habilitar el sitio Web con SSL:
    root@jgdu-laptop:/etc/apache2# cd /etc/apache2/sites-available/
    root@jgdu-laptop:/etc/apache2# a2ensite default-ssl
  7. Reinicar el servicio Web Apache2:
    root@jgdu-laptop:/etc/apache2# /etc/init.d/apache2 restart
  8. Probar el acceso al sitio seguro con un explorador visitando la página:
    https://jgdu-laptop/
Si deseamos que todo el tráfico de nuestro sitio Web se realice a través de una conexión segura, debemos habilitar el módulo "Rewrite" en el Apache2 y configurar el sitio por defecto "default" ubicado en "/etc/apache2/sites-available/default" con la regla de re-escritura siguiente:

RewriteEngine On
Options +FollowSymlinks
rewriteCond %{SERVER_PORT} 80
rewriteRule ^(.*)$ https://oe.asignaturas.usb.ve/moodle$1 [R,L]

Esta información se coloca dentro de las directivas "" pero fuera de los "".

Espero sea de utilidad.

Éxitos!

José Gregorio.

FUENTES CONSULTADAS:
  1. http://crysol.org/es/node/198
  2. http://www.debian-administration.org/article/Setting_up_an_SSL_server_with_Apache2
  3. http://www.gpltarragona.org/archives/318

jueves, 7 de mayo de 2009

VSFTPD: Very Secure File Transfer Protocol Daemon

En la práctica, realmente no soy un usuario consecuente con el uso de FTP para realizar la transferencia de archivos en ningún escenario que requiera usuarios, claves y permisos. Prefiero alternativas como SSP o DAV.

Sin embargo, son muchas las personas y programas que todavía mantienen el uso de este protocolo.

Es por esto que he escogido "VSFTPD", que al menos considera unas cuantas estrategias de seguridad para la trasnferencia de información entre máquinas de una red.

El "Demonio del protocolo de transferencia de archivos muy seguro" ofrece una serie de características interesantes para fortalecer las debilidades del FTP tradicional. Entre ellas está la integración con sistemas de bases de datos como MYSQL y PAM.

Aquí vamos con la instalación:
  1. Agregar el usuario que emplearemos para acceder vía FTP al sistema:
    # adduser usuario-ftp
    Ingresamos algunos datos descriptivos y la clave de acceso.
  2. Instalar el programa VSFTPD:
    # aptitude install vsftpd
  3. Editamos el archivo de configuración:
    # vim /etc/vsftpd.conf
    El archivo tiene un montón de opciones, aquí colocaré cómo he dejado el mío para que los usuarios queden "enjaulados" y no puedan estar husmeando por mi sistema:

    listen=YES
    #listen_ipv6=YES
    anonymous_enable=NO
    local_enable=YES
    write_enable=YES
    local_umask=022
    dirmessage_enable=YES
    xferlog_enable=YES
    connect_from_port_20=YES
    xferlog_file=/var/log/vsftpd.log
    xferlog_std_format=YES
    ascii_upload_enable=YES
    ascii_download_enable=YES
    ftpd_banner=Servicio FTP.
    chroot_local_user=YES
    chroot_list_enable=NO
    chroot_list_file=/usr/local/etc/vsftpd/vsftpd.chroot_list
    ls_recurse_enable=YES
    secure_chroot_dir=/var/run/vsftpd
    pam_service_name=vsftpd
  4. Si quieren ampliar la información de estos parámetro y muchos otros basta con que revisen el manual que trae el programa:
    # man vsftpd.conf
  5. Indicar los usuarios que serán "enjaulados" en el archivo "vsftpd.chroot_list":
    # vim /usr/local/etc/vsftpd/vsftpd.chroot_list
    Agregamos el nombre del usuario "usuario-ftp" sin las comillas.
  6. Reiniciar el servicio "vsftpd":
    # /etc/init.d/vsftpd restart
Las pruebas son muy sencillas. Basta con ejecutar desde cualquier máquina el comando "ftp" e indicar el usuario y claves creados previamente:
  1. Iniciar la sesión FTP:
    # ftp 192.168.1.100
    Ingresamos usuario y clave.
  2. Podemos intentar subir un archivo con el comando "put" y luego eliminarlo con "delete".
  3. También si ejecutamos el comando "hash", se mostrará una marca "#" por cada 1024 bytes (1k) transferido.
Interesante! :D

Éxitos!

José Gregorio.

FUENTES CONSULTADAS:
  1. http://linuxsix.blogspot.com/2008/10/servidor-ftp-con-vsftpd.html
  2. http://www.alcancelibre.org/staticpages/index.php/09-como-vsftpd
  3. http://alien2thisworld.net/sitePages/tutorials/vsftpd_virtual_users_setup.html
  4. http://howto.gumph.org/content/setup-virtual-users-and-directories-in-vsftpd/
  5. http://www.howtoforge.com/vsftpd_mysql_debian_etch