Problema
Un archivo asignado a una determinada categoría SELinux MCS (Seguridad multicategoría) puede ser leído por un usuario que no está asignado a esa categoría, lo que indica que MCS de alguna manera no funciona en mi sistema (ejecutando CentOS7, con una instalación mínima, SELinux haciendo cumplir endirigidopolítica ).
Fondo
Recientemente adquirí un pequeño vServer para mí, lo que me impulsó a sumergirme en la configuración segura del sistema y a manejar SELinux por primera vez. Tengo la intención de separar las aplicaciones que ejecutaré en el servidor ejecutándolas en contenedores acoplables (con el host funcionando en CentOS7). Me alegró saber que a cada contenedor acoplable se le asignan (de forma predeterminada) categorías SELinux MCS aleatorias al inicio para proporcionar una capa de seguridad adicional para la separación. Para familiarizarme con cómo funciona SELinux en general y MCS específicamente, configuré una VM en una de las máquinas de mi casa y jugué un poco. Al hacer eso, noté que MCS no funciona como esperaba, por lo que me falta algo importante o hay un problema de configuración en alguna parte.
Lo que hice
Para probar MCS seguí las instrucciones en [0] y [1]. Primero, me aseguré de que SELinux se esté ejecutandohaciendo cumplirmodo y con eldirigidopolítica usando sestatus
. Siguiendo [0], creé unmcsuser_uUsuario SELinux y usuarios CentOSJohn,jane,juanjane, que luego asigné amcsuser_uusando semanage login
. También asigné las categorías a los usuarios que se enumeran en [0] y terminé con:
Login Name | SELinux User | MLS/MCS Range
john | mcsuser_u | s0-s0:c122
jane | mcsuser_u | s0-s0:c123
johnjane | mcsuser_u | s0-s0:c122,123
desde semanage login -l
y
mcsuser_u | MLS/MCS Level: s0 | MLS/MCS Range: s0-s0:c0.c1023 | SELinux Roles: user_r
de semanage user -l
.
Hice el directorio de inicio del usuario.Johnlegible en todo el mundo ( chmod 707
), iniciado sesión comoJohny creó un archivo de textojuantexto. Luego le asigné categoríac122a ese archivo (aún conectado comoJohn). También pude asignar categoría.c120al archivo, aunqueJohnno está categorizado comoc120él mismo, lo que no debería ser posible según [0] (posteriormente eliminéc120de nuevo). ls -lZ johntext
muestra la salida
-rw-rw-r-- john john mcsuser_u:object_r:user_home_t:s0:c122 johntext
Siguiendo lo anterior, inicié sesión como usuario.jane, y trató de leer el archivojuantextousando el cat
comando, lo cual pude hacer.
Esto, para mí, indica claramente que MCS no está funcionando como esperaría (permitiendo el acceso a objetos de una determinada categoría sólo si el usuario que solicita el acceso tiene la misma categoría).
¿Soluciones?
Estoy algo confundido ahora y no sé dónde reside el error, así que recurro a ustedes para pedirles consejo. Probablemente sea solo una suposición errónea o un malentendido por mi parte, pero no puedo entenderlo en este momento y no tiene sentido para mí.A mi modo de ver, existen las siguientes posibilidades:
1. Tengo que activar manualmente los controles MCS o usar una política diferente
No encontré ninguna información sobre si tengo que activar manualmente el soporte MCS y así asumir que simplemente funciona si asigno etiquetas (basado en [1]). Otra fuente [2] sugiere que MCS está habilitado en eldirigidopolítica sobre (al menos) Fedora y RHEL, de la cual esperaría que no sea diferente para CentOS.
2. Hay una mala configuración de mi parte
Es posible que haya cometido algún error al configurar las categorías de usuario semanage login
o al asignar categorías al archivo.
3. Simplemente está roto
..lo cual seria malo
Enlaces referenciados
0:https://selinux-mac.blogspot.de/2009/06/multi-category-security.html
1:https://www.centos.org/docs/5/html/Deployment_Guide-en-US/sec-mcs-getstarted.html
2:http://selinuxsymposium.org/2006/slides/08-mcs.pdf
sestatus
Salida completa
SELinux status: enabled
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinux
Loaded policy name: targeted
Current mode: enforcing
Mode from config file: enforcing
Policy MLS status: enabled
Policy deny_unknown status: allowed
Max kernel policy version: 28
[EDITAR]:
Acabo de probar los mismos pasos en una máquina virtual que ejecuta CentOS 6.9 donde todo se comporta como se esperaba. En este momento, asumiría que hay algún error relacionado con MCS en SELinux en CentOS o algunos cambios no documentados en la política/configuración que necesitarían ajustes. Todavía tengo dudas sobre cuáles serían los siguientes pasos sensatos para que funcione como se espera.
Respuesta1
Aparentemente hubo un cambio en las políticas de SELinux de CentOS6 a CentOS7, de modo que las restricciones MCS ya no se aplican a todos los tipos. Para que un tipo determinado se adhiera a MCS, el mcs_constrained_type
atributo debe agregarse a ese tipo mediante una política personalizada. Se pueden encontrar más detalles sobre cómo hacerlo (y qué tipos están restringidos por MCS de forma predeterminada (y por qué)) en unentrada de blog de Dan Walsh.