什么是PHP安全模式GID?
根据safe_mode_gid上的PHP安全模式文档:
By default, Safe Mode does a UID compare check when opening files. If you want to relax this to a GID compare, then turn on safe_mode_gid. Whether to use UID (FALSE) or GID (TRUE) checking upon file access.
对于在Web服务器上运行的PHP脚本,UID(用户标识符)检查和GID(组标识符)检查之间有什么区别?
解决方案
回答
安全模式UID检查用于防止用户访问其他人的文件。 GID用于防止GROUP OF用户访问其他GROUPS文件。
回答
这只会使我们在Web服务器设置中具有更多的灵活性。使用safe_mode_gid,我们应该能够为系统上的每个用户运行单独的PHP / httpd进程,但是只要每个共享文件都以同一组(GID)和共享文件运行,则每个进程都可以读取某些共享文件归此群组所有。
回答
例如,网络服务器的用户名和组为apache:www,
如果我们将其设置为检查UID,则php进程将只能访问用户apache拥有的任何文件。因此,如果系统上正在运行其他Web服务器,例如具有用户名和tomcat:www组的tomcat,则tomcat进程创建的任何文件都将无法被php访问,因为它属于tomcat用户。
但是,如果我们改为使用GID检查,则Tomcat进程将可以读取Tomcat进程创建的文件,因为属于同一www组
回答
大多数答案都不完全正确或者详细...不要忘了safe_mode
检查SCRIPT的所有者是否与我们要访问的文件的所有者相匹配。它与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进程可以访问其他用户文件。 safe_mode_gid
。
实际上,我们应该结合使用" safe_mode_gid"和" open_basedir"并将用户的位置设置为" open_basedire"值来避免这种情况。
高温超导