限制用户使用 PHP 执行 shell 命令

信息安全 php 服务器
2021-08-20 06:09:37

假设我有共享主机,我想保护那个地方,不执行 shell 命令。我已经安装了 suphp,以便用户可以单独执行 PHP。我还做了一些其他的事情来保护服务器(php.ini 中的 basedir 和其他推荐设置)。

但是问题仍然存在:(我可以从其他网站执行和读取配置文件)

<?php echo exec('cat /var/www/website/config.php'); ?>

如果我禁用 exec 功能,还有其他方法可以从服务器中找出敏感信息。

我能做什么?我可以为特定用户禁用 unix shell 命令,这会生效吗?

编辑:我已经更改了 bin 754 的权限,在它是 755 之前,现在用户无法使用 PHP 运行 shell 命令。这是一个解决方案吗?

2个回答

禁用 exec 和 suexec,启用 open_basedir 并基本上遵循这篇文章中的每一个建议

您提到still there are other ways to...如果在阅读该帖子后您仍有问题或弱点,请在此处或 Serverfault 中发布

我已经更改了 bin 754 的权限,在它是 755 之前,现在用户无法使用 PHP 运行 shell 命令。

我认为,这是一个有趣的解决方案。但是在这种情况下,安全规则的分离对于特定用户来说并不方便。

我想建议其他一些方法:

  1. 运行 apache 作为chroot. 但它需要复杂的配置。它允许为每个虚拟主机(执行用户)创建“隔离”执行空间。在我看来,这里描述的很好的例子:Apache + Chroot + FastCGI + PHP FAQ

  2. 在 Docker 容器中运行 apache 和 php。它是用于虚拟主机隔离的更现代的解决方案。但它也需要复杂的配置。

  3. 通过disable_functionsin 中的指令禁用潜在的不安全功能php.ini这是更简单且不太安全的方式。例如:

    disable_functions=dl,system,exec,passthru,shell_exec,stream_select,popen,proc_open,proc_nice,ini_set

可以在此处找到潜在的不安全功能:安全模式限制/禁用的功能