8

根据safe_mode_gid 上的PHP 安全模式文档:

默认情况下,安全模式在打开文件时会进行 UID 比较检查。如果您想将此放宽为 GID 比较,请打开 safe_mode_gid。是否使用 UID (FALSE) 或 GID (TRUE) 检查文件访问。

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

4

4 回答 4

2

这只会让您在 Web 服务器设置方面更加灵活。使用 safe_mode_gid,您应该能够为系统上的每个用户运行单独的 PHP/httpd 进程,但只要它们都作为同一个组 (GID) 和共享文件运行,则让每个进程能够读取一些共享文件归该组所有。

于 2008-08-11T16:05:07.310 回答
2

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

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

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

于 2008-08-28T01:46:35.883 回答
1

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

于 2008-08-11T15:30:23.667 回答
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值以避免这种情况。

高温高压

于 2010-09-23T11:48:18.083 回答