SELinux 端口类型为用户 PHP 内置网络服务器保留端口

SELinux 端口类型为用户 PHP 内置网络服务器保留端口

我正在尝试运行一个使用 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

如果解决方案对您不起作用,请添加更多详细信息,以便我可以添加更多解决方案。

相关内容