如何将 PHP 代码限制到特定文件夹?

How can I limit PHP code to a specific folder?

我正在为我的学生设置一个网络服务器来试用他们的 php 代码。 在网络服务器上,我将为每个学生创建一个文件夹,我不希望学生上传到他们的文件夹的代码到学生文件夹之外的 change/read/execute 个文件。

有没有办法在不为每个学生设置 VPS 的情况下解决这个问题?

that 是您要查找的内容吗?如果是,这是一个 php.ini 设置。为了将其放入每个虚拟主机部分的 Web 服务器配置中,我们需要知道:

  1. 您使用什么网络服务器
  2. 如何为每个学生配置虚拟主机

如果每个学生都有单独的配置和虚拟主机,请考虑添加

php_admin_value open_basedir "/path/to/this/student/folder"

到 virthost 配置

Marc B 建议使用 chroot jail - 但与 VPS 一样,这实际上需要 运行 每个学生至少有单独的 FPM 池。

一个更简单的解决方案是使用 open_basedir 功能将脚本限制在它们自己的目录树中。您可以在每个目录的网络服务器配置中启用它 - 但我认为没有一种简单的方法来映射由 mod_userdir 计算的路径,即您需要很多

 <Directory "/home/Gurgy/public_html">
    php_admin_value open_basedir "/home/Gurgy/"
 </Directory>

 <Directory "/home/MarcB/public_html">
    php_admin_value open_basedir "/home/MarcB/"
 </Directory>

 ...

(这可能值得在 Serverfault 上进一步提问,看看是否有人知道解决这个更具体问题的更好方法)。

有一些漏洞允许您访问 open_basedir 限制之外的文件。符号链接错误已修复,但不确定 IMAP 漏洞。最好将 PHP 的最新补丁版本与 Suhosin 一起使用,并做一些进一步的研究。

话虽如此 - 除非它是一个非常短期的课程,否则您可能希望为他们提供一个 VM 映像,然后他们可以使用该映像来探索服务提供的其他方面。