В 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
создает новые модули, которые не контролируются пакетом политик. При обновлении пакета политики эти модули останутся и будут применены к новой политике при ее загрузке.