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.
¿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?
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:
Como vemos el servicio se esta ejecutando sin embargo los sockets que llaman los módulos del Kernel no se cargaron:
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
Publicar un comentario