以 root 身份上傳到 Web 伺服器的文件不能被 Web 應用程序覆蓋
這是我的問題。我正在使用 PHP/MySQL 開發 Web 應用程序,但在設置需要使用的帳戶時遇到了一些問題。
開發工作站:WinXP SP3、Eclipse PDT
開發伺服器:Debian 6.0、Apache2、MySQL 5、XDebug
通過區域網路連接。
在開發過程中,我將需要測試的程式碼上傳到伺服器。我使用 GIT 和 ssh:root@myserver。
正如預期的那樣,這些文件最終歸伺服器中的 root 所有。
我的 Web 應用程序需要更新一些文件。為了允許我在伺服器中執行 chmod 以將文件的所有權更改為 www-data。這工作正常。
問題是每次我更改文件並再次上傳時,它都會恢復為 root 所有權,我必須手動將其更改回 www-data。
我認為這在生產環境中不會成為問題,因為我可以確保文件在上線時擁有正確的所有權。然而,開發過程是一個痛苦的過程。
我在想什麼:
1 - 我可能不應該使用 root 帳戶上傳。我嘗試使用使用者 www-data 通過 ssh 連接到伺服器。但是它要求輸入密碼,經過一番閱讀,我發現與 www-data 使用者混淆可能不是一個好主意。
2 - 我可能會為開發目的創建另一個帳戶並使用該帳戶上傳文件。問題是我不知道如何配置我的 Web 應用程序以在連接到伺服器和數據庫時使用該帳戶。
3 - 我可以將我的應用程序和數據庫配置為在開發環境中以 root 身份執行。這將解決問題。但是,如上面 2 所述,我不知道該怎麼做,而且我告訴我這不是一個好主意。
所以我正在尋找有關如何解決我的問題的建議。我可以選擇上述三種選擇中的任何一種(甚至是我沒有考慮過的第四種)。謝謝。
更新 - 2011-09-13
下面的響應(謝謝 cdp1337)中的一種解決方案是在我將文件上傳到開發伺服器時執行一個腳本來更新文件權限。就我而言,我可以跑
chown -R www-data:www-data *
在我網站的根目錄中。注意:這不在生產環境中,我們公司外部無法訪問開發 Web 伺服器。這不是部署到生產環境的解決方案。
還有其他想法嗎?謝謝。
1/2 - 是的,以非特權使用者的身份上傳數據會很好,但我發現自己在懶惰時也在做同樣的事情。
3 - IMO 從來都不是一個好主意,如果您沒有明確需要,您永遠不想以 root 身份執行應用程序。
否則,要回答您的問題,我建議您創建一個可以執行的建構腳本,該腳本將執行必要的過程來配置您的應用程序。許多人使用 ant 來執行此操作,但是一個簡單的 bash 腳本,其中包含一些 ‘chown’ 指令應該足以滿足您的需求。這樣,當您上傳數據時,您只需執行一個腳本,您就知道它已正確建構。
作為替代方案,您可以讓更新腳本自動從 git 拉入最新版本的應用程序並執行權限。這會將兩個步驟濃縮為一個。