Siguiente: Seguridad en el servidor
Subir: Seguridad en el servidor
Anterior: Seguridad en el servidor
  Índice General
Para poder utilizar la aplicación de administración hay que introducir
un nombre se usuario y una clave previamente.
Se ha utilizado el proceso de autenticación de HTTP básico.
La autenticación HTTP básica es muy sencilla. Cuando un explorador Web solicita un URL que está protegido por una autenticación HTTP, el servidor Web le devuelve una cabecera de estado 401 y otra de respuesta para
la autenticación (véase figura 3.24). La cabecera contiene el sistema de autenticación
que se está utilizando y el nombre del dominio.
Figura 3.24:
Proceso de autenticación HTTP básico
|
A continuación el explorador Web muestra un cuadro de diálogo que le pide al usuario que introduzca
su nombre y contraseña. Cuando el usuario facilita esta información, el explorador
se la envía de vuelta al usuario junto con el URL solicitado. El servidor comprueba si los datos son válidos.
En caso, afirmativo, mostrará la página solicitada. En caso negativo, responde con un estado 401 y vuelve
a enviar la misma cabecera de autenticación.
En la siguiente llamada al servidor, el explorador se limitará a enviar la información
facilitada por el usuario, con lo que se evita que el servidor genere un
estado 401. Por ejemplo, si el URL https://localhost/cgi-bin/admin/ requiere
una autenticación HTTP básica, las siguientes llamadas a https://localhost/cgi-bin/admin/alta_usuario
y https://localhost/cgi-bin/admin/activacion requerirán el par nombre/contraseña.
Esta es la razón por la que el servidor envía el par antes de que se produzca ningún
intercambio de autenticación (es decir, el envío de la cabecera de estado 401 y la respuesta
de autenticación www) con el servidor. Este sistema es más rápido y práctico que generar una opción para cada petición
recibida y hacer que el usuario introduzca una y otra vez su nombre y contraseña.
Cuando el sistema del cliente envía la contraseña (el host en el que se
ejecuta el explorador Web), ni lo hace en texto plano ni la encripta. En vez de
eso utiliza la codificación uu y la transmite por la red. Este es el inconveniente
de este método de autenticación, porque cualquiera que tenga un sniffer puede hacerse con el
paquete IP que transporta la contraseña uu-codificada. La verdad es que este sistema de
codificación está muy extendido en la actualidad y cualquiera puede descodificar la contraseña y abusar de su uso.
Es cierto que el sniffer tiene que localizar el paquete correcto para poder proceder
a la descodificación, pero técnicamente es posible.
El módulo que se ha usado para proteger los scripts cgi de un usuario externo es
mod_auth. Este módulo se compila por defecto en la distribución estándar
de apache. Para confirmar la autenticación, utiliza los nombre de usuarios, los grupos
y las contraseñas almacenadas en archivos de texto. Este
sistema funciona muy bien cuando el número de usuarios con el que se trabaja es muy pequeño.
En nuestro caso la aplicación sólo la utilizará el administrador del sistema.
En nuestro caso vamos a crear un único usuario por lo que sólo necesitaremos
la directivas AuthUserFile.
La directiva AuthUserFile determina el nombre del archivo de texto en el que se guardan los nombres de los usuarios
y las contraseñas que se utilizan en el proceso de autenticación HTTP básico. Se ha
de suministrar un path completo.
La configuración de Apache que tenemos tiene las siguientes directivas:
ScriptAlias /cgi-bin/ /usr/local/nocat/cgi-bin/
AccessFileName .htaccess
AllowOverride All
Nosotros queremos restringir el acceso al directorio /usr/local/nocat/cgi-bin/admin.
Los pasos que se han seguido son:
- Crear un archivo para el usuario con htpasswd. Para esto se he utilizado un programa
llamado htpasswd que incluye la distribución estándar de Apache. El programa
crea el archivo del usuario que necesita la directriz AuthUserFile.
El comando utilizado es:
htpasswd -c /usr/local/nocat/usuarios/.htpasswd nocat
''nocat'' es el nombre de usuario que hemos introducido. Seguidamente
la utilidad htpasswd solicita la contraseña de ''nocat''.
Hay que destacar que:
- La opción -c es para crear un nuevo archivo.
- El archivo está colocado fuera del árbol de directorios de apache,
para que nadie pueda copiarlo desde la red.
- Se ha utilizado un punto delante del nombre para que no aparezca en la salida del sistema.
- Creación del archivo .htaccess. Hemos creado el archivo /usr/local/nocat/cgi-bin/admin/.htaccess
con los siguientes datos:
AuthName "Sistema de Administración"
AuthType Basic
AuthUserFile /usr/local/nocat/usuarios/.htpasswd
require user nocat
La primera directriz, AuthName, determina la extensión de la autenticación. No
es más que una etiqueta que se envía al explorador Web para que
tenga alguna pista sobre a qué se quiere acceder. En este caso,
''Sistema de administración''. La segunda directriz, AuthType, especifica el tipo
de autenticación utilizada. La siguiente directriz, AuthUserFile, especifica el nombre
del archivo del usuario.
- Configurar el archivo de permisos. Hay que cambiar el propietario de los
archivos .htaccess y .htpasswd para que sólo los pueda leer Apache.
- Cuando intentamos acceder a cualquier página dentro del directorio
/cgi-bin/admin nos aparece un cuadro de diálogo similar al de la figura 3.25.
Figura 3.25:
El explorador Web solicita el nombre y la contraseña
|
Siguiente: Seguridad en el servidor
Subir: Seguridad en el servidor
Anterior: Seguridad en el servidor
  Índice General
Jesús Martín
2003-09-16