[英]OpenBSD - PHP (chroot) - exec() cannot execute statically linked binary
我的私人主页使用 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()
。
我找到了解决办法。
在 OpenBSD 的默认配置中, httpd
和PHP
在chroot
运行。 将使用默认目录/var/www
并且/var/www/bin
中只有少数应用程序。 也缺少默认的 shell,不幸的是 PHP 的exec
需要shell。 因此出现错误127
(未找到命令)。
一个快速而肮脏的解决方案是在 chroot 中复制/bin/sh
(静态链接):
$ cp /bin/sh /var/www/bin
现在 PHP 的exec
命令应该可以在 OpenBSD 上运行了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.