Я пытаюсь запустить приложение, использующее встроенный веб-сервер 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
Добавьте дополнительные сведения, если решение не работает для вас, чтобы я мог добавить еще решение.