Apache-2.2

我的伺服器管理員希望我在目錄上設置公共寫權限

  • December 20, 2011

我對網路開發比較陌生,所以請耐心等待。

我主要是一名 iPhone 開發人員,但最近使用共享主機為其他人創建了一個站點。我可以在該站點上用 PHP 寫入文件,而無需考慮權限。

我正在為我正在製作的新應用程序部署 Web 服務,但進展並不順利。這裡最重要的區別是我使用的是別人的伺服器,並且只有 FTP/DB 訪問權限。

基本上,我有大量構成我的 CMS 的 PHP 文件,如下所示:

mysite.com/admin/manage_news.php
mysite.com/admin/manage_events.php

然後這些腳本要麼編輯數據庫,要麼編輯文件。他們可以很好地與數據庫互動,但是,我的腳本無法寫入文件系統。例如,他們可能會嘗試寫入以下文件:

mysite.com/data/img/event_1.png
mysite.com/data/somefile.txt

這在我的 MAMP 安裝(本地)上執行良好,但是一旦部署到伺服器,PHP 每次嘗試寫入時都會拋出錯誤……像這樣:

無法打開文件“../data/img/someimage.png”進行寫入。

所以我給執行伺服器的人發了電子郵件,他回來說:

它是否在公共許可下工作?(777)

而且,確實如此 - 但我對使用公共權限非常謹慎,所以再次立即禁用它。我給他發電子郵件說“我怎樣才能讓我的 PHP 腳本使用標準使用者權限編寫”,他說:

公開就好了

我認為這是域解析中某處的 ip 衝突,但我並不擔心。

然後我給他發電子郵件說“這肯定是不安全的”或類似的東西,他回復了以下內容:

現實情況是,有數以百萬計的網站,包括我管理的幾個在各種文件夾中都有 777 的網站,這只是一種生活方式。

誰能給我一些我可以給他的解決方案的想法?或者我可以做些什麼來避免使用 777?我真的不喜歡我的網站/服務上的任何文件夾都可以公開寫入的想法。

我非常感謝您的建議,因為我對 Web 伺服器知之甚少。

讓我們分解一下

您需要執行腳本的使用者在目錄上讀取、執行和寫入,所以它應該是:

7 = (r)ead,(w)rite,e(x)ecute

屬於同一組的其他使用者應該能夠執行目錄中的 php 文件,但不能寫入(原因很明顯);他們不一定需要閱讀 PHP 文件。因此,我們只需要提供執行權限:

1 = e(x)ecute

對大眾也是一樣。實際上,對於需要查看 php 和靜態文件的外部使用者來說,這就是您所需要的:

1 = e(x)ecute

所以最低限度應該是:

711

我用自己的配置確認了上述設置,所以它應該可以工作;但是,這是在預設網路使用者下。如果您使用 www 以外的登錄名進行上傳,則文件和目錄可能在不同的使用者下。在這種情況下,預設 Web 使用者可能無法讀取或寫入您擁有的文件。此時,您可能需要將預設 Web 使用者添加到您的組(系統管理員必須這樣做),然後為屬於該組的使用者授予讀取、寫入和執行權限:

771

那可能會奏效。要麼,要麼讓系統管理員將這些文件的使用者和組所有權更改為預設的 Web 伺服器使用者(但不是權限!)。如果這仍然不起作用,權限的範例輸出(類似於“目錄中的 ls -la”)將幫助我們進一步解決此問題。也就是說,只要您只需向公眾授予執行權限(或“其他”),從安全的角度來看你應該沒問題。

引用自:https://serverfault.com/questions/342134