如何使用動態虛擬主機進行共享虛擬主機設置?
我們正在建構一種共享託管網路伺服器設置,但一切都由 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 腳本。