![SElinux: permite que o httpd se conecte a uma porta específica](https://rvso.com/image/623626/SElinux%3A%20permite%20que%20o%20httpd%20se%20conecte%20a%20uma%20porta%20espec%C3%ADfica.png)
Meu sistema está rodando CentOS 6.4 com apache2.2.15. O SElinux está sendo aplicado e estou tentando me conectar a uma instância local do redis por meio do meu aplicativo python/wsgi. Recebo o erro 13, permissão negada. Eu poderia consertar isso através do comando:
setsebool -P httpd_can_network_connect
No entanto, não quero exatamente que o httpd seja capaz de se conectar a todas as portas TCP. Como posso especificar quais portas/redes o httpd pode se conectar? Se eu pudesse criar um módulo para permitir que o httpd se conectasse à porta 6379 (redis) ou qualquer tcp em 127.0.0.1, isso seria preferível. Não sei por que minha paranóia é tão forte nisso, mas ei...
Ninguem sabe?
Responder1
Por padrão, a política SELinux permitirá apenas 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.
- adicionar porta Redis (6379) à 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.
Você também pode instalar setroubleshoot-server
o RPM e executar: sealert -a /var/log/audit/audit.log
- ele fornecerá um bom relatório 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";
?>
Responder2
Você pode precisar usar
semanage port -m -t http_port_t -p tcp 6379
Se semanage estiver faltando, adicione o pacote policycoreutils-python
yum install policycoreutils-python
Responder3
Você poderia colocar temporariamente o selinux no modo permissivo e deixar o httpd se conectar ao redis, então gerar e construir um módulo de política personalizado usandoaudit2allow