SElinux: permite que httpd se conecte a un puerto específico

SElinux: permite que httpd se conecte a un puerto específico

Mi sistema ejecuta CentOS 6.4 con apache2.2.15. SElinux está aplicando y estoy intentando conectarme a una instancia local de redis a través de mi aplicación python/wsgi. Recibo el error 13, Permiso denegado. Podría solucionar esto mediante el comando:

setsebool -P httpd_can_network_connect

Sin embargo, no quiero exactamente que httpd pueda conectarse a todos los puertos tcp. ¿Cómo puedo especificar a qué puertos/redes se permite conectar httpd? Si pudiera crear un módulo que permita que httpd se conecte al puerto 6379 (redis) o cualquier tcp en 127.0.0.1, sería preferible. No estoy seguro de por qué mi paranoia es tan fuerte con esto, pero bueno...

¿Nadie sabe?

Respuesta1

De forma predeterminada, la política de SELinux solo permitirá el acceso de servicios a puertos reconocidos asociados con esos servicios:

# semanage port -l | egrep '(^http_port_t|6379)'
http_port_t                    tcp      80, 81, 443, 488, 8008, 8009, 8443, 9000
# curl http://localhost/redis.php
Cannot connect to redis server.

- agregar el puerto Redis (6379) a la política SELinux

# semanage port -a -t http_port_t -p tcp 6379
# semanage port -l | egrep '(^http_port_t|6379)'
http_port_t                    tcp      6379, 80, 81, 443, 488, 8008, 8009, 8443, 9000
# curl http://localhost/redis.php
Connected successfully.

También puede instalar setroubleshoot-serverRPM y ejecutar: sealert -a /var/log/audit/audit.log- le dará un buen informe con sugerencias útiles (incluido el comando anterior).

Script PHP para probar la conexión:

# cat redis.php 
<?php

$redis=new Redis();
$connected= $redis->connect('127.0.0.1', 6379);

if(!$connected) {
        die( "Cannot connect to redis server.\n" );
}

echo "Connected successfully.\n";

?>

Respuesta2

Es posible que necesites usar

semanage port -m -t http_port_t -p tcp 6379

Si falta semanage, agregue el paquete Policycoreutils-python

yum install policycoreutils-python

Respuesta3

Puede poner temporalmente selinux en modo permisivo y dejar que httpd se conecte a redis, luego generar y construir un módulo de política personalizado usandoauditoría2permitir

información relacionada