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

Лучший способ управлять пользовательскими портами в SELinux

В RHEL 6.2 мы используем httpd на хосте в качестве внешнего прокси для Tomcat на другом хосте, а также у нас есть mod_status, настроенный для прослушивания нестандартного порта для предоставления информации о состоянии инструменту мониторинга. Следовательно, нам нужен httpd для 1) установления сетевых подключений и 2) прослушивания нестандартного порта.

Целевая политика по умолчанию (в настоящее время в разрешающем режиме) позволяет httpd прослушивать только определенный список портов (semanage port -l | grep http_port_t), и не позволит httpd устанавливать исходящие сетевые подключения. aureport -a показывает отклонения AVC, когда httpd пытается привязаться к настраиваемому порту состояния и когда он пытается подключиться к портам AJP на другом хосте.

Я нашел два решения, но одно кажется слишком допустимым, а другое слишком хрупким (т.е. может сломаться при обновлении политики).

«Широкое» решение

я использовал audit2allow для создания локального источника политики, затем checkmodule скомпилировать, semodule_package для создания пакета политик и semanage чтобы начать применять его. Затем я перезапустил httpd и подтвердил, что отказов AVC не было. В локальной политике, сгенерированной audit2allow, использовалось следующее разрешение:

разрешить httpd_t port_t: tcp_socket {name_bind name_connect};

который позволяет httpd связываться с любым портом (а не только с перечисленными в http_port_t) и подключаться к любому порту. Плюс этого подхода в том, что он содержится в локальной политике и не будет отменен в следующий раз. yum update. Минус в том, что он предоставляет более широкие разрешения, чем необходимо; httpd может связываться и подключаться к любому порту.

«Узкое» решение

Альтернативой привязке является использование следующей команды для добавления нашего настраиваемого порта в список http_port_t:

semanage порт -a -t http_port_t -p tcp (настраиваемый номер порта)

Я знаю, что могу увидеть список портов в http_port_t, используя semanage port -l | grep http_port_t, но я не знаю, где хранится этот список, и не знаю, будет ли следующий yum update с новой политикой перезапишет список.

Альтернативой для подключения является использование следующей команды для создания нового списка портов:

порт semanage -a -t ajp_port_t -p tcp 9010

а затем создайте локальную политику со следующим:

разрешить httpd_t ajp_port_t: tcp_socket {name_connect};

Как и в случае с расширенным списком http_port_t, я не знаю, ajp_port_t list переживет установку новой целевой версии политики.

semanage создает новые модули, которые не контролируются пакетом политик. При обновлении пакета политики эти модули останутся и будут применены к новой политике при ее загрузке.