BackupPC: usuarios y administración

El interfaz web de este programa permite acceso a todo. Pero todo, todo. Tanto que al no estar cifradas las copias es posible leer cualquier archivo de cualquier máquina en cualquier tiempo en el que fue salvado.

Así que una de las primeras cosas que hay que hacer es proteger ese interfaz tan útil y tan accesible. Desgraciadamente no hay muchas opciones internas porque se basa y emplea mecanismos externos de toda la vida como la autentificación de scripts CGI. Si externamente se establece la variable CGI REMOTE_USER el programa la emplea para limitar o denegar el acceso.

Esto nos deja con libertad para usar cualquier mecanismo que el servidor web -Apache en mi caso- emplee para definir esa variable pero por otra parte se añade la molestia de no tener un control de sesiones. Establecer el usuario está chupado. Lo difícil es quitarlo porque la autentificación HTTP, que es de lo que estoy hablando, no trabaja con persistencia alguna, ni cookies ni sesiones, y el servidor no tiene la posibilidad de pedir al navegador que reenvíe credenciales. Este, una vez visto que el URL las solicita las sigue enviando continuamente.

Si Apache emplea el tipo de autentificación Digest, que no es el caso, existe una directiva llamada AuthDigestNonceLifetimeque limita su tiempo de vida y envía una respuesta HTTP 401 una vez expira el plazo. Con el tipo de autentificación Basic esto no es posible porque no está diseñada así.

Hay que jugar con otros factores como el navegador o algún tipo de truco en el lado del servidor empleando quizás un proxy intermedio que sí que lleve algún tipo de sesión. Se me ocurren varias cosas pero tendré que conformarme con lo que hay.

En este caso y volviendo a BackupPC me conviene recordar dos cosas: el interfaz web es sólo un interfaz al verdadero programa de copias y es mejor limitar lo posible los usuarios que tienen acceso administrativo empleando la configuración del programa:

$Conf{CgiAdminUsers}     = 'admin';

Teniendo muy en cuenta que el nombre es irrelevante y que no tiene ni que existir en el sistema ni en el entorno del programa. Es sólo el valor que debe aparecer en la variable REMOTE_USER anteriormente mencionada.

Referencias