2008-08-11 257 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