2008-08-11 255 views
6

按照PHP Safe Mode Docs上safe_mode_gid选项:什么是PHP安全模式GID?

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

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

回答

1

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

2

这只会让你在你的web服务器设置中有更多的灵活性。使用safe_mode_gid,您应该能够为系统上的每个用户运行单独的PHP/httpd进程,但只要它们都以同一组(GID)和共享文件运行属于这个组。

2

例如Web服务器的用户名和组阿帕奇:WWW

如果您将检查UID,PHP进程将只能访问用户阿帕奇拥有的任何文件。因此,如果您的系统上运行了另一个Web服务器,例如tomcat的用户名和组为tomcat:www,由tomcat创建的任何文件都不会被php访问,因为它由tomcat拥有用户。

但如果改用GID检查,由Tomcat进程所创建的文件将是由PHP进程可读,因为属于同一WWW

1

大多数的答案是不完全正确或详细.. 。不要忘记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