PHP套接字绑定权限端口

时间:2017-03-20 17:53:21

标签: php sockets

我正在尝试绑定并侦听权限端口但是我一直收到此消息“Permission denied”

以下是我尝试过的事情:

setcap cap_net_bind_service=+ep file.php

为文件提供正确的执行权限,但仍然没有

posix_setuid(0)

不起作用,可能是因为它不是可执行文件......

ActiveModel::Validations

获得我的脚本root权限,但它没有更改脚本的用户ID。它保持不变。

1 个答案:

答案 0 :(得分:1)

您对文件权限和执行所需的权限存在误解,在这种情况下绑定到低于1024的端口号。

文件权限仅处理可以读取和写入文件的人员。即当你这样做时:

chmod 770 file.php

您允许file.php按所有者和组进行操作,但不允许该组外的用户访问。

您需要的是执行文件的特权用户(在这种情况下为root,因为这是唯一能够绑定到特权端口的帐户)。但是让PHP靠近root是一个安全风险(在这个问题的范围之外)。由于您需要root,因此您最好的选择是允许运行Web服务器的标准(非特权)用户仅在需要时获取具有root权限的shell。然后在此特权shell中触发您的脚本。

这是一个允许PHP以root身份获取真实Bash shell并与之交互的项目。在此处获取:https://github.com/merlinthemagic/MTS

下载后,您只需使用以下代码:

$shell    = \MTS\Factories::getDevices()->getLocalHost()->getShell('bash', true);
$return1  = $shell->exeCmd('php /full/path/to/file.php');