.
WEB/DB 関連 => CMSサイト制作環境の構築 > 3.PHP-CGI + suEXEC 環境の構築手順 (CentOS 6.x)2/2
Linux 活用ガイド:目次

サーバ構築ガイド

レンタル ガイド

ショップ 構築ガイド

情報漏洩対策

PHP-CGI + suEXEC 環境の構築手順 (CentOS 6.x)2/2

PHP を CGIモードで動かす下準備が出来たので、引き続き Apache Webサーバーの設定を行います。

VirtualHost.conf の設定

CentOS 6.x では、バーチャルホストに関する設定は、VirtualHost.conf にまとめられています。

user1 と user2 の二人のユーザーは、それぞれバーチャルホストでサイトを運用すると仮定します。ユーザー user1 に割り当てているバーチャルホストの設定例です。以下に一例を示します。

バーチャルホストの設定は <VirtualHost> タグ内で行います。以下は名前ベースのバーチャルホストの設定例です。それぞれの制作スタッフ毎にバーチャルホストによるサイト運用を認めます。多くてもせいぜい十数名規模を想定しています。

/etc/httpd/conf.d/VirtualHost.conf

ScriptAlias /php5-user1 /var/www/users/cgi-user1/php-cgi ①
ScriptAlias /php5-user2 /var/www/users/cgi-user2/php-cgi ②

<VirtualHost *:80>
ServerName www.user1.com ← 例えば
DocumentRoot /var/www/user1/public_html
ServerAdmin hoge@hogehoge.com

# PHP の実行を認めるファイル拡張子
AddType application/x-httpd-php .htm .html .php

# suexec を有効にする 実行ユーザー(user1)とグループ(user1)を指定。上記 ScriptAlias と、以下の Action で指定する php-cgi とこのユーザーが一致している必要があります。
SuexecUserGroup user1 user1 ③

# 以下の2行は .htaccess でユーザーに選択させる場合は不要
# AddHandler php5-cgi .php .phps .html ④
# Action php5-cgi /php5-user1 ⑤

# cgi の実行を認めるディレクトリ
ScriptAlias /cgi-bin/ /var/www/user1/cgi-bin/

<Directory /var/www/user1/public_html>
Options None
DirectoryIndex index.php index.html index.htm
AllowOverride FileInfo AuthConfig
Deny from all
Allow from 192.168.1.0/24
</Directory>

</VirtualHost>

この例では、バーチャルホスト内の ScriptAlias で、ドキュメントルート外に敢えて cgi-bin ディレクトリを配置しています。

この例では、エリアス処理をしてURLをマッピングしていますので、www.user1.com/cgi-bin でアクセス出来ることになります。また、CGI は、この cgi-bin ディレクトリに設置しないと動かないように限定しています。

ドキュメントルートである /var/www/user1/public_html ディレクトリに対する設定では、接続制限としてネットワークを 192.168.1.0/24(LAN)に限定しています。

AllowOverride ディレクティブでは、.htaccess による制御をユーザーにどこまで認めるか指定します。

ここではユーザーが CGI 形式か、PHP の動作方法を選べるようにしたいので、AddHandler と Action を制御できるよう FileInfo を指定しています。 AuthConfig は Basic 認証を許可します。

詳細はリンク先の Apache ドキュメントを参照して下さい。

それぞれの設定の意味

それぞれの設定の意味は以下のとおりです。

①・②

ScriptAlias /php5-user1 /var/www/users/cgi-user1/php-cgi ①
ScriptAlias /php5-user2 /var/www/users/cgi-user2/php-cgi ②

それぞれのユーザーごとに作成した php-cgi のファイルを /php5-user1 にマップします。suEXEC で動かす場合、ユーザーごとに専用のディレクトリ と php-cgi を作成し、<VirtualHost> タグの外でそれぞれ指定する必要があります。

この例では user1と user2 をそれぞれの実行権限で PHP を動作させると仮定しています。

③・④・⑤

SuexecUserGroup user1 user1 ③
AddHandler php5-cgi .php .phps .html ④
Action php5-cgi /php5-user1 ⑤

③SuexecUserGroup
suEXEC で CGI を実行するユーザーとグループを指定します。当然、ユーザーとグループは、① で定義した PHP を呼び出す CGI プログラムに対して、権限を持っている必要があります。

④AddHandler
Apache が PHPと認識する拡張子を .php .phps .html と指定しています。ここで定義された拡張子を PHP としてサーバーは解釈します。

⑤Action
④ で サーバーが PHP と認識した場合の動作を指定します。ここでは、① で定義した php-cgi として実行するように指定しています。つまり、suEXEC 環境下では、PHP は そのユーザー権限で動作することになります。

php.conf の確認

CentOS 6.x では、Apache の PHP に関する設定は、/etc/httpd/conf.d/php.conf に設定がまとめられています。ここでは、モジュール形式で PHP が動作するように以下のように記述されています。

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

<IfModule prefork.c>
LoadModule php5_module modules/libphp5.so
</IfModule>
<IfModule worker.c>
LoadModule php5_module modules/libphp5-zts.so
</IfModule>

AddHandler php5-script .php
AddType text/html .php

DirectoryIndex index.php

前述した VirtualHost.conf の設定で、それぞれのバーチャルホストのタグ内において、以下を記述した場合、そちらが優先されますが、記載がない場合は、ここで記述された AddHandler と AddType が適用されます。

AddHandler php5-script .php
AddType text/html .php

この記述は、デフォルトの従来のモジュール形式、つまり apache のユーザー権限で PHPを動作する事になりますが、バーチャルホストタグ内で AddHandler と AddType が指定されていた場合は、そちらが優先されます。

.htaccess の表記

ユーザーのディレクトリで、AllowOverride All としているので、AddHandler と AddType の指定は、.htaccess ファイルで行うことが出来ます。

<Directory /var/www/user1/public_html>
~ 略
AllowOverride FileInfo AuthConfig
~ 略
</Directory>

ユーザーが明示的に .htaccess で指定しない限りは、PHP は 従来のモジュールモード、つまり、apache のユーザー権限で動作することになりますが、AddHandler と AddType を .htaccess でユーザーが行った場合は、そちらが優先されることになります。

サーバー管理者が事前に .htaccess ファイルを作成しておきます。

# touch /var/www/user1/public_html/.htaccess
# chmod 0440 /var/www/user1/public_html/.htaccess
# chown user1.user1 /var/www/user1/public_html/.htaccess
# vim /var/www/user1/public_html/.htaccess

.htaccess の内容は以下のとおりです。 PHP を CGI モードで実行させるために以下の2行を記述します。

/var/www/user1/public_html/.htaccess

AddHandler php5-cgi .php .phps .html
Action php5-cgi /php5-user1

ユーザーが、FTPクライアントを使って、この記述を行頭に # を付けてコメントにするか、あるいは、.htaccess ファイルを削除をすれば、デフォルトのモジュールモードで動作することになります。

つまり、apache ユーザーで動作させるか、ファイルをアップロードしたユーザーと同じ user1 ユーザーの権限で PHP を動作させるかを、ユーザー自身が .htaccess を使って選択出来るようになります。

この切り替えは、LAN内の限られたネットワーク環境における開発用途に都合の良い設定としてこの様にしている点に留意して下さい。一般的に必要とされる扱い方、この様にすべき、と言うはなしではありません。

動作確認

以下の内容を記述した test.php を所定のディレクトリに FTPでアップロードしてブラウザでアクセスします。http://www.user1.com/test.php

/var/www/user1/public_html/test.php

<?php
echo '実行中のユーザーは '.exec('whoami');
phpinfo();
?>

今現在、このPHPを実行しているユーザー名、 user1 と表示されているはずです。ためしに、.htaccess を削除するか、行頭に # を付けてコメントにして、再度ブラウザをリロードしてみます。

/var/www/user1/public_html/.htaccess

# AddHandler php5-cgi .php .phps .html
# Action php5-cgi /php5-user1

今度は apache と表示されれば OK です。モードを切替えるといっても、単にPHPの呼び出し方の違いであって、Apache Web サーバーが そのPHPのモードに固定されているわけではありません。

モジュールモードで動かすか、CGI モードで動かすか、ユーザー側で選択出来るようになります。

 

CMSサイト制作環境の構築

bottom_mark
ページ最上部
ページ最上部 前のページ