我正在尝试运行一个使用 PHP 内置 Web 服务器的应用程序。由于系统上运行的 SELinux,它拒绝了权限。据我所知,当普通用户运行 PHP 内置 Web 服务器时,没有针对该服务器的策略。
这是我想要做的输出和示例......
$ php -S localhost:32322
[Sun Jan 5 04:38:24 2020] Failed to listen on localhost:32322 (reason: Permission denied)
我一直在 Google 上寻找和搜索,但找不到可以让它工作的端口类型。
运行 PHP 网络服务器的用户处于user_u
上下文中。
答案1
如果不知道政策详情,很难正确回答您的问题。请求的操作可能需要特殊/自定义 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
该端口未被注册/使用。
# 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
#
答案2
请添加更多带有日志的详细信息来证明这是 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
如果解决方案对您不起作用,请添加更多详细信息,以便我可以添加更多解决方案。