SElinux: permite que o httpd se conecte a uma porta específica

30

Meu sistema está executando o CentOS 6.4 com o apache2.2.15. O SElinux está impondo e estou tentando conectar a uma instância local de redis através do meu aplicativo python / wsgi. Eu recebo o Erro 13, Permissão negada. Eu poderia consertar isso através do comando:

setsebool -P httpd_can_network_connect

No entanto, eu não quero exatamente que o httpd seja capaz de se conectar a todas as portas tcp. Como posso especificar a quais portas / redes o httpd tem permissão para se conectar? Se eu pudesse criar um módulo para permitir que o httpd se conecte à porta 6379 (redis) ou a qualquer tcp em 127.0.0.1, isso seria preferível. Não sei por que minha paranoia é tão strong nisso, mas ei ...

Alguém sabe?

    
por savagecitizen 28.12.2013 / 06:51

3 respostas

39

Por padrão, a política do SELinux só permitirá o acesso de serviços a portas reconhecidas associadas a esses serviços:

# 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.

- adicione a porta Redis (6379) à política do 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.

Você também pode instalar setroubleshoot-server RPM e executar: sealert -a /var/log/audit/audit.log - ele fornecerá um relatório legal com sugestões úteis (incluindo o comando acima).

script PHP para testar a conexão:

# 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";

?>
    
por 28.12.2013 / 10:02
12

Você pode precisar usar

semanage port -m -t http_port_t -p tcp 6379

Se a semanage estiver faltando, adicione o pacote policycoreutils-python

yum install policycoreutils-python
    
por 13.05.2015 / 09:30
3

Você pode colocar temporariamente o selinux no modo permissivo e permitir que o httpd se conecte a redis, em seguida, gerar e criar um módulo de política personalizado usando audit2allow

    
por 28.12.2013 / 08:50