2011-11-07 43 views
7

如何將類似功能的登錄設計爲使用suPHP的文件許可權。例如,如果我有一個網站www.example.com和以下兩個用戶擁有自己的主目錄,每個用戶都有一個php腳本test.php和一個validateUser.php腳本,該腳本屬於另一個用戶(root,www-data,apache ...) /home目錄。與suPHP一起執行登錄

 
/home/ 
├── validateUser.php 
├── user1 
│   └── test.php 
└── user2 
    └── test.php 

user1可以通過訪問www.example.com/user2/test.php訪問user2's腳本,反之亦然。相反,我想要的是使用類似mod_rewritevalidateUser.php的所有傳入請求。但是,這樣做會導致執行所有腳本作爲validateUser.php的所有者,而不是目標test.php腳本。

有沒有辦法在suPHP啓動之前調用一個php腳本,然後要麼允許suPHP繼續,要麼完全中止。


編輯這是我搭第二賞金。第一次給我古斯塔夫B/C他給了很好的partial answer。我會提到迄今爲止我所嘗試的,以及爲什麼他們沒有人爲我工作。

1)我嘗試使用mod_rewrite將URL重定向到validateUser.php,以登錄用戶,或調用他們想調用的任何腳本。問題是,我已經設置了我的虛擬主機,以便每個用戶都有自己的虛擬站點(例如,如果這是一種糟糕的設計方法,請隨意粗暴地指出),即www.user1.example.com,www.user2.example.com。因此,雖然OS看到如上的文件結構,網絡,根目錄被設置爲這樣

VirtualHost = www.user1.example.com 
├── validateUser.php 
└── test.php 
VirtualHost = www.user2.example.com 
├── validateUser.php 
└── test.php 

當然,我剛搬進的validateUser.php複製到每個用戶的目錄。問題是,現在用戶可以刪除該文件並在其中放入他們想要的任何內容,例如根本不需要登錄。解決這個問題的方法是使主文件夾變得粘滯(不是我曾經推薦過的主文件夾),並使root99擁有validateUser.php。但現在它會執行AS根,因爲這是suPHP。那是我放棄的地方。

2)我可以使用古斯塔夫的mod_auth建議,但我不喜歡它需要密碼(像老學校的網站)。

3)如果我可以在虛擬主機之間重定向,我已經考慮過1)的變體。例如,重組的虛擬主機像這樣

VirtualHost = www.user1.example.com 
└── test.php 
VirtualHost = www.user2.example.com 
└── test.php 
VirtualHost = www.admin.example.com 
└── validateUser.php 

然後使用mod_rewrite從用戶的所有業務重定向到www.admin.example.com/validateUser.php,並且如果用戶已登錄(或如果登錄是成功的)用戶被重定向回他們最初嘗試登錄的網站。如果可能的話,這樣做的好處是隻有當用戶被引導回自己的虛擬主機時,suPHP纔會啓動。

+0

我相當有信心我的問題沒有解決方案http://stackoverflow.com/a/9561335/654789 – puk

回答

2

您是否考慮過使用mod_auth來實現用戶認證?如果你決定嘗試它,那麼你可能會發現一個guide

Apache 2。2個當量:

注意,瀏覽器中存儲的證書,並與每個請求你讓他們發送的報頭。

+0

我不太確定這是我在找什麼,無論如何,它似乎已經停產「兼容性:僅適用於2.1之前的版本」 – puk

+0

這僅僅是因爲它被替換爲稍微更具體的模塊,如[mod_auth_basic](http://httpd.apache.org/docs/2.2/mod/mod_auth_basic.html)。如果這不是你想要的,那麼不用擔心,只是認爲它可能會有所幫助。 –

+0

讓我再看一次。 – puk