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