根据safe_mode_gid上的PHP Safe Mode Docs:
默认情况下,安全模式在打开文件时会执行UID比较检查。如果你想放宽这个GID比较,那么打开safe_mode_gid。是否在文件访问时使用UID(FALSE)或GID(TRUE)检查。
对于在Web服务器上运行的PHP脚本,UID(用户标识符)检查和GID(组标识符)检查之间有什么区别?
答案 0 :(得分:2)
这将使您在Web服务器设置中获得更多灵活性。使用safe_mode_gid,您应该能够为系统上的每个用户运行单独的PHP / httpd进程,但只要它们都作为同一组(GID)和共享文件运行,就可以让每个进程读取一些共享文件。属于这个群体。
答案 1 :(得分:2)
例如,网络服务器用户名和组是 apache:www ,
如果设置为检查UID,则php进程只能访问用户 apache 拥有的任何文件。因此,如果您的系统上运行了另一个Web服务器,例如使用用户名和 tomcat:www 组的tomcat,那么tomcat进程创建的任何文件都将无法被php访问,因为它归 tomcat 用户。
但是如果你改为使用GID检查,那么tomcat进程创建的文件将被php进程读取,因为属于同一个 www 组
答案 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