PHP套接字绑定特权端口
我正在尝试绑定并侦听特权端口,但我一直收到此消息“权限被拒绝” 以下是我尝试过做的事情:PHP套接字绑定特权端口,php,sockets,Php,Sockets,我正在尝试绑定并侦听特权端口,但我一直收到此消息“权限被拒绝” 以下是我尝试过做的事情: chgrp www-data file.php chmod 770 file.php 为文件提供了正确的执行权限,但仍然没有任何内容 setcap cap_net_bind_service=+ep file.php 不起作用,可能是因为它不是可执行文件 posix_setuid(0) 已授予我的脚本根权限,但它没有更改脚本的用户id。它保持不变。您对文件权限和执行所需的权限存在误解,在本例中,绑定到低
chgrp www-data file.php
chmod 770 file.php
为文件提供了正确的执行权限,但仍然没有任何内容
setcap cap_net_bind_service=+ep file.php
不起作用,可能是因为它不是可执行文件
posix_setuid(0)
已授予我的脚本根权限,但它没有更改脚本的用户id。它保持不变。您对文件权限和执行所需的权限存在误解,在本例中,绑定到低于1024的端口号 文件权限仅处理可以读取和写入文件的用户。即当您这样做时:
chmod 770 file.php
您允许file.php按所有者和组进行rw,但组外的用户无权访问
在这种情况下,您需要一个特权用户来执行文件根目录,因为它是唯一能够绑定到特权端口的帐户。然而,让PHP靠近根目录是一种安全风险,超出了这个问题的讨论范围。因为您需要root用户,所以最好允许运行web服务器的标准非特权用户仅在需要时获得具有root权限的shell。然后在这个私有shell中触发脚本
下面是一个项目,它允许PHP获取一个真正的Bash shell并作为root用户与之交互。在这里获取:
下载后,您只需使用以下代码:
$shell = \MTS\Factories::getDevices()->getLocalHost()->getShell('bash', true);
$return1 = $shell->exeCmd('php /full/path/to/file.php');
这个程序看起来像什么?它叫什么名字?更改文件的所有权或权限将不允许它执行通常无法执行的操作。如果有任何程序可以调用posix_setuid0,那么事情将变得非常混乱!这个脚本正在被jqueryajax调用调用,这个脚本应该监听这个端口并与它监听的w/e进行呼应,但是我需要先绑定和监听这个脚本。是的,如果任何程序可以更改权限,事情会变得非常混乱。你能显示你用来执行脚本的命令吗?