什么是PHP安全模式GID?

时间:2008-08-11 15:12:54

标签: php unix

根据safe_mode_gid上的PHP Safe Mode Docs

  

默认情况下,安全模式在打开文件时会执行UID比较检查。如果你想放宽这个GID比较,那么打开safe_mode_gid。是否在文件访问时使用UID(FALSE)或GID(TRUE)检查。

对于在Web服务器上运行的PHP脚本,UID(用户标识符)检查和GID(组标识符)检查之间有什么区别?

4 个答案:

答案 0 :(得分:2)

例如,网络服务器用户名和组是 apache:www

如果设置为检查UID,则php进程只能访问用户 apache 拥有的任何文件。因此,如果您的系统上运行了另一个Web服务器,例如使用用户名和 tomcat:www 组的tomcat,那么tomcat进程创建的任何文件都将无法被php访问,因为它归 tomcat 用户。

但是如果你改为使用GID检查,那么tomcat进程创建的文件将被php进程读取,因为属于同一个 www

答案 1 :(得分:2)

这将使您在Web服务器设置中获得更多灵活性。使用safe_mode_gid,您应该能够为系统上的每个用户运行单独的PHP / httpd进程,但只要它们都作为同一组(GID)和共享文件运行,就可以让每个进程读取一些共享文件。属于这个群体。

答案 2 :(得分:1)

安全模式UID检查用于防止用户访问其他人的文件。 GID用于防止一组用户访问其他GROUPS文件。

答案 3 :(得分:1)

大多数答案都不完全正确或详细...如果SCRIPT的所有者与您要访问的文件的所有者匹配,请不要忘记safe_mode。它与httpd user:group无关。

例如,您的httpd可以apache:daemon运行,您的脚本由some_user:users拥有,而您想要写入some_other_user:users的文件。

如果您未激活safe_mode_gid,脚本将无法访问该文件,因为用户不匹配。

当脚本创建文件夹然后尝试在此文件夹中创建文件时,这是一种常见现象。

文件夹创建成功,因为父文件夹由与创建它的脚本相同的用户拥有(很可能是由“some_user”上传)。

但是,创建的文件夹现在归httpd用户所有,假设为apache:daemon

如果safe_mode处于活动状态,您将无法在此文件夹中创建文件,因为脚本所有者(some_user)与文件夹所有者(apache)不匹配

即使您激活safe_mode_gid,它也无效,因为脚本组是“用户”而文件夹组是“守护进程”。

最佳解决方案是为ftp用户和httpd设置相同的组。 不要忘记你也必须允许对“可写”文件夹上的组进行写访问,这样安全性较低,因为所有用户都在同一个组中,httpd进程可以访问其他用户文件,因为你激活了{ {1}}。

您实际上应该合并safe_mode_gid + safe_mode_gid并将用户的主页设置为open_basedir值以避免这种情况。

HTH