Есть ли способ в SELinux заставить Linux разрешить программе связываться с номером порта ниже 1024?
Предполагая, что у вас есть соответствующий модуль политики для приложения (назовем ваше приложение «foo»), вы можете сделать одно из двух. Вы либо определяете foo_port_t
введите политику, разрешите приложению доступ к ней, например:
allow foo_t foo_port_t:tcp_socket name_bind;
и используйте что-то подобное, чтобы обозначить фактический порт
semanage port -a -t foo_port_t -p tcp 803
Это потребует TCP-порт 803 для вашего приложения. Однако на большинстве портов ниже 1023 уже есть метки, и вы не можете пометить порт, файл и т.д. несколько раз.
Итак, вариант два: вы можете разрешить своему приложению связываться с портом с другой меткой, поместив такие строки в свой модуль политики:
require {
type http_port_t;
}
allow foo_t http_port_t:tcp_socket name_bind;
Это позволит вам привязать приложение к любому порту, у которого есть http_port_t
(имеется в виду 80, 443, 488, 8008, 8009 и 8443). Вы можете узнать, какую метку имеет порт (803 в этом примере), который вы хотите использовать, с помощью этой команды:
semanage port -l | grep 803
Запустите его как root или sudo
Это. Вы должны использовать root только для тестирования, а не в продакшене. Ядро не позволит вам открыть порт ниже 1024 (известные порты) без этих разрешений. Это не имеет ничего общего с SELinux, а связано с ядром.
Это не SELinux, который не позволяет вашей программе связываться с привилегированными портами, это ядро Linux. Вы можете перенаправить порт с желаемого порта на непривилегированный порт и запустить приложение на непривилегированном порту. Это безопасно и разрешено SELinux.
В нашем магазине и по опыту мы обнаружили, что лучше всего отключить SELinux. Я знаю, что некоторые люди сочли это полезным, а мы - нет.
Мы отключаем все это в / etc / sysconfig / selinux (или / etc / selinux / config) с SELINUX = disabled
Проблемы, с которыми мы столкнулись с SELinux, были настолько многочисленными и вызвали столько лишних часов, что оно того не стоит.