2016-05-19 52 views
0

我使用PHP從這樣上傳的圖像創建文件創建文件:如何設置最低權限從PHP

$in = imagecreatefromjpeg($tempFile); 
imagejpeg($in, "images/", 100); 

這工作完全只有當我設置images目錄有世界寫權限:

drwxrwxrwx 2 foo foogroup images 

/etc/group包含:

foogroup:5134:www-data 

當我在網頁上運行<?php echo exec('whoami'); ?>時,我得到www-data

那麼爲什麼775組編寫)權限不起作用?

+0

暫時將權限保持爲777,並創建一個文件。它創建了什麼所有者和組?嘗試使用www-data而不是foogroup和775的權限。這是否會改變任何內容? – LSerni

+0

如果我將該組更改爲「www-data」,這意味着所有其他具有與「foogroup」相似的組的用戶都可以訪問這些文件。圖像權限'-rw-r - r-- 1 www-data www-data 130818 5月19日19:43 573e095cf2741.jpg' – maxisme

+0

我正在嘗試14.04LTS,無法重現此操作。你使用的是什麼平臺和版本? – LSerni

回答

0

要展開我以前的評論:您的服務器正在運行用戶www-data和組www-data。我們知道這一點,因爲當文件被創建時,它屬於該用戶和組。

按理說,在Unix的,這意味着,如果該目錄是由含有www-data一組擁有,並且該目錄是組可寫的,則該目錄可以由組www-data的任何用戶寫入。

現在,我們更改權限從

775 www-data foogroup 

775 www-data www-data 

我們可能有兩種情況:它工作,或者沒有。

如果它不起作用,那麼我們清楚地證明它不是重要的組 - 它必須是用戶。因此,對於我們的意圖和目的,因此必須是不同的,其來自www-datafoogroup

如果成功,它可能意味着,只要屬於該組是不夠的 - 這似乎是實際執行的檢查組更多的精確匹配

我懷疑的是,你的設置與我的不同(我相信,在Apache下有mod_php5),你的設置與我的不同(你的Ubuntu 14.04-LTS版本),並且你有一些「安全功能」個案從本質上取代了Unix文件系統權限檢查,並對其自身進行了更嚴格的檢查。 Then如果測試通過,則像往常一樣執行操作,如用戶www-data

所以,你可以運行其他測試,都與當前的非工作許可和工作777級權限,執行

shell_exec("touch images/test.jpg 2>&1"); 

輸出威力產量一些有用的信息。例如,我們可能會發現shell實際上是由另一個用戶運行的(775不工作,777不工作,但現在該文件由其他用戶擁有),或者PHP無法創建的文件是從調用的shell創建的通過相同的PHP(這將最終證明在PHP中有效的剋制)。

其他有用的信息:您正在運行FastCGI,CGI,Apache模塊,nginx,其他...?

0

如果您使用apache,請檢查httpd.conf文件Apache apache使用的用戶和組。我通過將用戶apache運行到目錄的所有者來解決類似的問題。