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

如何将PHP代码限制到特定文件夹?,php,directory,limit,Php,Directory,Limit,我正在为我的学生设置一个Web服务器,让他们在上面试用php代码。 在Web服务器上,我将为每个学生设置一个文件夹,我不希望学生上传到文件夹中的代码更改/读取/执行学生文件夹之外的文件 在不为每个学生设置VPS的情况下,是否可以解决此问题?是您想要的吗?如果是,这是一个php.ini设置。为了将其放入每个virtualhost部分的web服务器配置中,我们需要知道: 您使用什么web服务器 如何为每个学生配置虚拟主机 如果每个学生都有一个单独的配置和虚拟主机,请考虑添加 php_admin_va

我正在为我的学生设置一个Web服务器,让他们在上面试用php代码。 在Web服务器上,我将为每个学生设置一个文件夹,我不希望学生上传到文件夹中的代码更改/读取/执行学生文件夹之外的文件

在不为每个学生设置VPS的情况下,是否可以解决此问题?

是您想要的吗?如果是,这是一个
php.ini
设置。为了将其放入每个virtualhost部分的web服务器配置中,我们需要知道:

  • 您使用什么web服务器
  • 如何为每个学生配置虚拟主机
  • 如果每个学生都有一个单独的配置和虚拟主机,请考虑添加

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

    对于virthost配置,Marc B建议了一个chroot监狱——但与VPS一样,这实际上需要为每个学生运行至少单独的FPM池

    一个更简单的解决方案是使用open_basedir功能将脚本约束到它们自己的目录树。您可以在Web服务器配置中以每个目录为基础启用此功能,但我认为没有一种简单的方法可以映射由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>
    
     ...
    
    
    php_admin_value open_basedir“/home/Gurgy/”
    php_admin_value open_basedir“/home/MarcB/”
    ...
    
    (这可能值得再问一个关于Serverfault的问题,看看是否有人知道解决这个更具体问题的更好方法)

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


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

    我认为最好的方法是htaccess,由于php代码只能使用
    .php
    .phtml
    文件扩展名运行,因此您可以确保以这些扩展名结尾的文件可以在
    文件夹中运行,以供学生使用,并且文件夹外会提交错误的请求http代码不是真正的编程问题。这是更多的服务器配置。但是你可以尝试使用PECL的Runkit_沙箱,或者类似的东西?免费计划对一个学生来说应该足够了。@iam解码器这里关注的是一个学生的程序可以读取另一个学生的源代码。一个叛逆的PHP脚本可能会造成很多混乱。这两者的结合可能会造成混乱。这个设置会在.htaccess文件中设置吗?@tadman:使用suphp和限制性权限策略就足够了,不需要使用open_basedir,但是SUPPP只能作为CGI运行—性能很差。@Gurgy:在学生可以访问的文件中应用约束有点傻。说真的……我只是尽了最大努力使用mpm_itk_模块,让所有虚拟主机以不同的用户身份运行,仅限于其文件夹。这是如此简单,更有效!