Configuración del daemon de política de acceso a archivos
Descubra cómo fapolicyd utiliza orígenes de confianza y reglas de política para controlar el acceso a los archivos.
El daemon de política de acceso a archivos, fapolicyd, es un servicio que se puede utilizar para ayudar a proteger un sistema al limitar qué aplicaciones tienen permiso para ejecutarse. El servicio puede ser utilizado para complementar otros servicios relacionados con la seguridad, incluyendo SELinux. A diferencia de SELinux, que no se preocupa por cómo los archivos y las aplicaciones se instalan en el sistema y si son de confianza, fapolicyd implementa decisiones de política basadas en si las aplicaciones son de confianza y cómo se instalaron en el sistema.
Fapolicyd utiliza la API del núcleo fanotify para supervisar los eventos del sistema de archivos. Cuando se accede a un archivo, fapolicyd decide si el evento puede continuar comprobando el archivo en una base de datos de confianza y evaluando un juego de reglas de política. Si el archivo no está en la base de datos de confianza y una regla de política deniega la acción, el evento se bloquea y se devuelve al usuario un error EACCESS 'Permission denied'.
Fapolicyd agrega automáticamente los archivos instalados por DNF a la base de datos de confianza, mediante un plugin DNF. Este enfoque ayuda a hacer que fapolicyd sea más eficiente al evaluar los archivos que se han instalado legítimamente en el sistema. Los archivos se pueden evaluar según su hash SHA-256 para que no se puedan modificar después de que se agreguen a la base de datos de confianza. Opcionalmente, puede agregar archivos a la base de datos de confianza para archivos que no estén instalados por DNF. Debe volver a cargar la base de datos después de agregar los archivos manualmente o cuando los archivos se instalan mediante el comando rpm fuera de la estructura DNF.
Fapolicyd utiliza una caché para ayudar a mejorar el rendimiento y reducir la cantidad de tiempo dedicado a procesar reglas y realizar búsquedas de bases de datos para eventos frecuentes.
Las reglas de Fapolicyd definen las opciones de registro que se pueden utilizar para auditar eventos. La política predeterminada utiliza el log de auditoría que se puede ver mediante el comando ausearch. Puede cambiar las reglas de política para iniciar sesión en el log del sistema, o bien en el log de auditoría y en el log del sistema para facilitar la depuración.
Para obtener más información sobre el Fapolicyd, consulte https://github.com/linux-application-whitelisting/fapolicyd.
Acerca de la base de datos de confianza
Fapolicyd utiliza una base de datos de confianza para buscar de forma eficaz los archivos de confianza del sistema. Si un archivo no está en la base de datos de confianza, fapolicyd vuelve a procesar las reglas de política para decidir si se permite o no un evento.
La base de datos de confianza se particiona en información que fapolicyd recopila sobre los paquetes de RPM instalados y la información agregada manualmente mediante archivos de configuración.
La base de datos de confianza se rellena automáticamente con información sobre los archivos que se instalan en el sistema mediante la copia de información de la base de datos RPM. Cuando se inicia fapolicyd o se ejecuta una actualización, la base de datos de confianza se actualiza para todos los archivos que aparecen en la base de datos RPM. La base de datos de confianza también se actualiza automáticamente cuando se instalan nuevos paquetes o los paquetes se actualizan mediante DNF. El seguimiento de los datos del paquete lo gestiona fapolicyd-dnf-plugin, que notifica al daemon fapolicyd sobre las actualizaciones o instalaciones de DNF.
Si instala paquetes directamente mediante el comando RPM, la base de datos de RPM fapolicyd no se actualiza y es posible que experimente la congelación del sistema. En este caso, puede ser útil refrescar la base de datos de confianza. Consulte Refrescamiento de la Base de Datos de Confianza para obtener más información.
Los administradores también pueden agregar archivos a la base de datos de confianza manualmente cuando los archivos se instalan o se agregan al sistema fuera de los mecanismos de empaquetado de RPM y DNF habituales, como la compilación de binarios desde el origen, o cuando se utiliza la utilidad pip de Python, la utilidad gem de Ruby, la utilidad npm de Node.js o las herramientas CPAN de Perl.
La base de datos de confianza distingue entre estos dos tipos de confianza: los archivos de confianza porque pertenecen a la base de datos RPM y los archivos de confianza porque se han agregado manualmente a la base de datos de confianza. Por ejemplo, las entradas que son de confianza de la base de datos de RPM son del tipo rpmdb:
rpmdb /usr/bin/dnf-3 2092 0a53d05260ba7ed4573...7ec64816e3ad49a2078c84836aeb7833e
Los archivos que se agregan manualmente a la base de datos de confianza son del tipo filedb, por ejemplo:
filedb /home/user/demo.bin 140468 e38cd120c925...46c9cd1aa83e44e697f0f3393d98b305
La base de datos también almacena la ruta al archivo, el tamaño del archivo en bytes y un hash SHA-256 para el archivo. El tamaño del archivo y el hash SHA-256 se pueden utilizar para realizar más comprobaciones de integridad en los archivos para hacer que el sistema sea mucho más restrictivo y robusto contra la actividad maliciosa. Aunque la activación de la comprobación de integridad puede proteger contra alguien que trabaja en torno a fapolicyd cambiando un archivo en una ubicación concreta, no recomendamos configurar fapolicyd para la comprobación de integridad porque aumenta el riesgo de interbloqueo del sistema. Las comprobaciones de integridad están desactivadas en fapolicyd por defecto. Consulte Comprobación de Discrepancia de Confianza y Enumeración de Entradas en la Base de Datos de Confianza para obtener más información.
Tenga en cuenta que el procesamiento de archivos de confianza en la base de datos de confianza se almacena en caché y es mucho más rápido que el procesamiento de reglas de políticas individuales. Por lo tanto, si necesita fapolicyd para confiar en aplicaciones o archivos concretos que están disponibles para el sistema fuera de DNF, es más eficaz agregarlos a la base de datos de archivos de confianza que definir reglas para ellos. Agregue solo reglas de política para archivos individuales si necesita reglas personalizadas en torno a los permisos de usuario o grupo.
Acerca de las reglas de políticas
Las reglas de política controlan cómo fapolicyd maneja los archivos que no se muestran explícitamente en la base de datos de confianza. Las reglas de política también se pueden utilizar para restringir aún más el comportamiento en el sistema de los archivos que están en la base de datos de confianza. Puede utilizar reglas de política para que fapolicyd sea más o menos restrictivo. Se pueden definir reglas de política para crear excepciones que permitan o rechacen determinadas aplicaciones para escenarios concretos. Por ejemplo, puede crear reglas para permitir explícitamente una aplicación para un usuario o grupo concreto, pero para denegar la aplicación para todos los demás usuarios.
fapolicyd se envía con dos juegos de reglas de política:- La política known-libs
La política de bibliotecas conocidas es el conjunto de reglas por defecto y está diseñada para proteger el sistema al permitir que solo se ejecuten aplicaciones o bibliotecas conocidas. La política es ligeramente más permisiva porque permite que los binarios Elf, los programas python y los scripts de shell se ejecuten para aplicaciones y bibliotecas de confianza.
- La política restrictive
La política restrictiva proporciona principalmente las mismas reglas que la política de bibliotecas conocidas, pero incluye varias reglas más restrictivas que impiden la ejecución de cualquier aplicación o biblioteca que no esté dentro de la base de datos de confianza. Esta política bloquea cualquier posibilidad de ejecutar cualquier archivo ejecutable que no sea de confianza.
Las reglas para estas políticas se envían en /usr/share/fapolicyd/sample-rules/. Las reglas que se aplican a la política de bibliotecas conocidas se copian en /etc/fapolicyd/rules.d/ cuando el paquete está instalado para activarlas. Los archivos que se aplican a cada política se describen en /usr/share/fapolicyd/sample-rules/README-rules.
Fapolicyd procesa las reglas según su orden de clasificación natural, por lo que los archivos de reglas se nombran según la siguiente convención de prefijo:
10-: definiciones de macros que se pueden utilizar en otras reglas.20-: reglas para trabajar alrededor de fapolicyd para la actividad crítica del sistema, como cuando dracut crea archivos initramfs del núcleo o cuando DNF necesita ejecutar herramientas particulares para las actualizaciones.30-: reglas que identifican patrones de acceso que muestran cómo se puede iniciar un programa. Una regla predeterminada comprueba si existen programas iniciados por el enlazador de tiempo de ejecución (ld.so).40-: reglas para archivos binarios ELF, como reglas para evitar que los archivos ELF con formato incorrecto se ejecuten incluso si son de confianza, reglas de confianza para bibliotecas ELF y archivos ejecutables binarios ELF de confianza.50-: reglas que establecen qué usuarios o grupos son de confianza para ejecutar programas concretos o acceder a archivos concretos.60-: reglas para acceder a aplicaciones concretas, donde la aplicación no está en la base de datos de confianza.70-: reglas relacionadas con diferentes lenguajes de programación o lenguajes de programación, como Python, Perl, PHP, Ruby o Lua.80-: reglas para aplicaciones de confianza que pueden necesitar controles de acceso avanzados.90-: reglas generales de aceptación y denegación.
Las reglas se compilan en un único archivo en /etc/fapolicyd/compiled.rules que fapolicyd lee en tiempo de ejecución.
La estructura de reglas se describe en detalle en la página del manual fapolicyd.rules(5).