Ir al contenido principal

Por que NO desactivar SELinux.




Extraño no es escuchar colegas decir "Para que Asterisk no te ponga problemas mejor desactiva SElinux".
¿En serio? ¿Para que tu carro no sea molesto mejor desactívale la alarma?
Como en muchas otras cosas de la vida le tememos a lo que no conocemos, y optamos por el mejor método de supervivencia: Evitar.


¿Por qué SELinux?

Security-Enhanced Linux (SELinux) es una implementación del control obligatorio de acceso en el kernel Linux, basado en la interfaz LSM (módulos de seguridad de Linux: «Linux Security Modules»). En la práctica, el núcleo pregunta a SELinux antes de cada llamada al sistema para saber si un proceso está autorizado a realizar dicha operación.

SELinux utiliza una serie de reglas — conocidas en conjunto como una política (“policy”) — para autorizar o denegar operaciones. Estas reglas pueden llegar a ser difíciles de crear. Afortunadamente se proporcionan dos políticas estándar (targeted, dirigida, y strict, estricta) para evitar gran parte del trabajo de configuración.


SELinux y Asterisk

Que mejor forma de incentivar y promover el buen uso de SELinux que intentar resolver el reto con el que iniciamos el post.

No vamos a hablar de cómo instalar Asterisk (Ya vendrá en otro post).
Vamos a solucionar un error común al habilitar SELinux en un server ejecutando Asterisk: 

"Unable to connect to remote asterisk (does /var/run/asterisk/asterisk.ctl exist?)"

Lo primero que revisaremos es si el servicio se esta ejecutando

[root@linuxhost ~]# /etc/init.d/asterisk status
asterisk (pid 25959) is running...

Como vemos el servicio se esta ejecutando sin embargo los sockets que llaman los módulos del Kernel no se cargaron:

[root@linuxhost ~]# asterisk -vvr
Unable to connect to remote asterisk (does /var/run/asterisk/asterisk.ctl exist?)

¿El origen de nuestro "fallo"? Quizás es SELinux haciendo el trabajo que se supone debe hacer:

[root@linuxhost ~]# getenforce
Enforcing


En este punto muchos creen prudente desactivar SELinux y no ensuciarse las manos. Otros por el contrario verán la oportunidad de hacer la diferencia.


Con la ayuda de audit2allow se generaran las políticas que SELinux necesita para crear reglas que autoricen operaciones denegadas":

[root@linuxhost ~]# audit2allow -a
#============= asterisk_t ==============
allow asterisk_t admin_home_t:file { read getattr open };
allow asterisk_t self:capability sys_module;
allow asterisk_t usr_t:file execute;
allow asterisk_t var_lib_t:file { read getattr open };
allow asterisk_t var_run_t:sock_file { write create unlink };
allow asterisk_t var_spool_t:dir read;

[root@linuxhost ~]# audit2allow -a -M myasterisk
******************** IMPORTANT ***********************
To make this policy package active, execute:
semodule -i myasterisk.pp

[root@linuxhost ~]# ls
myasterisk.pp myasterisk.te


Finalmente aplicamos la nueva politica creada:

[root@linuxhost ~]# semodule -i myasterisk.pp

Consideraciones Finales:


Contrario a lo que muchos podrían pensar SELinux no es el palo en la rueda, mas bien puede ser aliado y patrocinador de noches de sueño tranquilo para muchos administradores de sistemas.


Más información en los siguientes vínculos:

Comentarios

Entradas populares de este blog

Como Instalar un server OpenLDAP en Redhat 7

Consideraciones: Este artículo instalaremos un servidor de autenticación OpenLDAP en Redhat 7 Escenario : El escenario utilizado es el siguiente: - Server OpenLDAP (ldapsrv1.danielcastillo.tech, 192.168.20.41) - Cliente OpenLDAP ( ldapclt.danielcastillo.tech,192.168.20.43 ) Server Pre-requisitos: 1. Crear las respectivas entradas de los host en el archivo  /etc/hosts [ root@ldapsrv1 ~ ] # cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 192.168.20.41 ldapsrv1.danielcastillo.tech ldapsrv1 192.168.20.43 ldapclt.danielcastillo.tech ldapclt ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 2. Actualizar el sistema: [ root@ldapsrv1 ~ ] # yum -y update Procedimiento: 1. Instalar los paquetes necesarios: [ root@ldapsrv1 ~ ] # yum -y install openldap* migrationtools 2. Iniciar y habilitar el servicio: [ root@ldapsrv1 ~ ] # systemctl start slapd.service [ root@ldapsrv1 ~ ] # systemctl enable slapd.service 3. Crear

Autenticación Centralizada RHEL/OracleLinux/CentOS 7

En esta oportunidad vamos a configurar una maquina con sistema operativo Linux (RHEL 7) para que pueda autenticar sesiones SSH obteniendo usuarios y credenciales del directorio activo (WINDOWS 2016) El escenario utilizado es el siguiente: - Server Linux (linuxhost.danielcastillo.tech, 192.168.1.2) - AD Server Windows (adwin. danielcastillo.tech,192.168.1.100 ) Pre-requisitos. 1. Un usuario en el AD con permisos para agregar estaciones de trabajo lo llamaremos "unixproxy", Más informacion sobre como hacerlo en el siguiente link: https://www.prajwaldesai.com/allow-domain-user-to-add-computer-to-domain/ 1.1. Una unidad organizacional en el directorio activo de windows lo llamaremos "ad_win_security_group" a ella perteneceran los usuarios que queremos permitir ingresar. 1.2. Un usuario que pertenezca a la OU anterior a este lo llamaremos "aduser" 2. El sistema esta sincronzando con un servidor NTP confiable: (el server NTP debe ser el AD serv

Importar certificado SSL de IIS e implementarlo en un WebServer Linux

Este artículo pretende explicar como implementar en un servidor Linux de la familia Redhat (Redhat, CentOS, Fedora, etc) un certificado wildcard SSL originalmente expedido e instalado en un WebServer IIS. Pre-requisitos. Debemos exportar el conjunto de certificados (en formato .pfx) que ya están instalados en el IIS  y copiarlos  a nuestra maquina Linux: Instalación y Configuración. 1. Instalamos el modulo de criptografía de Apache: [ root@ldapclt ~ ] # yum -y install mod_ssl 2. Extraer el certificado y el  key : [ root@linuxhost ~ ] # openssl pkcs12 -in example.com.pfx -clcerts -nokeys -out <host>.example.com.cer [ root@linuxhost ~ ] # openssl pkcs12 -in example.com.pfx -nocerts -nodes -out <host>.example.com.key 3. Copiamos los archivos resultantres en sus respectivas ubicaciones: [ root@linuxhost ~ ] # rsync -av <host>.example.com.cer /etc/pki/tls/certs/ [ root@linuxhost ~ ] # rsync -av <host>.example.com.key /etc/pki/tls/private/ 4. Editamos