suPHP
suPHP はオーナー権限で PHP スクリプトを実行するためのツールです。Apache モジュール (mod_suphp) と setuid ルートバイナリ (suphp) から構成され、後者が Apache のモジュールから呼び出されて PHP インタプリタを実行しているプロセスの uid が変更されます。
インストール
Arch User Repository から suphpAUR パッケージをインストールしてください。
設定
特定のバーチャルホストで mod_suphp を有効にするには /etc/http/conf/http.conf
ファイルに以下のような行を追加してください:
/etc/http/conf/http.conf
#suPHP LoadModule suphp_module modules/mod_suphp.so
suPHP を使って PHP ファイルを動作させるには以下も追加する必要があります:
/etc/http/conf/http.conf
AddType application/x-httpd-php .php
さらに、以下の行を追加することで mod_suphp がオンになります:
/etc/http/conf/http.conf
suPHP_Engine on
最後に suPHP_AddHandler ディレクティブを指定してください。デフォルトでは mod_suphp は何の mime タイプも処理しません。
/etc/http/conf/http.conf
suPHP_AddHandler application/x-httpd-php
これで suPHP のインストールは完了です。以下のコマンドで HTTPd サーバーを再起動してください:
# systemctl restart httpd
補足情報
mod_suphp と mod_php を同時に実行してはいけません。どちらも CGI スクリプトをウェブサーバーの権限で動作させるモジュールです。
CGI スクリプトを使わない場合や suExec を使用して CGI スクリプトを実行する場合にのみ suPHP を使用してください。
suPHP と mod_php
suPHP と mod_php を一緒に使いたい場合、別のバーチャルホストやディレクトリを使って suPHP や mod_php を設定するしかありません。
ユーザーディレクトリのみで suPHP を使う
以下ではユーザーの public_html
ディレクトリでは suPHP を使って、他のディレクトリでは mod_php を使用するように設定します。
まず最初に php_module が衝突しないように suPHP のハンドル名を変更する必要があります。/etc/suphp/suphp.conf
の以下の行を変更してください:
/etc/suphp/suphp.conf
[handlers] ;Handler for php-scripts application/x-httpd-suphp="php:/usr/bin/php-cgi"
/etc/http/conf/http.conf
ファイルに以下の行を追加・編集してください:
/etc/http/conf/http.conf
#suPHP LoadModule suphp_module modules/mod_suphp.so
それから、ユーザーディレクトリで suPHP モジュールを使うため、/etc/http/conf/extra/http-userdir.conf
ファイルに以下を追加:
/etc/httpd/conf/extra/httpd-userdir.conf
<Directory "/home/*/public_html"> ... DirectoryIndex index.php index.html suPHP_Engine on AddHandler application/x-httpd-suphp .php suPHP_AddHandler application/x-httpd-suphp ... </Directory>
最後に以下のコマンドで HTTPd サーバーを再起動してください:
# systemctl restart httpd