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