Linux

如何為 WWW 文件夾設置 linux 權限?

  • July 8, 2019

更新摘要

/var/www 目錄歸其所有,root:root這意味著沒有人可以使用它,而且它完全沒用。由於我們都想要一個實際工作的 Web 伺服器(並且沒有人應該以“root”身份登錄),所以我們需要解決這個問題。

只有兩個實體需要訪問。

  1. PHP/Perl/Ruby/Python都需要訪問文件夾和文件,因為它們創建了許多文件夾和文件(即/uploads/)。這些腳本語言應該在 nginx 或 apache 下執行(或者甚至是一些其他的東西,比如 PHP 的 FastCGI)。
  2. 開發商

**他們如何獲得訪問權?**我知道以前有人在某個地方做過這件事。然而,有數十億個網站,您會認為會有更多關於這個主題的資訊。


我知道 777 是所有者/組/其他的完全讀/寫/執行權限。因此,這似乎不需要正確,因為它為隨機使用者提供了完全權限。

需要使用哪些權限,/var/www以便:

  1. 原始碼控制,如 git 或 svn
  2. 像“網站”這樣的組中的使用者(甚至添加到“www-data”
  3. 像 apache 或 lighthttpd 這樣的伺服器
  4. 和 PHP/Perl/Ruby

都可以在那裡讀取、創建和執行文件(和目錄)嗎?

如果我是正確的,Ruby 和 PHP 腳本不會直接“執行”——而是傳遞給解釋器。所以不需要對/var/www…中的文件執行權限?因此,似乎正確的許可chmod -R 1660

  1. 這四個實體可共享的所有文件
  2. 所有文件都錯誤地不可執行
  3. 完全阻止目錄中的其他所有人
  4. 將所有未來文件的權限模式設置為“粘性”

它是否正確?

**更新 1:**我剛剛意識到文件和目錄可能需要不同的權限 - 我在談論上面的文件,所以我不確定目錄權限需要是什麼。

**更新 2:**文件夾結構發生了/var/www巨大變化,因為上述四個實體之一總是添加(有時刪除)文件夾和子文件夾很多層次。他們還創建和刪除其他 3 個實體可能需要讀/寫訪問權限的文件。因此,權限需要對文件和目錄都做上面的四件事。由於它們都不應該需要執行權限(請參閱上面有關 ruby​​/php 的問題),我認為rw-rw-r--權限將是所需要的並且完全安全,因為這四個實體由受信任的人員(請參閱#2)和所有其他使用者執行系統只有讀取權限。

**更新 3:**這適用於個人開發機器和私人公司伺服器。沒有像共享主機這樣的隨機“網路客戶”。

更新 4: slicehost 的 這篇文章似乎最能解釋為 www 文件夾設置權限所需的內容。但是,我不確定使用 PHP 或 svn/git 執行的使用者或組 apache/nginx 以及如何更改它們。

**更新 5:**我(我認為)終於找到了一種讓這一切正常工作的方法(答案如下)。但是,我不知道這是否是正確且安全的方法。因此,我開始了賞金。擁有保護和管理 www 目錄的最佳方法的人獲勝。

經過更多的研究,似乎另一種(可能更好的方法)來回答這個問題,就是像這樣設置 www 文件夾。

  1. sudo usermod -a -G developer user1(將每個使用者添加到開發者組)
  2. sudo chgrp -R developer /var/www/site.com/以便開發人員可以在那里工作
  3. sudo chmod -R 2774 /var/www/site.com/這樣只有開發人員可以創建/編輯文件(其他/世界可以讀取)
  4. sudo chgrp -R www-data /var/www/site.com/uploads以便 www-data (apache/nginx) 可以創建上傳。

由於git以任何使用者呼叫它的身份執行,因此只要使用者在“開發者”組中,他們就應該能夠創建文件夾、編輯 PHP 文件和管理 git 儲存庫。

注意:在步驟(3)中:2774中的“2”表示為目錄“設置組ID”。這會導致在其中創建的新文件和子目錄繼承父目錄的組 ID(而不是使用者的主要組)參考:http ://en.wikipedia.org/wiki/Setuid#setuid_and_setgid_on_directories

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