Implementación del control de acceso obligatorio con Selinux o Apparmor en Linux

Implementación del control de acceso obligatorio con Selinux o Apparmor en Linux

Para superar las limitaciones de y para aumentar los mecanismos de seguridad proporcionados por el estándar ugo/rwx Listas de permisos y control de acceso, el Agencia de Seguridad Nacional de los Estados Unidos (NSA) ideó una flexible Control de acceso obligatorio (Mac) método conocido como Selinux (corto para Linux mejorado con seguridad) Para restringir, entre otras cosas, la capacidad de los procesos para acceder o realizar otras operaciones en objetos del sistema (como archivos, directorios, puertos de red, etc.) con el menor permiso posible, al tiempo que permite modificaciones posteriores a este modelo.

Selinux
y Apparmor Security Hardening Linux

Otro Mac popular y ampliamente utilizado es Aparmor, que además de las características proporcionadas por Selinux, Incluye un modo de aprendizaje que permite que el sistema "aprender"Cómo se comporta una aplicación específica y establecer límites configurando perfiles para el uso de la aplicación segura.

En Centos 7, Selinux se incorpora al núcleo mismo y está habilitado en Ejecución modo de forma predeterminada (más sobre esto en la siguiente sección), en lugar de usura de apertura y Ubuntu que usa Aparmor.

En este artículo explicaremos los elementos esenciales de Selinux y Apparmor y cómo usar una de estas herramientas para su beneficio dependiendo de la distribución elegida.

Introducción a Selinux y cómo usarlo en Centos 7

Linux mejorado con seguridad puede funcionar de dos maneras diferentes:

  1. Ejecución: Selinux niega el acceso basado en las reglas de política de Selinux, un conjunto de pautas que controlan el motor de seguridad.
  2. Permisivo: Selinux no niega el acceso, pero las negaciones están registradas para acciones que se habrían negado si se ejecuta en modo de aplicación.

Selinux también se puede deshabilitar. Aunque no es un modo de operación en sí, sigue siendo una opción. Sin embargo, aprender a usar esta herramienta es mejor que simplemente ignorarla. Tenlo en mente!

Para mostrar el modo actual de Selinux, usar Getenforce. Si desea alternar el modo de operación, use setenforce 0 (Para configurarlo Permisivo) o setenforce 1 (Ejecución).

Dado que este cambio no sobrevivirá a un reiniciar, necesitará editar el /etc/selinux/config archivo y configure el Selinux variable a cualquiera ejecución, permisivo, o desactivado Para lograr la persistencia a través de los reinicios:

Cómo habilitar y deshabilitar el modo Selinux

En una nota al margen, si Getenforce devuelve deshabilitado, tendrá que editar /etc/selinux/config con el modo de operación deseado y reiniciar. De lo contrario, no podrá establecer (o alternar) el modo de operación con setenforce.

Uno de los usos típicos de setenforce consiste en alternar entre los modos Selinux (de ejecución a permisivo o al revés) para solucionar problemas de una aplicación que se comporta mal o no funciona como se esperaba. Si funciona después de configurar Selinux a Permisivo Modo, puede estar seguro de que está viendo un problema de permisos de Selinux.

Dos casos clásicos en los que probablemente tengamos que lidiar con Selinux son:

  1. Cambiar el puerto predeterminado donde un demonio escucha en.
  2. Establecer el Raiz del documento directiva para un host virtual fuera de /var/www/html.

Echemos un vistazo a estos dos casos utilizando los siguientes ejemplos.

Ejemplo 1: Cambiar el puerto predeterminado para el demonio SSHD

Una de las primeras cosas que hacen la mayoría de los administradores del sistema para asegurar sus servidores es cambiar el puerto donde el Daemon SSH escucha, principalmente para desalentar los escáneres de puertos y los atacantes externos. Para hacer esto, usamos la directiva de puerto en /etc/ssh/sshd_config seguido del nuevo número de puerto de la siguiente manera (usaremos puerto 9999 en este caso):

Puerto 9999 

Después de intentar reiniciar el servicio y verificar su estado, veremos que no pudo comenzar:

# SystemCTL reiniciar sshd # systemctl sshd sshd 
Verifique el estado del servicio SSH

Si echamos un vistazo a /var/log/audit/audit.registro, veremos eso SSHD se le impidió comenzar en el puerto 9999 por Selinux Porque ese es un puerto reservado para el Gestión de JBoss Servicio (los mensajes de registro de Selinux incluyen la palabra "AVC" para que puedan ser fácilmente identificados de otros mensajes):

# cat/var/log/audit/audit.registro | Grep AVC | cola -1 
Verifique los registros de auditoría de Linux

En este punto, la mayoría de la gente probablemente desactivaría Selinux Pero no lo haremos. Veremos que hay una manera para que Selinux y SSHD escuchen en un puerto diferente, vivan juntos en armonía. Asegúrese de tener el PolicyCoreutils-Python Paquete instalado y ejecutado:

# yum install PolicyCoreutils-Python 

Para ver una lista de los puertos donde Selinux permite que SSHD escuche en. En la siguiente imagen también podemos ver ese puerto 9999 estaba reservado para otro servicio y, por lo tanto, no podemos usarlo para ejecutar otro servicio por el momento:

# Puerto de semanage -l | grep ssh 

Por supuesto, podríamos elegir otro puerto para SSH, pero si estamos seguros de que no necesitaremos usar esta máquina específica para ningún servicio relacionado con JBoss, podemos modificar la regla Selinux existente y asignar ese puerto a SSH: en su lugar:

# Port Semanage -M -T SSH_PORT_T -P TCP 9999 

Después de eso, podemos usar el primero semanago comandar para verificar si el puerto fue asignado correctamente, o el -LC Opciones (abreviatura de la lista personalizada):

# Puerto de semanage -lc # Semanage Port -l | grep ssh 
Asignar puerto a SSH

Ahora podemos reiniciar SSH y conectarnos al servicio usando el puerto 9999. Tenga en cuenta que este cambio sobrevivirá a un reinicio.

Ejemplo 2: Elegir un DocumentRoot fuera/var/www/html para un host virtual

Si necesita configurar un host virtual Apache usando un directorio que no sea /var/www/html como Raiz del documento (Digamos, por ejemplo, /websrv/sites/gabriel/public_html)

DocumentRoot "/WebSrv/Sites/Gabriel/public_html" 

Apache se negará a servir el contenido porque el índice.html ha sido etiquetado con el default_t selinux Tipo, a qué apache no puede acceder:

# wget http: // localhost/índice.html # ls -lz/websrv/sites/gabriel/public_html/index.html 
Etiquetado como predettion_t selinux tipo

Al igual que con el ejemplo anterior, puede usar el siguiente comando para verificar que este sea un problema relacionado con Selinux:

# cat/var/log/audit/audit.registro | Grep AVC | cola -1 
Verifique los registros de los problemas de Selinux

Para cambiar la etiqueta de /websrv/sites/gabriel/public_html recursivamente a httpd_sys_content_t, hacer:

# semanage fcontext -a -t httpd_sys_content_t "/webSrv/sites/gabriel/public_html (/.*)?" 

El comando anterior otorgará acceso a Apache de solo lectura a ese directorio y su contenido.

Finalmente, para aplicar la política (y hacer que el cambio de etiqueta sea efectivo de inmediato), haga:

# RESTORECON -R -V/WEBSRV/SITES/GABRIEL/Public_html 

Ahora debería poder acceder al directorio:

# wget http: // localhost/índice.html 
Directorio de Acceso a Apache

Para obtener más información sobre Selinux, consulte la Guía Fedora 22 Selinux y Administrator.

Páginas: 1 2