2011-06-02 189 views
3

我有一個PHP Web應用程序(在Apache/Linux上運行),除其他外,它允許瀏覽Web服務器上的本地文件。由於Apache作爲特殊的「www」用戶運行,因此PHP可以訪問「www」可以訪問的所有內容,無論用戶登錄到應用程序。根據登錄用戶的訪問權限限制PHP的文件訪問

根據登錄用戶的Unix文件系統權限,限制文件訪問的最佳方式是什麼?理想情況下,我可以產生一個新的進程,用戶ID是登錄用戶,但我不確定這是否可能。或者,是否有標準的PHP庫在某處執行權限檢查和訪問文件?

回答

0

你可以看看在http://httpd.apache.org/docs/2.0/suexec.html它應該做你需要什麼,而不需要讓用戶和權限的單獨lsit在aplications。

據我所知,這個擴展是在一些(如果不是全部的話)共享主機服務上實現的,以控制資源在用戶之間的分配方式。

這將導致腳本沒有通過www-data(但由系統用戶)執行,並且PHP不作爲模塊運行(通過CGI/fastCGI機制)。

+0

謝謝,我認爲這正是我所期待的。 – Stan 2011-06-02 18:32:15

0

這可以通過三個步驟來完成:

  1. 創建重寫規則(通過的.htaccess或者Apache的配置文件),爲您的「本地文件」的所有請求重定向到一個PHP腳本。
  2. 檢查腳本中用戶的身份驗證狀態。
  3. 如果用戶通過身份驗證,請使用該腳本加載和輸出文件。
+0

第1步似乎是確保在應用程序中未創建意外訪問漏洞的好方法,但第2步仍然是我不清楚的部分。如何在訪問本地文件時檢查用戶的身份驗證狀態?我如何模仿不同用戶的各種PHP許可檢查功能(如is_writeable,is_executable等)? – Stan 2011-06-02 14:05:58

2

我不明白你的意思了,因爲訪問該文件的用戶是PHP的用戶,而不是要求你的頁面(你是不是連接到用SSH服務器)

你的一般用戶可能希望在您的應用程序之上實施ACL來管理此權限。

當然Zend公司,並有解決方案:http://framework.zend.com/manual/en/zend.acl.html

+0

運行Apache服務器進程的用戶是一些通用的「www」用戶,它有權訪問所有本地文件。用戶「bob」登錄到應用程序,並請求查看本地文件。 Apache調用PHP腳本來檢索文件,並且當運行腳本的用戶是「www」時,它將文件顯示爲「bob」,無論「bob」是否可以訪問它。那有意義嗎? – Stan 2011-06-02 13:57:19

+0

是的,你仍然需要像ACL這樣的東西來管理它 – dynamic 2011-06-02 14:00:45