MONOGRÁFICO: Listas de control de acceso (ACL) |
![]() |
![]() |
![]() |
SOFTWARE - Servidores | |||||||||||||||||||||||||||||||||||||||
Escrito por Elvira Mifsud | |||||||||||||||||||||||||||||||||||||||
Domingo, 30 Setembro 2012 00:00 | |||||||||||||||||||||||||||||||||||||||
There are no translations available. Siguiendo con los temas de Seguridad Informática, abordamos ahora la utilización de las listas de control de acceso (ACLs) como mecanismo de seguridad lógica. Comenzamos definiendo el concepto de Seguridad lógica como conjunto de procedimientos utilizados para controlar el acceso lógico no autorizado al información, tanto si se intenta hacer estando almacenada dicha información como si está transmitiendo. La Seguridad Lógica consiste, entonces, en la aplicación de barreras y procedimientos que resguarden el acceso a los datos y sólo se permita acceder a ellos a las personas autorizadas para hacerlo. Resumiendo podemos decir que la Seguridad Lógica debe garantizar que 'todo lo que no está permitido debe estar prohibido'. Introducción¿Qué son las Listas de Control de Acceso o ACLs?Las ACL (Access Control Lists), como su nombre indica, son listas de condiciones que permiten designar permisos de acceso a cualquier elemento del sistema o directorio en general. En función de estas condiciones, se concede o deniega el acceso a la modificación de las propiedades de estos elementos a los diferentes usuarios o procesos del sistema. Es, por tanto, un mecanismo de seguridad del sistema.En el caso de referirnos, por ejemplo, al sistema de archivos, las ACL proporcionan un nivel adicional de seguridad a los archivos, ya que extiende el clásico esquema de permisos.En el caso de referirnos, por ejemplo, a routers las ACL establecen condiciones que se aplican al tráfico que viaja a través de la Sistemas de archivos con ACLsLas ACLs permiten asignar permisos a usuarios o grupos concretos. Por ejemplo, se pueden dar ciertos permisos a dos usuarios sobre unos archivos sin necesidad de incluirlos en el mismo grupo.
Los archivos y directorios tienen conjuntos de permisos configurados para el propietario del archivo, el grupo al que pertenece el dueño del archivo y los otros usuarios del sistema. Sin embargo, estos permisos tienen sus limitaciones. Por ejemplo, no se pueden configurar diferentes permisos para usuarios diferentes. Para solucionar este problema se crearon las Listas de Control de Acceso (Access Control Lists, ACLs). El concepto de ACL permite un control más preciso que los permisos del archivo por sí solos, al dar al propietario de un objeto la capacidad de conceder o denegar accesos usuario por usuario. Este mecanismo está disponible en la mayoría de Unix (Solaris, AIX, HP-UX, etc.), mientras que en otros que no lo proporcionan por defecto, como GNU/Linux, pero puede instalarse como un paquete adicional (acl). GNU/Linux soporta 2 tipos básicos de ACL:
Las ACLs se pueden configurar:
Requerimientos del sistemaEn general, para trabajar con ACL debemos comprobar que:
Respecto al primer punto y en el caso de Ubuntu, la utilización de ACL está activada en el Kernel. Respecto al segundo punto, cuando se va a trabajar con ACL en un sistema de archivos determinado (/home) en el archivo /etc/fstab hay que indicarlo de la forma siguiente: # cat /etc/fstab|grep home
/dev/sda2 /home ext4 defaults,acl 0
# cat /etc/fstab|grep home# Para no tener que hacer un reboot del sistema, simplemente podemos remontar la partición para que use acl ejecutando la orden siguiente: # mount -o remount -o acl /dev/sda2 /home# Ahora podemos ya utilizar ACLs en nuestro sistema. Respecto al tercer punto, instalamos el paquete acl (puede que esté instalado por defecto). # sudo apt-get install acl# En este paquete están las utilidades que nos permitirán establecer y manejar las ACLs: chacl, getfacl y setfacl. También se puede instalar el paquete acl desde el Centro de Software de Ubuntu. Utilización de ACLs en el sistema de archivosEn este punto vamos conocer la sintaxis y el funcionamiento de las ACLs en Ubuntu. También aprenderemos a utilizar herramientas de gestión asociadas a las ACLs siempre dentro del ámbito del sistema de archivos. También comprobaremos la ejecución y analizaremos la salida generada por las ACLs. SintaxisUna ACL se representa por tres campos separados por ":". [Tipo]:[Calificador]:ListaPermisos[,...] Tipo:
Calificador:
ListaPermisos: El tercer campo es el de acceso y puede ser representado de 2 maneras:
UtilidadesEl paquete acl contiene las órdenes:
Funcionamiento de las ACL1. Mostrar ACL:Nos situamos en el directorio ~/datos en el que tenemos permisos de escritura. Recordar que el carácter ~ equivale al directorio home del usuario. Por ejemplo, para el usuario admin sería equivalente a /home/admin/. La ACL para un directorio al que no se le ha asignado una ACL explícitamente, toma los permisos de umask: $ umask Recordar que el significado de 0022, como máscara general del sistema, es el siguiente:
En nuestro caso y para ver la ACL por defecto (sin asignar ninguna) del directorio (actual '.') utilizamos la orden siguiente: $ getfacl . Creamos en el directorio actual un par de ficheros 'archivo1' y 'archivo2' con la orden touch. $ ls -l arch* La acl por defecto para el fichero archivo1 es: $ getfacl archivo1 2. Establecer ACLImportante: Antes de ejecutar la orden comprobar los permisos existentes para comparar después de establecer la ACL. Hay tres maneras de establecer un ACL:
Ejemplos: En el directorio ~/datos y sobre el fichero 'archivo1' queremos dar permisos de lectura y escritura al usuario prueba que deberemos crear previamente. $ setfacl -m user:prueba:rw- ~/datos/archivo1 Ahora queremos que todos los archivos o directorios creados dentro de un directorio 'archivos' en ~/datos puedan ser leídos y modificados por el usuario prueba. La orden es la siguiente: $ setfacl -d -m u:prueba:rw- ~/datos/archivos/$ Es importante el orden en el que aparecen los argumentos. En concreto las opciones -d y -m deben aparecer en este orden. Y, en general, la opción -m debe estar siempre junto a [Tipo]:[Calificador]:ListaPermisos. Algunas opciones de setfacl son:
3. Ver las ACLLa orden getfacl obtiene la lista de control de acceso del archivo o directorio dado. Podemos consultar el estatus del fichero archivo1 después de asignar una nueva ACL de la forma: $ getfacl ~/datos/archivo1 Como podemos observar, prueba tiene permisos de lectura y escritura sobre el fichero archivo1. Algunas opciones de getfacl son:
4. Modificar las ACLLa orden chacl modifica una ACL existente. El formato es algo mas complicado. Por ejemplo, añadimos al usuario prueba como alguien que puede leer el fichero archivo2: $ chacl u::rw-,g::r--,o::---,u:prueba:r--,m::rw archivo2 La parte u::rw,g::r--,o::--- es la ACL existente y la parte u:prueba:r--,m::rw- especifica el nuevo usuario que quiero añadir a dicha acl y la máscara de derechos efectivos cuando se añada. Como se puede observar la sintaxis es diferente. La máscara de derechos efectivos es la unión de todos los permisos ya existentes de UGO (Usuario, Grupo, Otros) para un fichero o directorio. Se obtiene al añadir un usuario a la ACL. Para comprobar que han sido añadidos estos permisos a la ACL usaremos: $ getfacl archivo2 Es importante saber que los comandos cp y mv copian o mueven cualquier ACL asociada a ficheros y directorios. 5. ACL por defectoLas ACLs por defecto permiten indicar cuál es el juego de ACLs que queremos que se aplique automáticamente a los nuevos ficheros y directorios que se creen dentro de un directorio dado. Se dice en estos casos que los permisos se heredan desde el directorio padre. La sintaxis es idéntica a la de una ACL normal, pero se debe usar además la opción -d. Los permisos de una ACL por defecto de un directorio se transfieren a los archivos y subdirectorios de dicho directorio de dos formas:
Si el directorio padre no dispone de una ACL por defecto, los bits de permiso definidos en umask se restan de los permisos al pasar por parámetro mode, y el resultado se asigna al nuevo objeto. Si existe una ACL por defecto para el directorio padre, los bits de permiso asignados al nuevo objeto se corresponden con la porción coincidente de los permisos del parámetro mode y con aquellos que se definen en la ACL por defecto. El comando umask se descarta en este caso. Ejemplo: Creamos un directorio llamado 'midirectorio' y comprobamos que tiene estas características: # file: midirectorio Y sobre midirectorio ejecutamos la orden siguiente: $setfacl -m user:prueba:rwx,group:mascotas:rwx midirectorio Añadir una ACL por defecto al directorio 'midirectorio' con: $setfacl -d -m group:mascotas:r-x midirectorio La opción -d del comando setfacl hace las siguientes modificaciones (opción -m) en la ACL por defecto. El resultado es el siguiente: $getfacl midirectorio El comando getfacl muestra tanto la ACL de acceso como la ACL por defecto. La ACL por defecto se compone de todas las líneas que comienzan por default. Aunque se ejecutó solamente el comando setfacl con una entrada para el grupo mascotas para obtener la ACL por defecto, el comando setfacl ha copiado automáticamente las entradas restantes de la ACL de acceso para crear una ACL por defecto válida. Las ACL por defecto únicamente intervienen cuando se crean nuevos elementos, que solamente heredan permisos de la ACL por defecto de su directorio padre. La entrada mask define los permisos de acceso máximos que tienen validez para todas las entradas de la clase group. Si ahora se crea un subdirectorio 'misubdir' éste heredará la ACL por defecto. mkdir midirectorio/misubdir 6. ACL extendidaUna ACL extendida (extended) contiene además una entrada mask (máscara) y puede incluir varias entradas del tipo named user (usuario identificado por el nombre) y named group (grupo identificado por el nombre).
Los permisos definidos en las entradas dueño y otros siempre tienen vigencia. Excepto la entrada mascara, el resto de entradas (nombre usuario, grupo del dueño y nombre grupo) pueden estar activadas o bien enmascaradas. Si se han definido permisos tanto en las entradas mencionadas en primer lugar como en la máscara, tendrán validez. Los permisos que sólo han sido definidos en la máscara o en la propia entrada, no tienen validez. Si en la primera columna de la salida de la orden ls -l aparece un signo + hace referencia a una ACL extendida. $ ls -dl dir1 Ejemplos
$ getfacl fich1 | setfacl --set-file=- fich2 La orden obtiene los permisos del fichero 'fich1' y los asigna (utilizando la redirección de entrada '|') al archivo 'fich2'. Estamos utilizando el argumento – set-file con el '-' que indica que se está tomando como permisos los que le llegan por la redirección '|'. En resumen, después de la ejecución de la orden fich1 y fich2 tendrán los mismos permisos, incluidas ACLs establecidas en fich1.
$setfacl -k ~/dir1
$setfacl -b ~/dir1
$setfacl -R -b ~/dir1
$ setfacl -R -d -m group:grupo1:rwx "./dir/" La orden actúa sobre el directorio 'dir' que es un subdirectorio del directorio actual. Establece como ACL para usuarios del grupo 'grupo1' sobre 'dir' todos los permisos (rwx), lo hace de forma recursiva (-R) sobre toda la estructura que cuelgue de 'dir' y establece esta ACL por defecto (-d).
Primero comprobamos los permisos de 'dir': $ getfacl dir/ Ejecutamos ahora la orden que guarda las ACL: $ getfacl -R dir > dir/dir.acl Ahora podríamos asignar estas ACL a cualquier otro directorio que quisiéramos. Utilización de ACLs en routersDefiniciónEn el ámbito de los dispositivos routers, las ACLs son listas de condiciones que se aplican al tráfico que viaja a través de la interfaz del router. Las ACL indican al router qué tipo de paquetes aceptar o rechazar en base a las condiciones establecidas en ellas y que permiten la administración del tráfico y aseguran el acceso, bajo esas condiciones, hacia y desde una red. La aceptación y rechazo se pueden basar en la dirección origen, dirección destino, protocolo de capa superior y números de puerto. Por lo tanto, una ACL es un grupo de sentencias que define cómo se procesan los paquetes que:
En principio si las ACL no están configuradas en el router, todos los paquetes que pasen a través del router tendrán acceso a todas las partes de la red. Es posible crear ACL en protocolos de red enrutados, como el Protocolo de Internet (IP) y el Intercambio de paquetes de internetwork (IPX), entre otros. Se debe definir una ACL para cada protocolo enrutado habilitado en la interfaz. Además, se necesita crear una ACL por separado para cada dirección, una para el tráfico entrante y otra para el saliente. Como hemos comentado, las ACL se definen según el protocolo, la dirección o el puerto. Por ejemplo, si el router tiene dos interfaces configuradas para IP, IPX y AppleTalk, se necesitan 12 ACLs separadas. Una ACL por cada protocolo, multiplicada por dos por dirección entrante y saliente, multiplicada por dos por el número de interfaces. Se puede configurar una ACL por protocolo, por dirección y por interfaz.
Las ACL no actúan sobre paquetes que se originan en el mismo router. Las ACL se configuran para ser aplicadas al tráfico entrante o saliente.
Objetivos de las ACLEn resumen, los objetivos que se persiguen con la creación de ACL son:
Funcionamiento de las ACLPara explicar el funcionamiento utilizaremos el software Cisco IOS. El orden de las sentencias ACL es importante .
Por lo tanto, Cisco IOS verifica si los paquetes cumplen cada sentencia de condición de arriba hacia abajo, en orden. Cuando se encuentra una coincidencia, se ejecuta la acción de aceptar o rechazar y ya no se continua comprobando otras ACL. Por ejemplo, si una ACL permite todo el tráfico y está ubicada en la parte superior de la lista, ya no se verifica ninguna sentencia que esté por debajo. Si no hay coincidencia con ninguna de las ACL existentes en el extremo de la lista se coloca por defecto una sentencia implícita deny any (denegar cualquiera). Y, aunque la línea deny any no sea visible sí que está ahí y no permitirá que ningún paquete que no coincida con alguna de las ACL anteriores sea aceptado. Se puede añadir de forma explícita por aquello de 'verla' escrita y tener esa tranquilidad. Veamos el proceso completo:
Creación de ACLUtilizamos la herramienta de simulación Packet Tracer y una topología de red muy sencilla, formada por un router, dos switch y 2PCs, cada uno de ellos en una subred. Trabajaremos desde el modo de configuración global: (config)# Hay dos tipos de ACL y utilizan una numeración para identificarse:
ACLs estándar: sintaxisLas ACL estándar en un router Cisco siempre se crean primero y luego se asignan a una interfaz. Tienen la configuración siguiente: Router(config)# access-list numACL permit|deny origen [wild-mask] El comando de configuración global access-list define una ACL estándar con un número entre 1 y 99. Se aplican a los interfaces con: Router (config-if)# ip access-group numACL in|out
Para la creación de ACL estándar en importante:
Ejemplo 1 Supongamos que queremos crear en un Router0 una ACL con el número 1 (numACL) que deniegue el host 192.168.1.2. Desde configuración global: Router0(config)# access-list 1 deny 192.168.1.2 0.0.0.0 Si queremos eliminar una ACL: Router0(config)# no access-list Para mostrar las ACL: Router0# show access-list Recordar que para salir del modo de configuración global (config) hay que escribir 'exit'. Ahora hay que utilizar el comando de configuración de interfaz para seleccionar una interfaz a la que aplicarle la ACL: Router0(config)# interface FastEthernet 0/0 Por último utilizamos el comando de configuración de interfaz ip access-group para activar la ACL actual en la interfaz como filtro de salida: Router0(config-if)# ip access-group 1 out Ejemplo 2 Tenemos la siguiente topología de red. Vamos a definir una ACL estándar que permita el trafico de salida de la red 192.168.1.0/24. La primera cuestión que se plantea es ¿dónde instalar la ACL? ¿en qué router? ¿en qué interfaz de ese router?. En este caso no habría problema porque solo tenemos un router, el Router0. Pero la regla siempre es instalar la ACL lo más cerca posible del destino. Router0#configure terminal Ahora borramos la ACL anterior y vamos a definir una ACL estándar que deniegue un host concreto. Router0(config)#no access-list 1 ACLs extendidasLas ACL extendidas filtran paquetes IP según:
Las ACLs extendidas usan un número dentro del intervalo del 100 al 199.
Al final de la sentencia de la ACL extendida se puede especificar, opcionalmente, el número de puerto de protocolo TCP o UDP para el que se aplica la sentencia:
Router(config)# access-list numACL {permit|deny} protocolo fuente
Asociar ACL a interfaz, sintaxis: Router(config-if)# ip access-group num_ACL {in | out} Ejemplo 1 En el esquema anterior, denegar FTP entre las subredes y permitir todo lo demás. Router0(config)# access-list 101 deny tcp 192.168.2.0 0.0.0.255 192.168.1.0 0.0.0.255 eq 21 Ejemplo 2 En el esquema anterior, denegar solo telnet a la subred 192.168.1.0. Router0(config)# access-list 101 deny tcp 192.168.1.0 0.0.0.255 any eq 23 Ubicación de las ACLsEs muy importante el lugar donde se ubique una ACL ya que influye en la reducción del tráfico innecesario. El tráfico que será denegado en un destino remoto no debe usar los recursos de la red en el camino hacia ese destino. La regla es colocar las:
ConclusiónHemos visto dos formas diferentes de definir y utilizar las ACL. Como mecanismo para extender/reducir los privilegios de archivos y directorios en un sistema de archivos y como mecanismo de control del trafico entrante y saliente en dispositivos router. Pero en ambos casos el objetivo es la separación de privilegios y así establecer los permisos adecuados en cada caso particular. Pero existe otro ámbito de utilización de las listas de control de acceso también muy interesante, que es en los servidores proxys. Servidores proxy como Squid, entre otros, disponen de esta herramienta que permite determinar qué equipos accederán a Internet a través del proxy y cuáles no. En cualquiera de estos casos de aplicación de las listas de control de acceso comprobamos el gran papel que desempeñan como media de seguridad lógica, ya que su cometido siempre es controlar el acceso a los recursos o activos del sistema. |