2012-02-27 38 views
1

我正在使用Zend_Form_Element_File()寫一個文件上傳。我在public目錄中創建了一個名爲users的目錄。當我加載文件時,我收到一個錯誤,說沒有找到頁面。我檢查目錄,看到權限是drwxr-xr-x。所以我將權限更改爲drwxrw-rw-並再次加載頁面。頁面正確加載。但是當我上傳一個文件時,它會再次產生一個錯誤。所以我最終將權限更改爲drwxrwxrwx,並且所有內容都正常運行。 我的問題是,我在做別人正在做的平常做法嗎?我發現讓一個目錄可執行是很奇怪的。 有人可以解釋我是否正確嗎?我只是學習Zend框架。我的目錄是否可執行?

回答

4

目錄必須如果一個程序應該能夠「輸入」它是可執行的。進入一個目錄基本上意味着訪問該目錄下的任何文件/目錄。

通過「讀取」訪問文件夾,您可以列出其內容 - 「寫入」訪問的功能非常明顯。

但是,出於安全原因,您應該檢查drwxrwx---770)是否不夠;通常你的用戶和網絡服務器共享一個共同的組。如果是這樣的話,就沒有必要給予任何「世界」的訪問權限。

將您的腳本作爲您的同一用戶運行會更好 - 通過使用不會太難的fastcgi,但是如果您在共享主機上,則通常沒有必要的訪問權限來執行此操作。

+1

實際上,不可執行目錄允許「瀏覽」目錄並列出其內容。一個目錄只需要可讀就可以遍歷它並訪問你知道完整路徑/文件名的子目錄/文件。 – 2012-02-27 15:48:28

+0

我認爲webserver是一個無法登錄並將權限降低到700或更低的帳戶。如果你與網絡服務器:網絡服務器,它會沒事(根據我的經驗) – Woot4Moo 2012-02-27 15:49:29

+0

@MarcB:這是錯誤的。這裏是證明:https://paste.aeum.net/show/47/ - 雖然這裏面沒有訪問文件,但訪問'.'和'..'與訪問文件沒有區別。 – ThiefMaster 2012-02-27 15:51:18

0

通常,當您在目錄上設置權限時,它會在大多數情況下將其級聯到通過擴展ACLS內的文件。我立即看到的問題是,你已經授予世界訪問權,這是一個壞主意。唯一需要對目錄權限(最多700)的用戶將成爲您的Web服務器。所以我會把安全性恢復到700。

+0

在大多數系統上,web服務器用戶不同於shell/ftp用戶。在這種情況下,該文件夾需要'770'甚至'777'才能通過php腳本進行寫入,除非它是由web服務器本身創建的(這會使其只讀到您的ftp/shell) – ThiefMaster 2012-02-27 15:49:13

+0

僅在閱讀時才存在問題訪問ftp/shell? – Woot4Moo 2012-02-27 15:50:57

+0

如果您想刪除某些內容:是的。除此之外,要在第一個位置創建文件夾,您需要授予父文件夾的組/世界寫入權限,然後在從您的PHP腳本創建文件夾後撤消它。不難,但仍然是一團糟。 – ThiefMaster 2012-02-27 15:54:32

相關問題