4 Servicio HTTP Caso práctico b Autenticación HTTP básica en Apache2 Duración: 30 min. Dificultad: media Objetivos Configurar un directorio, servido por Apache2, con autenticación básica, es decir, mediante el uso de credenciales. Consideraciones 1. El servidor web Apache está instalado y configurado correctamente dentro del dominio servidor.aulaSER.com. 2. El administrador ha creado un directorio dentro de /var/www llamado directorio_privado, que se convierte en el objeto de la autenticación básica. 3. En el sistema existe tan solo el usuario alumno1, el único que podrá acceder al contenido de dicho directorio. 4. Se supone que la red, con equipos Windows XP y Ubuntu GNU/Linux del aula, funciona correctamente. Autenticación HTTP básica El módulo que controla este método de autenticación es mod_auth_basic. La operación se lleva a cabo mediante el método de codificación Base64 (no encriptación) que permite obtener la contraseña de cualquier usuario con Perl y haciendo uso de la función decode_base64. En el archivo /etc/apache2/sites-available/default o en el archivo relativo al host virtual correspondiente, habrá que añadir un bloque <Directory>...</Directory> por cada directorio que se quiera proteger: <Directory "/var/www/directorio_privado"> AuthType Basic AuthName "Directorio privado" AuthUserFile /etc/apache2/passwd/.htpasswd Require valid-user </Directory> Donde: Directory: indica que las directivas siguientes actúan sobre el directorio /var/www/privado y sus subdirectorios, de ahí que estén protegidos. AuthName: nombre del dominio de autenticación. Define el conjunto de recursos que estarán sujetos a los mismos requisitos. También es el texto que aparecerá en la ventana que solicita el nombre del usuario y la clave correspondiente e indica el nombre del dominio de autenticación (realm). El navegador web lo utiliza para determinar qué contraseña se envía para un dominio de autenticación dado. Servicios en red 1-4 4 Servicio HTTP AuthType: tipo de autenticación. Basic: la contraseña se negocia sin encriptar. Digest: la contraseña se negocia encriptada. • AuthUserFile: archivo de texto que contiene los nombres de usuario y las contraseñas usadas en la autenticación HTTP básica. Se suele llamar .htpasswd. Previamente hay que crear el directorio /etc/apache2/passwd. • AuthGroupFile: ubicación del archivo de texto que contendrá los nombres de los grupos y los usuarios asociados a ellos usados en la autenticación HTTP básica. Se suele llamar .htgroup. • AuthAuthoritative: toma los valores on (por defecto) y off. En el caso de que se utilicen varios métodos de autenticación en un mismo directorio y falle el primero, permite que se pase al segundo. • Require: se aplica a los usuarios que tienen acceso a los recursos especificados. Existen varias opciones disponibles: – valid-user: cualquier usuario incluido en el archivo de contraseñas .htpasswd. – user <lista de usuarios>: lista de usuarios de .htpasswd a los que se permite el acceso. Al especificar sus nombres, deben aparecer separados por un espacio. Si se incluye esta opción, habrá que incluir también la directiva AuthUserFile para indicar dónde se encuentra el archivo con la definición de los usuarios usados en la autenticación HTTP básica. – group <lista de grupos>: lista de los grupos a los que se permite el acceso. Al igual que en el caso anterior, los nombres deben aparecer separados por un espacio. En estos casos hay que incluir también la directiva AuthGroupFile para indicar dónde se encuentra el archivo en el que figura la definición de los grupos empleados en la autenticación HTTP básica. • Satisfy: al utilizar esta directiva, se determina si se deben cumplir todos los requisitos (all) o cualquiera (any). Tareas a realizar 1. Creación de un usuario Para empezar, se utilizará la orden htpasswd de la forma siguiente: $ sudo su # htpasswd -c /etc/apache2/passwd/.htpasswd nombre_usuario La opción -c permite crear el archivo .htpasswd con el primer usuario dado de alta, que no tiene por qué existir antes en el sistema. A la hora de conceder permisos al archivo .htpasswd, habrá que especificar la clave 644 (lectura y escritura para el dueño, y root y lectura para el grupo y los demás usuarios). En el caso de que se desee dar de alta a otros usuarios, no es preciso incluir en cada ocasión el argumento -c. 2. Creación de un grupo Para crear grupos primero hay que crear el archivo de texto /etc/apache2/passwd/.htgroup con el formato para cada línea: nombreGrupo: user1 user2 user3 … Servicios en red 2-4 4 Servicio HTTP La directiva AuthGroupFile indica la ruta completa donde se encuentra el archivo que hemos creado con la definición de los grupos. AuthGroupFile /etc/apache2/passwd/.htgroup Cada usuario del grupo lo añadiremos al archivo de contraseñas según el paso 1. También se puede indicar cualquier usuario, siempre que esté en el archivo de contraseñas, utilizando la directiva Require: Require valid-user 3. Creación del sitio directorio_privado restringido a alumno1 La operación consta de los pasos siguientes: Se crea directorio_privado con acceso restringido al usuario alumno1. # mkdir /var/www/directorio_privado A continuación, se copia una página web sencilla identificada con index.html. Se genera un directorio para almacenar las contraseñas en el caso de que no exista ninguno: # mkdir /etc/apache2/passwd Se da de alta al usuario alumno1 en el archivo de contraseñas: # htpasswd -c /etc/apache2/passwd/.htpasswd alumno1 New password:XXXXXX Re-type new password:XXXXXX Adding password for user alumno1 Por último, se comprueba que se ha dado de alta el usuario alumno1 en .htpasswd: # more /etc/apache2/passwd/.htpasswd alumno1:Uc2mbt97WwWCE 4. Establecer dos formas diferentes de autenticación • Para hacerlo de manera global, basta con utilizar el archivo de configuración /etc/apache2/sites-available/default, en el que debería añadirse un bloque <Directory>...</Directory> para el directorio que queremos proteger: Alias /privado /var/www/directorio_privado <Directory "/var/www/directorio_privado"> AuthType Basic AuthName "Directorio privado" AuthUserFile /etc/apache2/passwd/.htpasswd Require user alumno1 </Directory> No obstante, es preciso tener en cuenta que se debe forzar a Apache2 a que lea sus archivos de configuración con force-reload. A continuación, probamos la configuración desde el navegador (http://servidor.aulaSER.com/directorio_privado/) y visualizamos el contenido del archivo index.html creado en dicho directorio. Servicios en red 3-4 4 Servicio HTTP • Para realizar la autenticación utilizando los archivos .htaccess las directivas incluidas en el archivo se aplicarán solo al directorio que lo contiene así como a los respectivos subdirectorios. Los archivos .htaccess se leen cada vez que se solicitan páginas. No hay que reiniciar el servidor web para que se activen los cambios realizados. Creamos en /var/www/directorio_privado/ el archivo .htaccess con el contenido siguiente: # gedit /var/www/directorio_privado/.htaccess AuthType Basic AuthName "Directorio privado" AuthUserFile /etc/apache2/passwd/.htpasswd Require user alumno1 Ahora habría que comentar en /etc/apache2/sites-available/default el grupo de directivas que se encargan de la autenticación global así como incluir un grupo <Directory></Directory> con la directiva AllowOverride que habilita la utilización de archivos .htaccess con autenticación: Alias /privado /var/www/directorio_privado <Directory "/var/www/directorio_privado"> AllowOverride AuthConfig </Directory> Probamos la configuración desde el navegador mediante .htaccess. Por último, nos dirigimos a la URL http://servidor.aulaSER.com/directorio_privado/. Se abrirá una ventana que solicita la identificación del usuario. Servicios en red 4-4