web-dev-qa-db-fra.com

SElinux: autoriser httpd à se connecter à un port spécifique

Mon système exécute CentOS 6.4 avec Apache2.2.15. SElinux est en vigueur et j'essaie de me connecter à une instance locale de redis via mon application python/wsgi. J'obtiens l'erreur 13, autorisation refusée. Je pourrais résoudre ce problème via la commande:

setsebool -P httpd_can_network_connect

Cependant, je ne veux pas exactement que httpd puisse se connecter à tous les ports TCP. Comment puis-je spécifier les ports/réseaux auxquels httpd est autorisé à se connecter? Si je pouvais créer un module pour permettre à httpd de se connecter au port 6379 (redis) ou à n'importe quel TCP sur 127.0.0.1, ce serait préférable. Je ne sais pas pourquoi ma paranoïa est si forte à ce sujet, mais bon ...

Quelqu'un sait?

42
savagecitizen

Par défaut, la politique SELinux autorise uniquement l'accès aux services aux ports reconnus associés à ces services:

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

- ajouter le port Redis (6379) à la politique 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.

Vous pouvez également installer setroubleshoot-server RPM et exécution: sealert -a /var/log/audit/audit.log - il vous donnera un joli rapport avec des suggestions utiles (y compris la commande ci-dessus).

Script PHP pour tester la connexion:

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

?>
52
HTF

Vous devrez peut-être utiliser

semanage port -m -t http_port_t -p tcp 6379

Si le semanage est manquant, ajoutez le package policycoreutils-python

yum install policycoreutils-python
17
Tom Hallam

Vous pouvez temporairement mettre selinux en mode permissif et laisser httpd se connecter à redis, puis générer et créer un module de stratégie personnalisé en utilisant audit2allow

3
A. M.