抓住這一點,我的頭似乎很基礎。通過PHP/Apache編寫的文件不尊重目錄setgid位
我有一個基於PHP的內容管理系統爲我們的網站編寫的承包商。其中一項功能是能夠上傳要在網站各個位置顯示的圖像(如產品庫)。所有這些上傳的圖像都存儲在一個名爲「附件」的特定目錄中。
drwxrwsr-X 4 WWW ftpusers中4096 10月10日14:47附件
正如你可以看到我已經得到了setgid位上DIR設置,以便將寫入任何文件都會有一羣用戶(如FTP用戶)誰需要訪問這些文件將能夠修改/覆蓋它們。我已經爲Apache設置了umask,以便將文件寫入羣組可寫。
當我嘗試這與創建在該目錄中的新文件系統中的任何用戶,它正確地繼承了集團母公司。當通過在Apache中運行的PHP創建新文件時,它始終擁有apache.apache所有權。 Apache似乎忽略了setgid位,我認爲它不能完成,因爲這是由文件系統完成的。下面是一個文件I上傳:
-rw-RW-R-- 1阿帕奇阿帕奇30536 10月10日14時43分209
我無法測試作爲apache用戶直接,因爲它不具有登錄shell指定(出於明顯的安全原因)。
我可以通過添加ftpusers中組到Apache組獲得相同的權限功能,但這似乎從安全角度來看並不明智。
我確實發現了一件似乎可能與之相關的東西 - 我已經驗證的php安全模式已關閉/etc/php.ini,雖然我不積極,但我發現了php.ini文件Apache中的mod_php正在使用。 php腳本使用move_uploaded_file();據我所知,沒有什麼花哨的權限是在PHP代碼中完成的。
我最好的猜測是,這是出於安全的故意限制,但我無法找到任何東西,似乎表明,是這種情況。
使用Apache 2.2.17和php 5.2.16運行CentOS 5.6。
任何人都有線索?
之前問過那個問題,建議是使用move_uploaded_file()手動複製文件。請參閱http://stackoverflow.com/questions/6232759/phps-move-uploaded-file-does-not-respect-setgid –