引き続き、CentOS 6.x における PHP-CGI + suEXEC の具体的な設定手順について見ていきます。
LAN内のユーザーに CMS を利用したサイト制作、開発環境を構築する場合、CGI や PHPがそれぞれのユーザー権限で動作しさえすれば目的は達成できるため、suPHP ではなくパッケージで管理出来る PHP-CGI を使ってそれぞれのユーザー権限で PHP が実行出来る環境を構築します。
前述したように suEXEC は AP_DOC_ROOT(CentOS では /var/www)配下になければ suEXEC で CGI を実行させることは出来ません。先ず、PHP-CGI がインストールされているか調べます。
CentOS 6.x のパッケージでインストールした場合は、上記のように表示されています。この例では suEXEC により CGI を動作させるには、AP_DOC_ROOT で指定されたディレクトリ配下に CGI が配置されている必要があります。
AP_DOC_ROOT で指定されたディレクトリを /var/www から /home へ変更する場合は、apache をコンパイルし直す必要があるので、パッケージによる保守管理が出来なくなる事を意味します。
本稿ではこれを変えない方向で、PHP と CGI が個々のユーザー権限で動作する環境を構築することにします。
以下を前提に suEXEC と PHP-CGI へ移行する場合の修正箇所について、CentOS 6.x を例に説明します。
先ず、php-cgi を呼び出すための実行ファイルを suEXEC の動作が認められているディレクトリの下に、以下の手順で作成します。
/var/www ディレクトリ配下に /php-cgi ディレクトリを作成し、オーナーapache 、グリープ apache にして、その他のユーザーにはアクセスできるようにします。
この /php-cgi ディレクトリに、PHPを CGI モードで実行させたいユーザーのディレクトリを作成します。PHP-CGI 形式で PHPの動作を認めたいユーザーごとに作成する必要がありますので、ここでは user1 と user2 二人いると仮定します。
/user1 ディレクトリに php-cgi を以下の内容のファイルを作成します。
#!/bin/sh
exec /usr/bin/php-cgi
同様に user2 に対しても同じ内容の php-cgi を作成するか、usr1 で作成したものを複製して配置します。現在、以下の状態になっています。
それぞれのユーザーディレクトリのパーミッションをグーループのみアクセスを許可します。(ここポイント)
所有者を user1、グループを user1 とします。ユーザーグループを作成していない場合は groupadd コマンドでユーザー名と同一名のグループを作製してユーザーを登録します。
ディレクトリと作成した php-cgi 実行ファイルの所有者とパーミッションを変更します。またグループ user1 に対して読み込みと実行を許可します。(パーミッション750)
user2 に対しても同様に php-cgi ファイルを作成し、パーミッションと所有権を設定します。実際には、この開発環境を提供するユーザーの数だけ、同様のディレクトリを掘って、PHP-CGI を呼び出す実行ファイルを配置する必要があります。
ユーザー user1 のローカルグループ user1 が存在しない場合は、グループ user1 を作成し、
グループ user1第一のユーザーとして user1 を追加します。
ユーザー専用のローカルグループに apache を追加します。
グループuser1 には ユーザーuser1とapache が所属している状態です。PHP-CGI の利用を認める user2 についても同じ手順で設定します。 以上で下準備は完了です。引き続き、Apache Webサーバーの設定へ続きます。