一般來說 Linux Apache 服務啟動時,預設都是限定一組使用者與群組來執行程序(CentOS 是 apache ,Ubuntu 是 www-data)。

但有時我們常透過 VirtualHost 在同一個 Apache 上存放著許多網站。

這樣子有些網站的權限可能就有問題,可能會導致網頁無法下載或上傳檔案等等,對於主機上的網站也有安全性的問題,所以這裡使用 MPM 來指定 Apache VirtualHost 程序的使用者與群組。

以下操作皆為 CentOS 6.8

1. 安裝 mpm-itk 套件

yum install httpd-itk -y

2. 編輯 /etc/sysconfig/httpd 指定用 httpd.itk 來執行

vi /etc/sysconfig/httpd

並加入以下設定 (後方為 httpd.itk 的絕對路徑,可以使用 find 去完整蒐尋位置)

HTTPD=/usr/sbin/httpd.itk

3. 編輯 /etc/httpd/conf.d/php.conf 載入 PHP Module

vi /etc/httpd/conf.d/php.conf

並加入以下設定

<IfModule itk.c>
LoadModule php5_module modules/libphp5.so
</IfModule>

4. 編輯 Virtual Host 設定檔,透過 AssignUserID 參數設定 Apache 程序的使用者與群組,範例如下:

<VirtualHost *:80>
DocumentRoot (網頁根目錄)
ServerName (VirtualHost 名稱)
ErrorLog logs (ErrorLog 存放檔案路徑)
CustomLog logs (CustomLog 存放檔案路徑)
AssignUserId (使用者名稱) (群組)
</VirtualHost>

最重要的就是 AssignUserId (使用者名稱) (群組)

名稱及群組中間有一個空格,設定完後重新啟動 Apache

service httpd restart

如果不知道有沒有正確的套用執行請在網頁根目錄中放一個 php 網頁,內容為:

<?php
echo shell_exec("whoami");
?>

這會顯示執行 php 的使用者名稱,看是不是你設定 AssignUserId 的使用者名稱。