SElinux: разрешить httpd подключаться к определенному порту

SElinux: разрешить httpd подключаться к определенному порту

Моя система работает на CentOS 6.4 с apache2.2.15. SElinux принудительно применяет, и я пытаюсь подключиться к локальному экземпляру redis через мое приложение python/wsgi. Я получаю ошибку 13, Permission denied. Я могу исправить это с помощью команды:

setsebool -P httpd_can_network_connect

Однако я не хочу, чтобы httpd мог подключаться ко всем портам tcp. Как мне указать, к каким портам/сетям httpd разрешено подключаться? Если бы я мог сделать модуль, позволяющий httpd подключаться к порту 6379 (redis) или любому tcp на 127.0.0.1, это было бы предпочтительнее. Не знаю, почему моя паранойя так сильна по этому поводу, но эй...

Кто-нибудь знает?

решение1

По умолчанию политика SELinux разрешает службам доступ только к распознанным портам, связанным с этими службами:

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

- добавить порт Redis (6379) в политику 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.

Вы также можете установить setroubleshoot-serverRPM и запустить: sealert -a /var/log/audit/audit.log- это выдаст вам хороший отчет с полезными предложениями (включая команду выше).

PHP-скрипт для проверки соединения:

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

?>

решение2

Вам может понадобиться использовать

semanage port -m -t http_port_t -p tcp 6379

Если semanage отсутствует, то добавьте пакет policycoreutils-python

yum install policycoreutils-python

решение3

Вы можете временно перевести selinux в разрешающий режим и позволить httpd подключиться к redis, а затем сгенерировать и собрать пользовательский модуль политики, используяаудит2разрешить

Связанный контент