大貓共和國

Meow

Apache下以不同uid及pid執行不同VirtualHost

這篇的東西我沒有很確定是對的,筆記一下,有錯請指正喔。



考慮以下情境:
  • 在一台Linux主機上執行Apache伺服器
  • 主機上有兩個使用者:a及b
  • 使用Apache VirtualHost將a.gaaga.com導向/home/a/www,將b.gaaga.com導向/home/b/www
一般來說,如果使用apt, yum之類的套件管理程式自動安裝Apache的話,Apache會自動被設定在某一個系統帳號權限下執行(www-data, nobody…etc)。在這個地方會遇到一些小問題:Apache可能無法讀寫使用者的www目錄 (讀取的問題在預設權限755得情況不會發生,但一般我還是覺得將權限開成700比較有保障)。

網路上可以找到一些解法:
  • chmod 777 -R www (超危險暴力法,強力不推薦使用)
  • chgrp -R www-data www; chmod -R g+a www
  • etc….
但這些做法都還有安全性上的隱憂:www-data有權限讀寫任何用戶的www資料夾,也就是a其實可以寫一段php code盜取b的資料,或將b的資料殺掉。

這個問題我google了一下,有點抓不到正確得關鍵字,於是直接上irc freenode#TOSSUG發問,感謝snowian pct的回答,最後找到了這個東西:
apache2-mpm-itk (just mpm-itk for short) is an MPM (Multi-Processing Module) for the Apache web server. mpm-itk allows you to run each of your vhost under a separate uid and gid — in short, the scripts and configuration files for one vhost no longer have to be readable for all the other vhosts.
在debian下的設置很簡單:
# apt-get install libapache2-mpm-itk
# vi /etc/apache2/sites-available/a-site
加上
AssignUserID a a (分別是userid, groupid)
即可

(找方法找了很久,找到後花三分鐘就搞定了)




另外,看到2007年的mailing list上的問題:會跟mod_python相衝。不知道這個問題解決了沒,我可能會在上面跑Django

Comments