我正在尝试绑定并侦听权限端口但是我一直收到此消息“Permission denied”
以下是我尝试过的事情:
setcap cap_net_bind_service=+ep file.php
为文件提供正确的执行权限,但仍然没有
posix_setuid(0)
不起作用,可能是因为它不是可执行文件......
ActiveModel::Validations
获得我的脚本root权限,但它没有更改脚本的用户ID。它保持不变。
答案 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');