Назад | Перейти на главную страницу

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

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

setsebool -P httpd_can_network_connect

Однако я не хочу, чтобы httpd мог подключаться ко всем портам TCP. Как я могу указать, к каким портам / сетям разрешено подключаться httpd? Если бы я мог создать модуль, позволяющий httpd подключаться к порту 6379 (redis) или любому tcp на 127.0.0.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-server RPM и запустить: 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";

?>

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

semanage port -m -t http_port_t -p tcp 6379

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

yum install policycoreutils-python

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