Estoy estudiando el funcionamiento básico de SELinux y sería útil desencadenar una negación. Mi máquina de prueba ejecuta CentOS 7, es una instalación básica del servidor sin ningún servicio adicional, y getenforce dice 'Enforcing'. Así que me sentí seguro de que hacer que / root sea legible en todo el mundo e intentar leer archivos desde allí como un usuario sin privilegios haría el truco. Pero no hay suerte! ¿Alguien puede sugerir algunas pruebas rápidas? Intentar acceder a rutas o abrir puertos, etc.
Idealmente, estoy buscando comandos de shell directos que un DAC no hubiera restringido, pero un MAC lo notará y lo negará. Como tal, no estoy buscando compilar programas a medida o instalar servicios específicos (como un servidor web) para lograr esto. Esto es valioso ya que proporciona una forma genérica y clara de ver a SELinux en acción.
No tengo problemas para modificar el DAC (es decir, los permisos del sistema de archivos) para que sean menos restrictivos de lo que serían por defecto como parte de una prueba.
Respuestas:
Para demostrar la utilidad de SELinux en la detección de errores para terceros / su propio código de desarrollador, aquí hay una prueba de protección de memoria (modificando el primer ejemplo de código aquí ):
Compila y muestra el valor predeterminado (no capturado)Cambie los booleanos para detectar el problema:
fuente
Esto demuestra claramente una política MAC en la que un DAC equivalente podría haberse omitido en una instalación base de CentOS 7.
Por defecto (en CentOS en el momento de la escritura) los usuarios no privilegiados, que no son del sistema, inician sesión como el rol 'nonfined_u'. Sin embargo, podemos cambiar nuestro sistema para que nuestro usuario no privilegiado 'alice' se coloque en el rol 'user_u' en su lugar. Las políticas predeterminadas se pueden hacer para restringir claramente esta función con solo una pequeña cantidad de configuración adicional.
Ahora apague la capacidad de estos usuarios para ejecutar archivos ubicados en sus directorios de inicio y / tmp. Una vez más, el valor predeterminado es permitir este comportamiento. Este comando puede tardar un momento en completarse .
Ahora (con nuestro usuario no privilegiado) podemos iniciar sesión e intentar ejecutar algo en una de estas áreas prohibidas. Como puede ver, se nos niega.
Finalmente, podemos ver el registro AVC para ver nuestra negación SELinux.
fuente
A menos que haya cambiado sus políticas en la pestaña Booleana de system-config-selinux (o en / etc / selinux / policy), el valor predeterminado debería responder a lo siguiente (NB, es posible que también desee instalar setroubleshoot para una inmersión más profunda) :
Luego, reinicie su servidor web e intente acceder a http: // localhost / ks con su navegador web. Debería ver un mensaje "Prohibido". Si está siguiendo
/var/log/audit/audit.log
o si está ejecutandoausearch -m avc -ts recent
, entonces debería poder ver el mensaje:type=AVC msg=audit(1391277951.222:266): avc: denied { read } for pid=1731 comm="httpd" name="ks" dev=sda1 ino=22351 scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined u:object r:default t:s0 tclass=dir
Luego puede cambiar el contexto de SELinux
chcon -Rv --reference /var/www/html /install/ks
si no desea deshabilitar SELinux pero puede acceder al recurso.EDITAR: lo siento, no vi que dijiste "no es un servidor web". Intente
chcon -u fake_u <filename>
usar una cuenta sin privilegios en un archivo del sistema.fuente
instale dos paquetes pequeños, sin dependencias
iniciar un servidor FTP
crear un archivo en la casa de root
pasar de la raíz al directorio FTP.
nota: mover, no copiar, o el texto del archivo cambiará
inicie sesión en su servidor FTP como usuario del cliente FTP e intente acceder al nuevo archivo.
nota: la finalización automática de pestañas no funcionará aquí
ver la negación en los registros sin procesar
o si has
setroubleshoot*
instaladofuente