howto

Usar Ldap para la autentificación en Apache

Apache y ldap

Alguna vez abréis tenido que proteger alguna carpeta del apache con un nombre de usuario y contraseña. Recordarlos luego puede ser un caos, pero hoy en dia existe el ldap, y podremos usar nuestras cuentas de ldap para acceder a estas carpetas. Vamos a necesitar tener instalado ldap, apache y los modulos de apache mod_ldap y mod_authz_ldap.

Lo primero que tendremos que hacer es activar los modulos en el apache (reiniciaremos el apache para que tengan efectos los cambios):

>> sudo a2enmod ldap
>> sudo a2enmod authz_ldap
>> sudo /etc/init.d/apache2 restart

Tendremos que asegurarnos de que esté activa la opcion del apache AllowOverride o si no queremos que esté activa para todas carpetas activarlo solo para la que queremos proteger (Por ejemplo para /var/www/html/carpeta):

<Directory "/var/www/html/carpeta">
    # Activamos para que use .htaccess
    AllowOverride All
</Directory>

Una vez tengamos todo lo qeu necesitamos vamos a lo que importa. Tendremos que ir al directorio que queramos proteger con la autentificación de apache y crearemos un archivo llamado .htaccess y añadiremos el siguiente contenído (para un ldap instalado en la misma máquina del apache 127.0.0.1 y con una raiz o=organizacion,c=es y que se logeen usando el uid):

order deny,allow
deny from all
# localhost
allow from  127.0.0.1
AuthName "Te tienes que autentificar con los usuarios de ldap."
AuthType Basic
AuthBasicProvider ldap
AuthzLDAPAuthoritative off
AuthLDAPURL ldap://127.0.0.1/o=organizacion,c=es?uid
require valid-user
Satisfy any

Esta configuración dejará el acceso a las peticiones desde la misma máquina en la que esta el apache y si se accede desde otra ip se requiere de un usuario que este en el ldap. No es la única manera, ya que podemos decir que deje acceso a los usuarios ldap de un grupo determinado, un usuario específico y muchas cosas mas.

Os recuerdo que estos y mas datos actualizados los podréis encontrar en mi wiki.

Tuve algunos problemas que os pongo a continuación con sus respectivas soluciones:

  • El fichero de .htaccess no tiene efecto, pongas lo que pongas el apache lo ignora.

Solución: Por seguridad puede ser que el apache no permita hacerle nada al fichero .htaccess. Tendremos que editar la configuración del apache y decirle, por ejemplo, que a la carpeta que queramos (en nuestro caso /var/www/html/carpeta) permita al .htaccess hacer cosas (None (por defecto), Limit o All), en nuestro caso le daremos todos los permisos.

    • Cuando nos pide el usuario y contraseña del ldap y se la ponemos no nos deja entrar. En el fichero /var/log/httpd/error_log nos encontramos la siguiente línea:
    [Thu Nov 20 13:33:40 2008] [error] [client 215.154.142.25] access to /index.php failed, reason: verification of user id 'usuario' not configured

    Solución: Falta de añadir la siguiente línea al fichero .htaccess:

    AuthBasicProvider ldap
    • Nos encontramos el siguiente mensaje de error en los logs:
      [Thu Nov 20 13:38:51 2008] [warn] [client 155.210.155.148] [3243] auth_ldap authenticate: user prodrig authentication failed; URI /mediawiki/index.php/Portada [LDAP: ldap_simple_bind_s() failed][Can't contact LDAP server]

      Solución: Puede que el ldap este parado. Para encenderlo:

      >> /etc/init.d/ldap start

      Cambiar el idioma de la pantalla de login de Windows 2003

      Pantalla de login de WIndows 2003 en ingles

      No se si alguna vez os habrá pasado que cuando instalais un windows server 2003 en ingles, aunque cambies luego el idioma a español, la pantalla de login sigue estando en ingles. Nunca le había dado importancia a esto pero hoy me he encontrado con un gran problema por su cumpa.

      Cuando estas logueado y cambias una contraseña que contenga caracteres raros (por ejemplo: / = ? ...), estos se ponen bien, pero cuando vas a loguearte con esa contraseña (como el teclado en ese momento esta en el idioma ingles y no ves lo que escribes porque se pone con *) no te deja entrar y hasta que te das cuenta puedes perder mucho tiempo.

      Pero esto no es inmodificable. Para cambiar el idioma de la pantalla de login del Windows 2003 al español tenemos que ir al editor del registro de windows (regedit.exe) e ir a la entrada HKEY_USERS\.DEFAULT\Keyboard Layout\Preload. Una vez ahí tenemos que cambiar el valor de la variable nombre del valor 1 (que es el que está) al valor 0000040a. Reiniciamos el sistema y ya nos saldrá la pantalla en español.

      temas: 

      Instalar Bugzilla

      La hormiga del bugzilla

      Estos días he tenido que instalar un bugzilla en un servidor, aunque ha costado (problemas al usar un mysql remoto y usar un Centos). Aquí os explico lo que tenéis que hacer si queréis instalar un bugzilla. Como siempre en mi wiki tendréis la última versión de como hacer esto y además tenéis los problemas que me encontré al instalarlo y como los solucioné.

      Lo primero de todo es bajarlo y lo descomprimirlo en una carpeta de nombre bugzilla dentro de la carpeta raiz de los documentos del apache (en nuestro caso /var/www/html):

      >> cd /var/www/html
      >> wget http://ftp.mozilla.org/pub/mozilla.org/webtools/bugzilla-3.0.6.tar.gz
      >> gzip -d bugzilla-3.0.6.tar.gz
      >> tar -xvf bugzilla-3.0.6.tar
      >> mv bugzilla-3.0.6 bugzilla

      Con el siguiente comando comprobamos si tenemos todo lo necesario instalado:

      >> ./checksetup.pl --check-modules
      * NOTE: You must run any commands listed below as root.
      ***********************************************************************
      * REQUIRED MODULES                                                                                      *
      ***********************************************************************
      * Bugzilla requires you to install some Perl modules which are either              *
      * missing from your system, or the version on your system is too old.            *
      *                                                                                                                         *
      * The latest versions of each module can be installed by running the              *
      * commands below.                                                                                           *
      ***********************************************************************
      COMMANDS:
      /usr/bin/perl -MCPAN -e 'install "Email::Send"'
      /usr/bin/perl -MCPAN -e 'install "Email::MIME"'
      /usr/bin/perl -MCPAN -e 'install "Template"'
      /usr/bin/perl -MCPAN -e 'install "Email::MIME::Modifier"'
      /usr/bin/perl -MCPAN -e 'install "Date::Format"' 
      ***********************************************************************
      * DATABASE ACCESS                                                                                        *
      ***********************************************************************
      * In order to access your database, Bugzilla requires that the                          *
      * correct "DBD" module be installed for the database that you are                  *
      * running.                                                                                                           *
      *                                                                                                                         *
      * Pick and run the correct command below for the database that you             *
      * plan to use with Bugzilla.                                                                                 *
      ***********************************************************************
      COMMANDS:
      PostgreSQL: /usr/bin/perl -MCPAN -e 'install "DBD::Pg"'
      Minimum version required: 1.45
      MySQL: /usr/bin/perl -MCPAN -e 'install "DBD::mysql"' 
      Minimum version required: 2.9003

      Ahora instalamos lo que nos ha indicado el script que hemos ejecutado:

      >> /usr/bin/perl -MCPAN -e 'install "Email::Send"'
      >> /usr/bin/perl -MCPAN -e 'install "Email::MIME"'
      >> /usr/bin/perl -MCPAN -e 'install "Template"'
      >> /usr/bin/perl -MCPAN -e 'install "Email::MIME::Modifier"'
      >> /usr/bin/perl -MCPAN -e 'install "Date::Format"'
      >> /usr/bin/perl -MCPAN -e 'install "DBD::mysql"'

      Creamos un fichero de nombre localconfig y escribimos lo siguiente (cambiando la negrita por tus datos):

      $create_htaccess = 1;
      $webservergroup = 'apache';
      $db_driver = 'mysql';
      $db_host = 'HOST_DE_TU_SERVIDOR';
      $db_name = 'NOMBRE_BASE_DATOS';
      $db_user = 'USUARIO_BASE_DATOS';
      $db_pass = 'CLAVE_USUARIO_BASE_DATOS';
      $db_port = 3306;
      $db_sock = ;
      $db_check = 1;
      $index_html = 0;
      $cvsbin = ;
      $interdiffbin = ;
      $diffpath = '/usr/bin';

      Ahora instalamos bugzilla con el siguiente comando (Puede que nos de algún error si no se ha instalado bien alguna dependencia) y rellenamos los datos para crear la cuenta de administrador del bugzilla:

      >> ./checksetup.pl
      ...
      Enter the e-mail address of the administrator: EMAIL_CUENTA_ADMINISTRADOR
      Enter the real name of the administrator: NOMBRE_ADMINISTRADOR
      Enter a password for the administrator account: CONTRASEÑA_ADMINISTRADOR
      Please retype the password to verify: CONTRASEÑA_ADMINISTRADOR
      ...

      Ahora vamos al fichero de configuración del apache (en nuestro caso en /etc/httpd/conf/httpd.conf) y añadimos las siguientes líneas al final al final del todo:

      <Directory "/var/www/html/bugzilla">
          Options +ExecCGI
          AllowOverride Limit
          DirectoryIndex index.cgi
          AddHandler cgi-script .cgi
      </Directory>

      Ahora para que tenga efecto esta modificación reiniciamos el apache:

      >> sudo /etc/init.d/httpd restart

      Y ya lo tenemos instalado. Para acceder a él iremos a la url http://TU_SERVIDOR/bugzilla/ y usaremos la cuenta con los datos que le indicamos con el comando checksetup.pl.

      Poner en español las páginas del man de linux

      Man de linux en español

      Hoy en dia, seguro que casi todos los que hemos usado linux alguna vez habremos usado el comando man de linux, que nos explica que hace y como funcionan otros comandos de linux. Aunque te instales ubuntu en español, las páginas del man salen en ingles. Pero hoy me he enterado que estan en español (no se porque no las pondran por defecto en el idioma en que instalas el ubuntu) y te las puedes instalar con el siguiente comando:

      >> sudo apt-get install manpages-es manpages-es-extra

      Espero que os sirva a alguno.

      temas: 

      Gestionar grupos en mediawiki

      Grupos en mediawiki

      Mediawiki será muy bueno para controlar cambios, pero lo que es gestionar es de lo peor que he visto. Aunque por defecto tiene soporte a grupos, no es nada facil usar esta característica. Para Gestionar los grupos, vamos a usar una extensión llamada GroupPermissionsManager.

      Para instalarla nos bajamos los ficheros de la extensión y los ponemos en la carpeta de las extensiones:

      >> cd CARPETA_RAIZ_MEDIAWIKI
      >> cd extensions
      >> svn co http://svn.wikimedia.org/svnroot/mediawiki/trunk/extensions/GroupPermissionsManager

      Activamos la extensión editando el fichero LocalSettings.php de nuestra mediawiki y añadimos la siguiente línea:

      require_once("$IP/extensions/GroupPermissionsManager/GroupPermissionsManager.php");

      Ahora tendremos que ir a la carpeta de la extensión y crear una carpeta de nombre config que pueda ser escrita por el usuario del apache (en mi caso es www-data):

      >> cd CARPETA_RAIZ_MEDIAWIKI
      >> cd extensions/GroupPermissionsManager
      >> mkdir config
      >> chown www-data:www-data config

      Una vez instalado vamos a ver como usarlo. No encontré una forma sencilla de crear grupos, la única forma que encontré fue añadirle algún permiso a mano a un grupo que no existiera. Por ejemplo: para crear un grupo de nombre NOMBRE_GRUPO, tendremos que ir al fichero LocalSettings.php y añadir la siguiente línea (por ejemplo dándole permiso de lectura de las páginas):

      $wgGroupPermissions['NOMBRE_GRUPO']['read'] = true;

      Con esto ya nos aparecerá el grupo en la página de gestión de los permisos de los grupos: http://URL_DE_TU_WIKI/index.php/Especial:GroupPermissions. Ahi podremos buscar el nuevo grupo y darle los permisos que queramos.

      Para añadir a un usuario a nuestro grupo, tendremos que ir a la página http://URL_DE_TU_WIKI/index.php/Especial:Userrights buscar el nombre del usuario a añadir y añadirle nuestro nuevo grupo.

      Por último recordaros que como siempre la forma de hacer esto estara actualizada siempre en mi wiki.

      Security Enhanced Linux

      SELinux

      Nunca te vas a la cama sin saber una cosa más. Hoy me encontraba en el trabajo con un problema en el apache en un Centos 5. Cuando cambiaba el DocumentRoot a otro diferente del por defecto me sacaba el siguiente error en el log:

      Permission denied: access to /index.html denied

      Me he vuelto loco con los permisos, le daba todos permisos posibles y el apache me seguía dando el mismo error. Cuando mi lógica ha dejado de funcionar me he puesto a buscar por internet y ahi me he encontrado que el problema era por culpa del SELinux.

      ¿Que es SELinux?

      Security-Enhanced Linux (o SELinux) es una arquitectura de seguridad integrada en el kernel 2.6.x usando los módulos de seguridad linux (o linux security modules, LSM). Este es un proyecto de la Agencia de Seguridad Nacional (NSA) de los Estados Unidos y de la comunidad SELinux. La integración de SELinux en Red Hat Enterprise Linux fue un esfuerzo conjunto entre al NSA y Red Hat.

      Todo apunta que es esto, otro sistema de seguridad que es el que niega el acceso del apache al nuevo DocumentRoot. Entonces me pongo a buscar como darle acceso.

      Por ejemplo: Si queremos darle permisos al apache para que pueda acceder a una carpeta TU_CARPETA, primero veremos que no tiene los permisos para que pueda ser accedida por el apache con la siguiente orden:

        >> ls -Z TU_CARPETA
        drwxr-xr-x  root root system_u:object_r:home_root_t  TU_CARPETA

        Como no los tiene (no le sale httpd_sys_content_t) entonces le daremos los permisos con la siguiente orden:

        >> chcon -R -h -t httpd_sys_content_t TU_CARPETA

        Por último comprobaremos que ya tiene los permisos:

        >> ls -Z TU_CARPETA
        drwxrwxrwx  root root root:object_r:httpd_sys_content_t TU_CARPETA

        En teoría esto tendría que haber funcionado pero me encontre con otro problema, esta carpeta era una carpeta montada por cifs y no me dejaba darle estos permisos. Por esto tube que pasar al plan B: Deshabilitar el SELinux.

        Para saber si lo tenemos activado tendremos que ejecutar la siguiente orden (si esta off, significa que no esta activado lo que lo deshabilita, lo que quiere decir que esta activado):

        >> getsebool -a | grep httpd
        ...
        httpd_disable_trans --> off
        ...

        Activamos la opción de deshabilitar y comprobamos que se ha activado:

        >> setsebool -P httpd_disable_trans 1
        >> getsebool -a | grep httpd
        ...
        httpd_disable_trans --> on
        ...

        Por último reiniciamos el apache para que tenga efecto:

        >> sudo /etc/init.d/httpd restart
        Parando httpd:                                             [  OK  ]
        Iniciando httpd:                                           [  OK  ]

        Entonces ha funcionado. Asi que si os encontráis con este problema ya sabéis como solucionarlo.

        temas: 

        Conceptronic Loungen LooK flexcam

        Conceptronic Loungen LooK flexcam

        Mi prima nos regaló una webcam que no utilizaba, en concreto el modelo Conceptronic Lounge'n LooK flexcam. Instalarla en Ubuntu no ha sido tarea fácil, asi que aquí os pongo como podeis hacerlo vosotros. (Ojo!! la he instalado en un kernel 2.6.27-6-generic, no se si funcionara en los demás).

        Vamos ha instalar los drivers Microdia. Para ello nos bajaremos los fuentes y los compilaremos (Necesitaremos instalar unas dependencias para poder compilarlo: kernel-package linux-headers-`uname -r` build-essential). Las fuentes están en un repositorio Git (un tipo diferente de cvs o subversión) y necesitaremos instalar el cliente de git (git-core) para bajarlo. Tendremos que ejecutar las siguientes ordenes:

        >> sudo apt-get install git-core
        >> git clone http://repo.or.cz/r/microdia.git
        >> sudo apt-get install kernel-package linux-headers-`uname -r` build-essential
        >> cd microdia
        >> make
        >> sudo insmod ./microdia.ko

        Si todo ha funcionado bien tendremos que ver una salida parecida al ejecutar la siguiente orden:

        >> dmesg
        ...
        [ 4078.660030] microdia: Microdia USB 2.0 webcam driver loaded
        [ 4078.661417] microdia: Microdia USB 2.0 Webcam - 0C45:627B plugged-in.
        [ 4078.664689] microdia: Microdia USB 2.0 Webcam is now controlling video device /dev/video1
        [ 4078.665054] usbcore: registered new interface driver usb_microdia_driver
        [ 4078.665217] microdia: v2008.10 : Microdia USB 2.0 Webcam Driver

        Ahora probaremos la webcam, por ejemplo con mplayer. Tendréis que mirar que dispositivo es vuestra cámara (en mi caso tengo una tarjeta de televisión que es el /dev/video0 y mi webcam es el /dev/video1). Para ver que dispositivos tenéis ejecutar la siguiente orden:

        >> ls /dev/video*
        /dev/video0  /dev/video1

        Una vez sabemos que dispositivo es ejecutamos la siguiente orden (para mi caso la del /dev/video1):

        >> mplayer tv:// -tv driver=v4l2:width=640:height=480:fps=25:device=/dev/video1 -vo x11

        Si todo funciona bien lo instalamos:

        >> strip -g microdia.ko
        >> sudo cp microdia.ko /lib/modules/`uname -r`/kernel/drivers/media/video/usbvideo/
        >> sudo depmod -a

        Ya tenemos la webcam funcionando. Como siempre en mi wiki tendréis la forma correcta de instalarla si hay que hacerlo de otra forma.

        temas: 

        Actualizando a una Beta de ubuntu

        Ubuntu beta 8.10

        La versión de ubuntu Hardy Heron 8.04 no es que me gustara mucho. Pulse audio fue metido a medio hacer, el bluetooth me dejó de funcionar y varias cosas hacían que no me sintiera muy comodo con él.

        Hoy con la versión Intrepid Ibex 8.10 casi terminada (hoy faltan 26 días) y como para estas cosas soy un poco ansioso, ante mi situación y como falta menos de un mes, he decidido actualizarme a la beta de esta versión.

        Pero no sabía como hacerlo, así que he buscado por internet y he encontrado una manera de hacerlo. Abriremos una consola y ejecutamos la siguiente orden:

        >> update-manager -d

        Se abrirá la ventana de las actualizaciones y nos saldrá la posibilidad de actualizar a la nueva versión como si ya fuera final, solo hay que darle al botón y seguir las instrucciones.

        temas: 

        Montar automaticamente carpetas a petición

        Carpetas de nautilus

        Para hacer el automontado de carpetas samba usaremos el programa autofs. Para instalarlo ejecutaremos la siguiente orden:

        >> sudo aptitude install autofs

        Asegurarse de que se encuentran instalados los paquetes samba y smbfs

        >> sudo apt-get install samba smbfs

        Una vez instalado vamos a configurarlo. En autofs tienes que indicar una carpeta (por ejemplo /auto) en la que cuando se acceda a una subcarpeta de esta (por ejemplo /auto/compartido) buscará esta carpeta en el fichero de configuración y si no existe en el fichero dirá que no existe (aunque físicamente exista). Por esta razón es recomendable usar una carpeta solo para esto y no podremos usar /media aunque podremos hacer un apaño con unos enlaces.

        Primero iremos al fichero /etc/auto.master y añadiremos la siguiente línea (indicamos la carpeta que usara autofs para el fichero que modificaremos mas adelante):

        /auto /etc/auto.misc --timeout 3

        Vamos al fichero /etc/auto.misc y añadimos una línea por cada carpeta a la que le demos soporte. Por ejemplo, montamos la carpeta compartido del servidor 192.168.25.200:

        compartido -fstype=cifs,username=USUARIO,password=CLAVE,iocharset=utf8,uid=USUARIO_PC,gid=USUARIO_PC,file_mode=0777,dir_mode=0777  ://192.168.25.200/compartido

        Reiniciamos el programa para que coja la nueva configuración:

        >> sudo /etc/init.d/autofs restart

        Ya lo tenemos configurado y cuando accedamos a esta carpeta si aun no está montada se montará. Para ver que funciona ejecutaremos la siguiente orden y veremos que nos muestra los ficheros de la carpeta compartida:

        >> ls /auto/compartido

        Si queremos acceder a esta carpeta desde otra ruta (Por ejemplo /media) crearemos unos enlaces simbólicos:

        >> cd /media/ >> sudo ln -s /auto/compartido compartido

        Comprobaremos que el enlace funciona ejecutando la siguiente orden y comprobando que nos lista los ficheros de la carpeta compartida:

        >> ls /media/compartido

        Como siempre, podréis verlo actualizado siempre en mi wiki: Autofs.

        temas: 

        Sustituyendo Nautilus por PCMan

        PCMan

        Siempre que he usado GNOME me ha parecido que la rapidez no era lo suyo y no me explicaba porque no intentaban mejorarlo. Un día me puse a probar otro gestor de archivos en vez de nautilus (que es el gestor de archivos por defecto de gnome). Este nuevo gestor se llama PCMan y tengo que decir que me sorprendido muy gratamente. Es mucho más rápido que nautilus aunque no tiene todas las caracterÍsticas de nautilus (preview de sonido, video, samba, ...) solo le hecho en falta la posibilidad de acceder a carpetas compartidas. PCMan tiene soporte a preview de imagenes, pestañas, marcadores,

        Por lo tanto me voy a quedar con PCMan como mi navegador de archivos por defecto. Para que Gnome lo use por defecto (en vez de a nautilus) vamos a tener que hacer los siguientes cambios.

        Primero haremos las copias de seguridad de los ficheros que vamos a modificar:

        >> sudo cp /usr/share/applications/nautilus.desktop /usr/share/applications/nautilus.desktop.backup
        >> sudo cp /usr/share/applications/nautilus-folder-handler.desktop /usr/share/applications/nautilus-folder-handler.desktop.backup
        >> sudo cp /usr/share/gnome/default.session /usr/share/gnome/default.session.backup
        >> sudo cp /usr/bin/nautilus /usr/bin/nautilus.backup

        Una vez hechas las copias de seguridad tenemos que editar los archivos /usr/share/applications/nautilus-folder-handler.desktop y /usr/share/applications/nautilus.desktop y sustituir todas las apariciones de nautilus por pcmanfm quitando los parámetros que se le pase (porque PCMan no admite los parámetros de nautilus). Por ejemplo:

        Exec=nautilus --no-desktop --browser %U

        Quedaría así:

        Exec=pcmanfm

        Ahora iremos al fichero /usr/share/gnome/default.session y lo editaremos. Tenemos que eliminar las líneas que corresponden con la entrada de nautilus, luego renumerar los números para que queden consecutivos y por último cambiar el número de entradas que quedan al final.

        Por ejemplo, para el siguiente fichero:

        [Default]
        num_clients=4
        0,id=default0
        0,Priority=10
        0,RestartCommand=gnome-wm --sm-client-id default0
        1,id=default1
        1,Priority=40
        1,RestartCommand=gnome-panel --sm-client-id default1
        2,id=default2
        2,Priority=40
        2,RestartCommand=nautilus --no-default-window --sm-client-id default2
        3,id=default3
        3,Priority=60
        3,RestartCommand=gnome-cups-icon --sm-client-id default3

        Lo editaremos para que se quede de la siguiente manera:

        [Default]
        num_clients=3
        0,id=default0
        0,Priority=10
        0,RestartCommand=gnome-wm --sm-client-id default0
        1,id=default1
        1,Priority=40
        1,RestartCommand=gnome-panel --sm-client-id default1
        2,id=default3
        2,Priority=60
        2,RestartCommand=gnome-cups-icon --sm-client-id default3

        Por último cambiaremos el acceso directo de nautilus por el de PCMan:

        >> sudo rm /usr/bin/nautilus
        >> sudo ln -s /usr/bin/pcmanfm /usr/bin/nautilus

        Solo qeuda reiniciar las X. Y ya tenemos a PCMan como el navegador de archivos por defecto de Gnome.

        temas: