Capítulo 3. Creación de perfiles de Novell AppArmor

Tabla de contenidos

3.1. Componentes y sintaxis de los perfiles
3.2. Creación y gestión de perfiles de Novell AppArmor
3.3. Creación de perfiles de Novell AppArmor con la interfaz gráfica de usuario de YaST
3.4. Creación de perfiles de Novell AppArmor mediante la interfaz de línea de comandos
3.5. Dos métodos de creación de perfiles
3.6. Nombres de vías y englobamiento
3.7. Modos de permiso de acceso a archivos

En este capítulo se explica cómo crear y gestionar perfiles de Novell® AppArmor. Estará listo para crear perfiles de Novell AppArmor en cuanto haya seleccionado los programas cuyos perfiles desee crear. Para obtener ayuda al respecto, consulte el Capítulo 2, Selección de programas que inmunizar (↑Guía de administración de Novell AppArmor 2.0).


3.1. Componentes y sintaxis de los perfiles

En esta sección se describe la sintaxis y la composición de los perfiles de Novell AppArmor. En la Sección 3.1.1, “División de un perfil de Novell AppArmor en las partes que lo componen” (↑Guía de administración de Novell AppArmor 2.0) encontrará un ejemplo que muestra esta sintaxis.

3.1.1. División de un perfil de Novell AppArmor en las partes que lo componen

Los componentes del perfil de Novell AppArmor se denominan "reglas de Novell AppArmor". Actualmente hay dos tipos principales de reglas de Novell AppArmor: las entradas de vía y las entradas de capacidad. Las entradas de vía especifican los elementos a los que puede acceder el proceso en el sistema de archivos; las de capacidad proporcionan un control más ajustado sobre las acciones que un proceso limitado puede llevar a cabo mediante otras llamadas del sistema que requieren privilegios. Las entradas include son un tipo de meta regla o directiva que incorporan entradas de vía y de capacidad procedentes de otros archivos.

El modo más sencillo de explicar en qué consiste un perfil y cómo crear uno es mostrar los detalles de un perfil de demostración. Por ejemplo, examine el siguiente perfil para el programa /sbin/klogd:

# perfil para limitar klogd1
/sbin/klogd 2
{3
#include <abstractions/base>4
  capability sys_admin,5
  /boot/* r6,
  /proc/kmsg r,
  /sbin/klogd r,
  /var/run/klogd.pid lw,
}
1

Un comentario que indica el nombre del programa limitado por este perfil. Los comentarios siempre deben estar precedidos por el signo #.

2

Vía completa al programa limitado.

3

Las llaves {} sirven como contenedor para incluir declaraciones de otros perfiles, así como entradas de vía y capacidad.

4

Esta directiva incorpora componentes de Novell AppArmor para simplificar los perfiles.

5

Las declaraciones de entradas de capacidad activan las 29 capacidades del borrador POSIX.1e.

6

Entrada de vía que especifica las partes del sistema de archivos a las que puede acceder el programa. La primera parte de una entrada de vía especifica la vía completa de un archivo (incluido el englobamiento de expresiones regulares) y la segunda parte indica los modos de acceso permitidos (r para lectura, w para escritura y x para ejecución). Un espacio en blanco de cualquier clase (espacio o tabulación) puede preceder a los nombres de vías o separarlos de los modos de acceso. El espacio en blanco entre el modo de acceso y la coma final es opcional.

Cuando se crea un perfil para un programa, el programa sólo puede acceder a los archivos, modos y capacidades POSIX especificadas en el perfil. Estas restricciones son adiciones a los controles de acceso nativos de Linux.

Ejemplo: .  Para conseguir la capacidad CAP_CHOWN, el programa debe disponer de acceso a CAP_CHOWN mediante los controles de acceso convencionales de Linux (normalmente, para ello debe ser un proceso propiedad del usuario Root) e incluir la capacidad chown en su perfil. Del mismo modo, para escribir en el archivo /foo/bar, el programa deberá tener el identificador de usuario y los bits de modo correctos configurados en los atributos del archivo (consulte las páginas Man de chmod y chown) e incluir /foo/bar w en su perfil.

Los intentos de vulnerar las reglas de Novell AppArmor quedan registrados en syslog. En muchos casos, las reglas de Novell AppArmor evitan que funcione un ataque porque impiden el acceso a los archivos necesarios y, en cualquier caso, las limitaciones de Novell AppArmor reducirían los daños que un atacante pudiera causar en el conjunto de archivos permitidos por Novell AppArmor.

3.1.2. #include

Las declaraciones #include son directivas que incorporan componentes de otros perfiles de Novell AppArmor para simplificar la estructura de los perfiles. Los archivos include recuperan los permisos de acceso de los programas. Utilizando una declaración include, puede proporcionar al programa acceso a las vías de directorios o archivos que también necesiten otros programas. Al utilizar este tipo de declaraciones, podrá reducir el tamaño de los perfiles.

Por defecto, la declaración #include añade al final /etc/apparmor.d/, que es la ubicación donde espera encontrar el archivo include, al principio del nombre de la vía. Al contrario que otras declaraciones de perfiles (pero de forma similar a los programas en C), las líneas #include no terminan con una coma.

Para que le resulte más sencillo crear los perfiles de sus aplicaciones, Novell AppArmor proporciona dos clases de declaraciones #include: las abstracciones y las porciones de programa.

3.1.2.1. Abstracciones

Las abstracciones son declaraciones #include agrupadas por tareas de aplicación comunes. Estas tareas incluyen el acceso a mecanismos de autenticación, el acceso a rutinas de servicios de nombres, requisitos gráficos comunes y contabilidad del sistema. Los archivos descritos en estas abstracciones son específicos de la tarea nombrada; los programas que requieren uno de estos archivos suelen requerir otros archivos incluidos en el archivo de abstracción (depende de la configuración local y de los requisitos concretos del programa). Las abstracciones se encuentran en /etc/apparmor.d/abstractions/.

3.1.2.2. Porciones de programa

Las porciones de programa son controles de acceso para programas específicos que un administrador del sistema podría necesitar controlar basándose en directivas del sitio local. Cada porción es utilizada por un único programa. Se proporcionan para facilitar las modificaciones de directivas del sitio local, así como las actualizaciones de las directivas proporcionadas por Novell AppArmor. Los administradores pueden modificar las directivas de estos archivos de modo que se ajusten a sus necesidades en lugar de modificar los perfiles de los programas, lo que simplifica la tarea de unir las actualizaciones de directivas de Novell AppArmor para aplicar las directivas en cada sitio.

Las restricciones de acceso de las porciones de programas suelen ser muy abiertas y están diseñadas para que los usuarios puedan acceder a sus archivos del modo menos intrusivo posible, manteniendo al mismo tiempo la protección de los recursos del sistema. La excepción a esta regla es la serie de porciones de programa postfix*. Estos perfiles se utilizan para facilitar la abstracción de la ubicación de los archivos binarios postfix. No es recomendable reducir los permisos de la serie postfix*. Las porciones de programa se encuentran en /etc/apparmor.d/program-chunks/.

3.1.3. Entradas de capacidad (POSIX.1e)

Las declaraciones de capacidad consisten sencillamente en la palabra "capability", seguida del nombre de una capacidad POSIX.1e tal y como están definidas en la página Man capabilities(7).