¿Cuál es la idea técnica para implementar un módulo de función de seguridad del kernel de Linux?
Cuando los usuarios ejecutan llamadas al sistema, primero realizan una verificación de errores de función a través de la interfaz del kernel original, luego realizan una verificación DAC tradicional y pasan la función de enlace LSM antes de acceder a los objetos internos del kernel. Llame a LSM. Luego, LSM invoca políticas de control de acceso específicas para determinar la legalidad del acceso. La arquitectura general del control de acceso:
Los módulos de toma de decisiones de acceso bajo el marco LSM incluyen selinux, smack, tomoyo, yama y apparmor.
Cada módulo de toma de decisiones llama a la función Register_security() a través de su propia función XXX_init. Una vez que el módulo registrado en el marco LSM se carga correctamente, se pueden realizar operaciones de control de acceso. Si utiliza la función Register_security() para cargar otro módulo de seguridad en este momento, se producirá un error y el siguiente módulo no se podrá cargar hasta que cierre la sesión utilizando el marco.
El módulo de seguridad de Linux (LSM) proporciona dos llamadas a funciones de enlace de seguridad: una es para administrar el dominio de seguridad de los objetos del kernel y la otra es para arbitrar el acceso a estos objetos del kernel. La llamada a la función de enlace de seguridad se implementa a través del enlace, que es el puntero de función en la tabla global security_ops. El tipo de esta tabla global es la estructura seguridad_operaciones, que se define en el archivo de encabezado include/Linux/security.h..
A través de un simple análisis del código de seguridad, LSM inicia el diagrama de flujo:
Security_initcall solo puede llamar a uno de selinux_init, smack_init, tomoyo_init, yama_init y apparmor_init porque el kernel no permite que múltiples mecanismos de seguridad trabajen juntos al mismo tiempo. Una vez que se carga un módulo de seguridad, se convierte en el centro de toma de decisiones de políticas de seguridad del sistema y no será anulado por la función Register_security() siguiente hasta que el módulo de seguridad se cancele del registro del marco mediante la función unregister_security().
Por lo tanto, solo se puede habilitar un mecanismo de seguridad en el marco LSM. La configuración y los requisitos para que smack se compile en el kernel de Linux:
(1) Se requiere que smack y. selinux no puede ejecutarse al mismo tiempo y no puede existir al mismo tiempo en el mismo kernel en ejecución;
Compruebe si las siguientes funciones están habilitadas en el kernel (si no, deben habilitarse):