如何為 FTP 建立的檔案和目錄授予 Apache 讀寫它們的正確權限?

如何為 FTP 建立的檔案和目錄授予 Apache 讀寫它們的正確權限?

我更喜歡 Windows,所以請原諒我對這個基本 Linux 問題的無知。

我正在維護一台 Linux (Debian) 伺服器,它只安裝了 Apache2 和 vsftp。

正在發生的事情是,我一直在與誰擁有文件和資料夾進行鬥爭,但似乎無法正確處理。

到目前為止,這是我的理解:

  • www-數據使用者需要資料夾和檔案的所有權,因為 /var/www/html 下的所有檔案都運行腳本,需要它們寫入其資料夾。當然,它需要能夠透過 http 提供頁面服務。
  • 我的 ftp 用戶(我們稱之為ftp用戶)還需要寫入 /var/www/html 資料夾(遞歸)的權限,因為我需要能夠上傳新檔案。

考慮到這一點,我創建了一個名為ftp和www並將所有資料夾和檔案新增至該群組。這在某種程度上起到了作用......

我幾乎處於正確的位置,除了使用我的 FTP 用戶端創建的任何新資料夾都具有錯誤的權限(我可以透過在 FTP 用戶端下更改它們來修正),但 www-data 無法寫入它們因為它們的所有者是ftp用戶我最終不得不透過 SSH 登入並運行 chown 到 ftpandwww 組,以便他們都滿意。

如何讓我在 FTP 下建立的所有新資料夾具有正確的權限 (774) 並自動歸其所有ftp和www群組到我可以透過網路上傳和服務(具有寫入權限),而不必每次都進入並 chown 所有新資料夾和檔案?

答案1

使用設定GIDWeb 根目錄的權限,並將其傳播給子目錄。

當您在目錄上套用 SetGID 時,該目錄中的所有新項目都會使用其父級所擁有的相同群組來創建,無論使用者的預設群組成員身分為何。

若要將 SetGID 套用至檔案系統對象,請chmod在權限代碼前面使用 2。
(例如:740 => 2740)。

我在許多 Samba 共用上使用 SetGID,以便檔案始終具有所有者群組Users,並且該群組的任何成員都可以讀取檔案(我通常使用2750這樣只有所有者用戶才能寫入檔案)。

根據您的情況,請執行如下所示的命令(將 XXX 替換為您所需的權限):

sudo chown -R  root:ftpandwww /var/www
sudo chmod -R 2XXX /var/www 

然後新的文件和資料夾將具有所有權,例如ftpuser:ftpandwww.

編輯:

根據您的用例,SetGID 可能足以解決您的問題,但如果您持續存在問題,由於群組權限不正確(但所有權是正確的),一個或另一個使用者被拒絕寫入,那麼您最好的選擇是設定A為建立檔案的使用者自訂 UMASK

如果您在為使用者設定 UMASK 時遇到困難(因為它是守護程式),請檢查此執行緒的選項設定守護程序使用者的 UMASK

007如果您希望群組成員能夠寫入和刪除文件,並且非所有者沒有任何權限,我會推薦使用該遮罩。

相關內容