澄清:web root的apache程序的權限和所有權
我已經閱讀了很多關於正確/安全的文章(1)所有權和(2)對 apache 服務的 Web 可訪問目錄中的目錄和文件的訪問權限(例如
/var/www/
)。要麼我很容易混淆,要麼周圍有很多混淆/矛盾的建議。常見的 CMS,如 drupal、wordpress 等,通常推薦
755
用於目錄、644
文件。但是,還建議將 Web 根目錄 (ie) 中所有內容的 apache 程序授予組所有權chown -R :www-data /var/www/
。(1)第一個問題:假設組中的目錄和文件的所有權
/var/www/*
屬於,www-data
並且像往常一樣,apache程序使用者www-data
是該組的唯一成員。同時,目錄和文件的使用者所有權/var/www/*
屬於linux系統上屬於該sudo
組的普通使用者(例如somesudouser
)。這給了我們類似的東西:---------- 1 somesudouser www-data 3012 Jan 10 13:46 some-file.php d--------- 16 somesudouser www-data 12288 Jan 10 13:25 some-directory/
鑑於上述所有權結構,“其他”的訪問權限肯定可以設置為
0
;例如750
對於目錄,740
對於文件,這不會阻止 apache 正確地提供這些文件以響應瀏覽器請求:-rwxr----- 1 somesudouser www-data 3012 Jan 10 13:46 some-file.php drwxr-x--- 16 somesudouser www-data 12288 Jan 10 13:25 some-directory/
這有什麼問題?我認為將“其他”權限設置為除了
0
(而不是通常推薦5
的目錄和4
文件)之外的任何內容都沒有意義,而且我看不出為什麼文件不應該將使用者所有權設置為7
(而不是經常推薦的6
)。我錯過了什麼?(2)第二個問題:當web根目錄和文件的組所有權屬於不包括apache程序的組時(例如
somesudouser:somesudouser
),只有“其他”時apache程序才能與web根目錄和文件互動訪問權限允許它。在安全性方面,以下任何一項是否有任何真正的優勢/劣勢:-rwx---r-- 1 somesudouser somesudouser 3012 Jan 10 13:46 some-file.php drwx---r-x 16 somesudouser somesudouser 12288 Jan 10 13:25 some-directory/
或者:
-rwxr----- 1 somesudouser www-data 3012 Jan 10 13:46 some-file.php drwxr-x--- 16 somesudouser www-data 12288 Jan 10 13:25 some-directory/
甚至:
-r-------- 1 www-data www-data 3012 Jan 10 13:46 some-file.php dr-x------ 16 www-data www-data 12288 Jan 10 13:25 some-directory/
(3) 最後是關於
w
權限的問題。假設 apache 程序具有文件的組所有權,並且該組的訪問權限為7
:----rwx--- 1 somesudouser www-data 3012 Jan 10 13:46 some-file.php
為什麼這是個問題?惡意的人可以劫持 apache 使用者,編輯
some-file.php
,從而在 linux 系統上執行惡意 php 嗎?這將如何完成?如果目錄具有相同的權限怎麼辦:
d---rwx--- 16 somesudouser www-data 12288 Jan 10 13:25 some-directory/
惡意的人會導致 apache 程序向這個目錄寫入新文件嗎?再次,這將如何完成?
謝謝。
(1)第一個問題:…像往常一樣,apache程序使用者www-data是該組的唯一成員…這有什麼問題?我認為將“其他”權限設置為除 0 之外的任何內容都沒有意義(而不是通常推薦的目錄 5 和文件 4)
首先將自己作為系統管理員/開發人員添加為
www-data
組成員是一個非常好的和有效的想法,因為它允許您使用由網路伺服器創建的文件和文件夾。如果您的網路伺服器文件根權限是這樣設置的,在目錄上使用 setgid 位,您可以使用網路伺服器創建的文件和文件夾,並且由於您共享組所有權(並假設 umask 為 002),網路伺服器可以在完全訪問權限下正常執行到您創建的文件和文件夾,ftp’ed,創建等。
在這種情況下,您是對的,將其他位設置為 0 是明智的,因為其他 UNIX 帳戶不應該對文件根目錄有任何訪問權限。
我懷疑您的 CMS 文件建議允許其他人至少閱讀是因為大多數非專業管理員的知識不足以設置 setgid 等,因此對於 www-data 擁有的文件,您將是其他人-這將在至少允許您讀取文件,反之亦然,伺服器與您的文件有關。
(2)第二個問題:當web根目錄和文件的組所有權屬於不包括apache程序的組時
它可以取決於目錄的用途,以及網路伺服器是否需要對其進行寫訪問才能執行。通常,您應該只給網路伺服器執行所需的足夠權限,但如果網路伺服器確實需要權限,理想情況下應該通過所有權或組角色分配。如果您授予世界讀/寫訪問權限,以便您的網路伺服器可以讀/寫,那麼您將允許其他 UNIX 使用者帳戶具有相同的自由。例如,共享系統上的那些其他“鄰居”不應該能夠訪問您的文件,但是當系統管理員滑倒時偶爾可以,是的,我看到了這種情況。
(3) 最後是關於 w 權限的問題。假設 apache 程序擁有一個文件的組所有權,並且該組的訪問權限為 7:
嗯,是的,這幾乎是你問題的主要來源,你有一個連接到網際網路的網路伺服器 - 這將不斷受到濫用,壞人試圖劫持網路伺服器做他們想做的事 - 這可能涉及文件文件根目錄和網站內的操作,例如
- 索引/探索目錄
- 寫入/破壞文件 - 當網路伺服器只需要讀取這些文件即可執行時
請注意,作為一般安全問題,通過網路伺服器濫用文件系統可能會蔓延到作業系統的其餘部分,例如讀取密碼等。因此,另外,您還有關於網路伺服器在文件根目錄之外查看敏感系統資訊、密碼、日誌等的權限問題.
關於文件根權限,配置良好的權限是什麼樣的?我會推薦
還有閱讀