什么是PHP安全模式GID?

时间:2020-03-05 18:38:58  来源:igfitidea点击:

根据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"值来避免这种情况。

高温超导