# rm-rf.es | Administración de sistemas

Bitácora personal de un SysAdmin Gnu/Linux, Windows, BSD...

Lighttpd: proteger una carpeta o website con contraseña


LighttpdSi utilizamos Lighttpd y necesitamos una funcionalidad similar a la que nos ofrece el servidor web Apache para proteger con password un directorio o virtualhost (en este caso vía .htaccess o directamente en el virtualhost con AuthType, AuthUserFile…) debemos hacer uso del módulo mod_auth y sus directivas. Vamos a ver como configurarlo.

Lo primero que debemos hacer es ver si el módulo está cargado en la configuración, para ello abrimos el fichero de configuración y revisamos la sección server.modules, donde debería mod_auth, sino lo añadís:

/etc/lighttpd/lighttpd.conf
server.modules              = (
            "mod_access",
            "mod_accesslog",
            "mod_fastcgi",
            "mod_rewrite",
            "mod_auth",
            "mod_cgi"
)

Después tenemos que configurar las tres directivas disponibles para la autenticación, el tipo de autenticación, el fichero en el que se almacenarán los datos de usuarios y claves y el nivel de debug:

auth.backend               = "htpasswd"
auth.backend.htpasswd.userfile = "/home/miwebsite/.lighttpdpasswd"
auth.debug = 0

Mediante auth.backend podemos especificar el tipo de autenticación, puede ser en texto plano (plain) o mediante htpasswd o LDAP. Elegimos htpasswd para tener la clave encriptada. Luego el fichero donde se almacenan las claves lo especificamos también (auth.backend.htpasswd.userfile). Finalmente el debug para verificar el funcionamiento, con 0 queda desactivado, con 1 vuelca a los logs cuando la autenticación es correcta y con 2 vuelca todo (access.log y error.log).

Ahora creamos fuera de la carpeta pública del sitio web el fichero con los usuarios y sus claves encriptadas por htpasswd:

# vim /home/miwebsite/.lighttpdpasswd
foo:soAb7vp63UATv7uaA2
chown lighttpd /home/miwebsite/.lighttpdpasswd && chmod 0600 .lighttpdpassword

Finalmente sólo nos queda seleccionar que directorio o website queremos proteger. Para ello buscaremos la sección $HTTP["host"] que contenga la web/directorio a proteger:

En negrita lo relacionado con la autenticación:

$HTTP["host"]  =~ "test.com" {
  server.document-root = "/home/test-com/"
  accesslog.filename         = "/var/log/lighttpd/test-access.log"
 auth.require = ( "/carpeta-protegida/" =>
 (
  "method" => "basic",
  "realm" => "Password protected area",
  "require" => "user=foo"
 )
 )
}

Y ya podemos reiniciar lighttpd para activar los cambios. En este caso la carpeta test.com/carpeta-protegida/ quedará protegida y únicamente el usuario foo podrá acceder.

# /etc/init.d/lighttpd restart

Generar fichero htpasswd desde línea de comandos


Un “truco” para generar usuarios y passwords para la protección de carpetas directamente desde la shell:

htpasswd -cb .htpasswd <usuario> <contraseña>

En este ejemplo, nos generaría el fichero .htpasswd siguiente:

root@localhost:~# cat .htpasswd
usuario:ktRS/8rW/AFmY

Después simplemente hay que añadir al fichero .htaccess correspondiente la autenticación, ejemplo:

AuthType Basic
AuthName "Area de acceso restringido"
AuthUserFile /ruta/al/.htpasswd
Require valid-user

¡Gracias vaxter!