一般來說 Linux Apache 服務啟動時,預設都是限定一組使用者與群組來執行程序(通常是 apache 這個帳號)。但有時我們常透過虛擬主機 (Virtual Host) 在同一個 Apache 掛載許多站台。
有時候用了很多 Open Source 的架站軟體,像是 WordPress, Joomla, Drupal 等等。這時候問題來了,如果大家都是用同樣的使用者在執行,一旦其中一個網站被入侵,Hacker 就可以很輕易的透過 Apache 程序存取同主機其他站台的檔案資料 (例如透過 PHP),很快的整台主機就會淪陷。
那我們可要想個辦法控制 Apache 執行程序,目的只是讓非法的程式只能讀取限制的 Document Root。有兩種方法可以達到效果,一種是 chroot 另一種就是 MPM (Multi-Processing Module)。個人比較不喜歡 Chroot 作法,由於本人技術不佳,擔心控制不好可能會整個站都被看光光,所以這裡我們介紹 MPM 來指定 Apache Virtual Host 程序的使用者與群組。
安裝 mpm-itk 套件
直接用 rpm 從 Webstatic 安裝 yum repository
[root@server ~]# rpm -Uvh http://mirror.webtatic.com/yum/centos/5/latest.rpm
安裝 httpd-itk 套件
[root@server ~]# yum install --enablerepo=webtatic httpd-itk
編輯 /etc/sysconfig/httpd 指定用 httpd.itk 來執行,請加入以下設定
HTTPD=/usr/sbin/httpd.itk
編輯 /etc/httpd/conf.d/php.conf 載入 PHP Module,請加入以下設定
<IfModule itk.c> LoadModule php5_module modules/libphp5.so </IfModule>
編輯 Virtual Host 設定檔,透過 AssignUserID 參數設定 Apache 程序的使用者與群組,範例如下:
<VirtualHost *:80> ServerName weba.gg-server.com AssignUserID weba weba DocumentRoot /home/weba/www <Directory /home/weba/www> Options Indexes FollowSymLinks MultiViews allow from all </Directory> </VirtualHost>
重新啟動 Apache
[root@server ~]# service httpd restart
大功告成,簡單吧!
參考資料