如何跨本地和遠端伺服器設置使用者、所有權和權限?
在過去一年左右的時間裡,我一直在學習 Linux 作業系統,但我仍然對不同配置的權限有何不同感到非常困惑。我正在嘗試設置我的本地開發環境,這樣做我注意到在生產 VPS (CentOS) 上,我的文件/目錄權限的行為與我的本地設置 (Mint) 不同。
遠端伺服器文件結構已設置,其中所有者和組
myuser:myuser
,目錄的 rwx 權限設置為 755,文件的權限設置為 644,可以很好地滿足網站的要求。但是,我必須將www-data:www-data
某些文件夾的所有權和權限更改為 777 才能使其在本地工作。我已將 myuser 添加到 Apache 組,但問題仍然存在。這讓我相信我的本地 shell 使用者與我的本地 Apache 使用者不同,並且在遠端系統上,shell 和 Apache 使用者是相同的。這是正確的嗎?
我擔心更改這些設置會帶來安全隱患。我讀過你不應該給 Web 伺服器寫訪問權限。但是,drupal 需要在名為“files”的文件儲存庫目錄中使用它,儘管遠端系統文件由
myuser:myuser
(並且如果該使用者是 Apache 使用者)擁有,那麼這是否意味著 Web 伺服器仍然具有寫入權限?那麼是什麼決定了這些使用者應該如何設置呢?我假設我將更改 Apache 執行使用者和/或組,但有人可以解釋這樣做的方法和最佳實踐嗎?相同的規則是否應該適用於本地與遠端?
你基本上是在問兩個不同的問題。
- 如何在本地系統上設置權限以鏡像生產系統?
您需要知道伺服器配置 - 在這種情況下,它包括 http 守護程序(
httpd
在這種情況下也稱為 Apache)的配置 - 通常在/etc/httpd
或中找到/etc/apache
。您還需要知道執行什麼憑據守護程序。然後您應該能夠以完全相同的方式或以相同的方式有效地設置您的本地權限(即,當守護程序請求文件時,不同的使用者/組名但相同的訪問權限), 2. HTTP 守護程序的寫權限可以嗎?依靠。一般來說,編寫一個守護程序越少越好。另一方面,在大多數情況下(除非提供靜態/只讀內容),它是不可行的。如果是這種情況,有幾種強化系統的方法:
- 在特殊使用者下執行守護程序,該使用者僅對文件根目錄具有讀取權限,僅在必要時才具有寫入權限(擴展 ACL 實用程序
getfacl
/setfacl
是您的朋友)。在 Linux 上,您還可以使用其他安全模型 (GRSecurity/SELinux/AppArmor/…)。- 正確編寫的數據處理 - 對虛假輸入的理智處理。在這種情況下,“理智”的意思是“不要寫任何東西”。
- 通過“代理”進行寫訪問 - 擁有執行部分(在單獨的過程中經常使用的MVC 模型中的模型不會損害安全性(但必須正確實施才能有任何好處)。