按照PHP Safe Mode Docs上safe_mode_gid选项:什么是PHP安全模式GID?
默认情况下,安全模式也UID比较检查打开文件时。如果你想放松一下GID比较,那么打开safe_mode_gid。是否在文件访问时使用UID(FALSE)或GID(TRUE)检查。
对于在Web服务器上运行的PHP脚本,UID(用户标识符)检查和GID(组标识符)检查有什么区别?
按照PHP Safe Mode Docs上safe_mode_gid选项:什么是PHP安全模式GID?
默认情况下,安全模式也UID比较检查打开文件时。如果你想放松一下GID比较,那么打开safe_mode_gid。是否在文件访问时使用UID(FALSE)或GID(TRUE)检查。
对于在Web服务器上运行的PHP脚本,UID(用户标识符)检查和GID(组标识符)检查有什么区别?
安全模式UID检查用于防止用户访问其他人的文件。 GID用于阻止一组用户访问其他GROUPS文件。
这只会让你在你的web服务器设置中有更多的灵活性。使用safe_mode_gid,您应该能够为系统上的每个用户运行单独的PHP/httpd进程,但只要它们都以同一组(GID)和共享文件运行属于这个组。
例如Web服务器的用户名和组阿帕奇:WWW,
如果您将检查UID,PHP进程将只能访问用户阿帕奇拥有的任何文件。因此,如果您的系统上运行了另一个Web服务器,例如tomcat的用户名和组为tomcat:www,由tomcat创建的任何文件都不会被php访问,因为它由tomcat拥有用户。
但如果改用GID检查,由Tomcat进程所创建的文件将是由PHP进程可读,因为属于同一WWW组
大多数的答案是不完全正确或详细.. 。不要忘记safe_mode
检查SCRIPT的所有者是否与您想要访问的文件的所有者匹配。它与httpd用户:组无关。
例如,您的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进程可以访问其他用户文件safe_mode_gid
。
实际上,您应该结合safe_mode_gid
+ open_basedir
并将用户的家庭设置为open_basedire
值以避免这种情况。
HTH