Aspectos importantes a tener en cuenta en la seguridad de Apache. Autentificación y autorización de usuarios con Apache.
Cuando un servidor apache recibe una petición de una página web, antes de devolver el resultado, lleva a cabo varias acciones para verificar que la petición esta autorizada.
Las distintas acciones que lleva a cabo para verificar la validez de la aplicación, se pueden agrupar en tres tipos: Autentificación, Autorización y Control de Acceso.
La autentificación es el proceso por el cual se verifica la identidad de una persona. De una forma simple, este proceso se puede llevar a cabo mediante un nombre de usuario y una contraseña, pero se pueden llegar a utilizar otros métodos para validar la identidad de una persona, como mediante el uso de certificados, tarjetas etc
En apache la autentificación puede estar gestionada por distintos módulos, dependiendo de la forma de implementación. Si decide llevarla a cabo gestionando ficheros con listas de usuarios y contraseñas (encriptadas), deberá utilizar el módulo mod_auth. Sin embargo, si decide llevarla a cabo mediante base de datos, deberá utilizar los módulos mod_auth_dbm.
La autorización es el proceso por el cual se verifica que un usuario con una identidad conocida, tiene acceso al recurso solicitado. Para llevar a cabo esta acción, se suelen utilizar listas de permisos en las cuales se enumeran cada una de las acciones que puede realizar un usuario, o las que no puede hacer. Normalmente, para simplificar la gestión de estos ficheros, los usuarios se suelen unir en grupos proporcionando los permisos al grupo.
En apache la autorización a recursos es gestionada o bien mediante la directiva <directory> en el fichero principal de configuración, o bien mediante la configuración de la carpeta a través de ficheros .htaccess.
El control de acceso es el proceso por el cual se verifica que la máquina desde la que se ha hecho la petición, tiene acceso al recurso. Los controles de acceso se utilizan para limitar y controlar las máquinas que tienen acceso a un recurso independientemente del usuario que accede, ya que estos controles se llevan a cabo antes de que se realice el proceso de autentificación.
En apache, el control de acceso se puede llevar a cabo mediante las directivas <directory><files>y <location>, o a través del fichero de configuración .htaccess para controlar una carpeta especifica.
En todo caso y para poder llevar a cabo la configuración de las tres características aquí enumeradas, autentificación, autorización y control de acceso, es necesario tener la directiva AllowOverride con el valor AuthConfig, para así permitir el uso de las distintas directivas de autentificación.
Autentificación y autorización de usuarios en Apache. Mod_auth
Para configurar el servidor apache para que sea capaz de autentificar a los usuarios y verificar la autorización del mismo al recurso solicitado, es necesario realizar las siguientes acciones:
En los ficheros de usuarios de apache, en cada línea se especifica un usuario, escribiendo el nombre de usuario separado de dos puntos, seguido de la contraseña encriptada con MD5.
En los ficheros de grupos de apache, en cada línea se especifica un grupo escribiendo el nombre del grupo seguido de dos puntos, y a continuación separado por espacios, los nombres de los usuarios.
Es recomendable que tanto los ficheros de usuarios como los de grupos, se encuentren almacenados fuera de los directorios publicados, para que de esta forma nadie pueda descargarlos. Asimismo, solo el usuario root debería estar autorizado a escribir en él, mientras que solo el usuario que ejecuta el servicio web, debería estar autorizado para leerlo.
El fichero de grupos se puede crear manualmente, pero el fichero con los usuarios es recomendable crearlo mediante la utilidad htpasswd, que se encuentra en la carpeta con los binarios de apache.
Para crear un fichero de usuario se utilizará la siguiente sintaxis:
htpasswd -c ruta/passwords usuario
El flag -c se utiliza para crear un fichero nuevo, por lo que sólo se deberá poner la primera vez que se crea el fichero, sino lo borrará.
Los módulos que intervienen en la autentificación y autorización son los de core y mod_auth.
Las directivas de mod_auth necesarias para configurar la autenticación y autorización son las siguientes:
Las directivas de core necesarias para complementar la configuración del módulo son:
Las distintas acciones que lleva a cabo para verificar la validez de la aplicación, se pueden agrupar en tres tipos: Autentificación, Autorización y Control de Acceso.
La autentificación es el proceso por el cual se verifica la identidad de una persona. De una forma simple, este proceso se puede llevar a cabo mediante un nombre de usuario y una contraseña, pero se pueden llegar a utilizar otros métodos para validar la identidad de una persona, como mediante el uso de certificados, tarjetas etc
En apache la autentificación puede estar gestionada por distintos módulos, dependiendo de la forma de implementación. Si decide llevarla a cabo gestionando ficheros con listas de usuarios y contraseñas (encriptadas), deberá utilizar el módulo mod_auth. Sin embargo, si decide llevarla a cabo mediante base de datos, deberá utilizar los módulos mod_auth_dbm.
La autorización es el proceso por el cual se verifica que un usuario con una identidad conocida, tiene acceso al recurso solicitado. Para llevar a cabo esta acción, se suelen utilizar listas de permisos en las cuales se enumeran cada una de las acciones que puede realizar un usuario, o las que no puede hacer. Normalmente, para simplificar la gestión de estos ficheros, los usuarios se suelen unir en grupos proporcionando los permisos al grupo.
En apache la autorización a recursos es gestionada o bien mediante la directiva <directory> en el fichero principal de configuración, o bien mediante la configuración de la carpeta a través de ficheros .htaccess.
El control de acceso es el proceso por el cual se verifica que la máquina desde la que se ha hecho la petición, tiene acceso al recurso. Los controles de acceso se utilizan para limitar y controlar las máquinas que tienen acceso a un recurso independientemente del usuario que accede, ya que estos controles se llevan a cabo antes de que se realice el proceso de autentificación.
En apache, el control de acceso se puede llevar a cabo mediante las directivas <directory><files>y <location>, o a través del fichero de configuración .htaccess para controlar una carpeta especifica.
En todo caso y para poder llevar a cabo la configuración de las tres características aquí enumeradas, autentificación, autorización y control de acceso, es necesario tener la directiva AllowOverride con el valor AuthConfig, para así permitir el uso de las distintas directivas de autentificación.
Autentificación y autorización de usuarios en Apache. Mod_auth
Para configurar el servidor apache para que sea capaz de autentificar a los usuarios y verificar la autorización del mismo al recurso solicitado, es necesario realizar las siguientes acciones:
- Crear un fichero con usuarios
- Crear un fichero con grupos (si es necesario)
- Definir las directivas en el fichero de configuración o mediante un fichero .htaccess
En los ficheros de usuarios de apache, en cada línea se especifica un usuario, escribiendo el nombre de usuario separado de dos puntos, seguido de la contraseña encriptada con MD5.
En los ficheros de grupos de apache, en cada línea se especifica un grupo escribiendo el nombre del grupo seguido de dos puntos, y a continuación separado por espacios, los nombres de los usuarios.
Es recomendable que tanto los ficheros de usuarios como los de grupos, se encuentren almacenados fuera de los directorios publicados, para que de esta forma nadie pueda descargarlos. Asimismo, solo el usuario root debería estar autorizado a escribir en él, mientras que solo el usuario que ejecuta el servicio web, debería estar autorizado para leerlo.
El fichero de grupos se puede crear manualmente, pero el fichero con los usuarios es recomendable crearlo mediante la utilidad htpasswd, que se encuentra en la carpeta con los binarios de apache.
Para crear un fichero de usuario se utilizará la siguiente sintaxis:
htpasswd -c ruta/passwords usuario
El flag -c se utiliza para crear un fichero nuevo, por lo que sólo se deberá poner la primera vez que se crea el fichero, sino lo borrará.
Los módulos que intervienen en la autentificación y autorización son los de core y mod_auth.
Las directivas de mod_auth necesarias para configurar la autenticación y autorización son las siguientes:
- AuthUserFile: siver para especificar la ruta donde se almacenará el fichero de usuarios.
- AuthGroupFile: sirve para especificar la ruta donde se almacenará el fichero de grupos.
Las directivas de core necesarias para complementar la configuración del módulo son:
- AuthType: selecciona el tipo de autentificación de usuarios que se utilizará para autentificar a un usuario. Puede variar por directorio. Los valores posibles son Basic y Digest. Con Basic, la transferencia de las claves se hará sin cifrar, y con digest se harán cifradas.
- AuthName: especifica un nombre del dominio para el cual se solicita el acceso, este nombre figurará en la pantalla donde se pide la clave, y a su vez servirá para que el cliente identifique la contraseña que debe utilizar al enviar una petición a un área determinada.
- Require: selecciona los usuarios que pueden acceder a un área determinada, los usuarios se pueden determinar a través de nombres o grupos.
Carlos Luis Cuenca
Carlos es ingeniero informático por la UPM (Politécnico de Madrid), especializad...