Apache-2.2

如何使用動態虛擬主機進行共享虛擬主機設置?

  • September 8, 2009

我們正在建構一種共享託管網路伺服器設置,但一切都由 ourdomain.com 上的網路應用程序管理,該應用程序具有預設的 apache 使用者(www-data)來訪問每個人的文件。

每個人都有一個使用者名,他們的 web_root 是

$$ some_root_folder $$/$$ user_name $$ 我們正在使用創建動態虛擬主機

http://httpd.apache.org/docs/2.0/vhosts/mass.html#xtra-conf

作為

[some_root_folder]/[user_name] user_name.ourdomain.com

我們的確是

chown 770 user_name:www-data -R [some_root_folder]/[user_name]

我們不希望創建單獨的虛擬主機,因為這需要在每次註冊時重新載入 apache(我會詢問您對在另一個條目上使用 mpm-itk 創建單獨的虛擬主機的意見)。

如果 user_michael 執行:

<?php echo file_get_contents(‘../user_george/index.php’); ?>user_michael.ourdomain.com/index.php

Michael 能夠讀取 George 的文件,因為這兩個目錄都屬於 www-data 使用者組(否則我們的 Web 應用程序無法修改它們)

所以: www-data 怎麼能修改邁克爾和喬治的文件,但他們不能修改對方的,給定上面的設置?

當您執行 file_get_contents 時,正在讀取 ../user_george/index.php 文件的使用者與 Web 伺服器(www-data)相同,而不是文件的所有者。

PHP 安全模式是此問題的解決方案,但已棄用。我建議查看本系列以獲取有關共享主機安全性的解決方案。

每次註冊後重新啟動 Apache 可能不是問題。請參閱優雅重啟

對於您的權限問題,如果您只需要 php 而不想執行 CGI,您可能需要查看PHP Safe Mode。它已棄用,不是最好的方法,但易於使用。

另一種方法是使用suPHP以 user_name 而不是 apache 使用者的身份執行 php 腳本。

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