【发布时间】:2021-10-19 04:08:00
【问题描述】:
我使用 OpenBSD 和 PHP 作为我的私人主页。出于教育目的(不要在生产中使用它),我必须尝试在chroot 中执行一个简单的Hello World 程序。静态链接二进制文件。但我总是得到结果127(找不到命令)。
我如何在 PHP 中执行命令:
<?php
$output = null;
$result = null;
echo getcwd();
exec("./foo", $output, $result);
var_dump($output);
var_dump($result);
?>
程序./foo 肯定驻留在当前工作目录中。文件权限也正确。
C中的程序:
#include <stdio.h>
int main(int argc, char *argv[])
{
fprintf(stdout, "foo: stdout");
fprintf(stderr, "foo: stderr");
return 42;
}
编译:
$ cc -static -o foo foo.c
PHP 的输出:
htdocs/example.org/www
array(0) {
}
int(127)
如果程序是动态链接的(缺少共享库),我会理解这种行为。
OpenBSD 的默认配置中是否启用了特定的安全功能,它不允许 PHP 执行二进制文件,或者有人可以解释为什么这不起作用?
也没有禁用/etc/php-8.0.ini中的exec()功能。
【问题讨论】: