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

Тип порта SELinux для резервирования порта для встроенного в PHP веб-сервера пользователя

Я пытаюсь запустить приложение, использующее встроенный веб-сервер PHP. Он дает разрешение, в котором отказано из-за того, что в системе запущен SELinux. Насколько мне известно, для встроенного веб-сервера PHP не существует политики, когда его запускают обычные пользователи.

Это результат и пример того, что я хочу делать ...

$ php -S localhost:32322
[Sun Jan  5 04:38:24 2020] Failed to listen on localhost:32322 (reason: Permission denied)

Я искал и искал в Google, но не могу найти тип порта, который позволил бы этой работе.

Пользователь, использующий веб-сервер PHP, находится в user_u контекст.

Не зная подробностей политики, будет сложно правильно ответить на ваш вопрос. Вполне вероятно, что для запрошенного действия может потребоваться специальный / настраиваемый модуль SELinux.

В конце концов, логическое selinuxuser_tcp_server может помочь вам решить вашу проблему.

В Fedora 31 похоже, что он делает то, что вам нужно: https://github.com/fedora-selinux/selinux-policy/blob/f31/policy/modules/system/userdomain.if#L1477-L1479

    tunable_policy(`selinuxuser_tcp_server',`
        corenet_tcp_bind_all_unreserved_ports($1_usertype)
    ')

В Fedora 31 с targeted policy порт не зарегистрирован / не используется.

# semanage port -l | grep unreserved
unreserved_port_t              sctp     1024-65535
unreserved_port_t              tcp      61001-65535, 1024-32767
unreserved_port_t              udp      61001-65535, 1024-32767
# semanage port -l | grep 3022
# 

Пожалуйста, добавьте более подробную информацию с журналами, чтобы доказать, что это проблема с Selinux, однако, поскольку вы заверяете, что это вопрос, это selinux linux, поэтому вы можете попробовать следующее:

Проверить порт разрешен или нет

semanage port -l | grep http 
Or 
sepolicy network -t http_port_t

Вы также регистрируете предупреждение, оно предложит вам команду, которую нужно запустить, чтобы разрешить разрешение.

sealert -a /var/log/audit/audit.log

Один пример разрешения порта

semanage port -a -t http_port_t -p tcp 32322

Добавьте дополнительные сведения, если решение не работает для вас, чтобы я мог добавить еще решение.