suPHPの設定とインストール

//概要
CGIWrapではperlCGIによるラッパー機能を提供してきた。
しかし、このラッパーではPHP容易にセキュア化したり、バーチャルホストごとの設定が困難である。
そこで、今回はsuPHPを用いてこの問題に対処する。


//suPHPとは
suPHPとは、mod_cgiwrapの後継となるもので、元々はcgiwrapのモジュール版であった。
cgiwrapをモジュール化することにより、より高速にCGIを動かす工夫がなされた。
これを発展させたのがsuPHPであり、その名のとおりPHPに対応したラッパーである。
本来の機能として、PHPを自UID/GIDで実行できる他、通常のCGIも自UID/GIDで実行することが可能だ。
さらに、mod_vhost_aliasに対応しているため、容易にバーチャルホスト毎に別UID/GIDで動作することができるのである。


//動作速度の問題
suPHPが嫌われる原因としてよく挙げられるのが、動作速度の問題である。
これは、本来PHPが高速で動作しているのはPHPインタプリタがモジュールとして動作しているためであって、
それ以外の方法で(CGIにより)動作させると少なからず動作速度が落ちてしまう、ということである。
従って、PHPをCGIモードで動作させるsuPHPが速度が落ちがちだといわれる。が、実はそうでもない。
現バージョンのsuPHPの場合は、FastCGI方式を採用しているためPHPインタプリタが常に常駐化され、
ほぼモジュール版と変わらない動作速度で動作することが可能なのである。
#これについては環境変数で出た情報のみから記述しているため、実際のところは不明。
#分かり次第(ソースがあり次第)追記することにする。

実際は、単にPHPがFastCGIに対応していただけの模様。


//設定・インストール
・ここでは、当サーバの設定を例に一連の流れを説明する。
Fedora Core 5の場合は、すでにrpmパッケージが公開されているので、yumからmod_suphpをインストールすればよい。
今回使用しているディストリビューションはCentOSだが、Fedoraのソースrpmをコンパイルして使用することにする。
*DACにあるパッケージはコンパイルの設定が違う、またソースからのインストールはパッチを当てなければならない箇所が多いため。
○ファイルのダウンロード・リビルド・インストール
基本的にFedoraとCentOSは互換性があるが、glibcのバージョンの関係上同じバイナリファイルを使用できない。
そのため、Fedora CoreのExtrasよりソースrpmをタウンロード、リビルドして使用する。
[root@www ~]# wget http://ftp.riken.jp/Linux/fedora/extras/5/SRPMS/mod_suphp-0.6.1-4.fc5.src.rpm
21:59:08 http://ftp.riken.jp/Linux/fedora/extras/5/SRPMS/mod_suphp-0.6.1-4.fc5.src.rpm
=> `mod_suphp-0.6.1-4.fc5.src.rpm’
Resolving ftp.riken.jp… 134.160.38.1
Connecting to ftp.riken.jp|134.160.38.1|:80… connected.
HTTP request sent, awaiting response… 200 OK
Length: 375,718 (367K) [application/x-wais-source]
100%[================================>] 375,718 1.16M/s
21:59:08 (1.15 MB/s) – `mod_suphp-0.6.1-4.fc5.src.rpm’ saved [375718/375718]
[root@www ~]# rpmbuild –rebuild mod_suphp-0.6.1-4.fc5.src.rpm←ソースrpmをリビルド
……
+ umask 022
+ cd /usr/src/redhat/BUILD
+ cd suphp-0.6.1
+ rm -rf /var/tmp/mod_suphp-0.6.1-4-root-root
+ exit 0
Executing(–clean): /bin/sh -e /var/tmp/rpm-tmp.27399
+ umask 022
+ cd /usr/src/redhat/BUILD
+ rm -rf suphp-0.6.1
+ exit 0
[root@www ~]# rpm -ivh /usr/src/redhat/RPMS/i386/mod_suphp-0.6.1-4.i386.rpm←suPHPのインストール
Preparing… ########################################### [100%]
1:mod_suphp
########################################### [100%]
[root@www ~]# chmod o+rx /usr/sbin/suphp←現行パッケージのバグ対策
○suPHPの設定
suPHPの設定ファイルを開き、設定する。
[root@www ~]# vi /etc/suphp.conf
docroot=/←変更(/home/より上層での実行禁止)

docroot=/home/
umask=0077←umaskの変更(作成ファイルのデフォルトパーミッションを644にする)

umask=0022
handle_userdir=true←変更(/~以降のユーザディレクトリでも動作可能にする)
errors_to_browser=false←変更(エラーをブラウザ上に表示)

errors_to_browser=true
○Apache再設定
suPHPを適用するためApacheを再設定する。
[root@www ~]# vi /etc/httpd/conf.d/suphp.conf
suPHP_Engine off←変更(suPHPを有効にする)

suPHP_Engine on
AddType application/x-httpd-php .php←追加(〃)
AddHandler x-httpd-php .php
AddHandler x-suphp-cgi .cgi .pl

# suPHP_AddHandler x-httpd-php←コメントアウト(〃)

suPHP_AddHandler x-httpd-php
suPHP_AddHandler x-suphp-cgi←追加(〃)
[root@www ~]# mv /etc/httpd/conf.d/php5.conf /etc/httpd/conf.d/php5.conf.org←名前変更(module版PHPによる実行をストップ)
[root@www ~]# /etc/init.d/httpd restart←Apache再起動
これにより、CGI/PHPともに自UID/GIDで実行できる。
また、suPHPにより、ディレクトリやファイルのパーミッションが777である場合、実行が強制ストップされる。
(/etc/suphp.confにより変更可能)
また、mod_vhost_aliasを適用することによりバーチャルホスト毎に別UID/GIDで動作することができた。
->ユーザ毎にバーチャルホストを設定する方法


//参考サイト
suPHP – Home:
http://www.suphp.org/Home.html
サードパーティリポジトリーを使う:
http://www.geocities.jp/hoge_tomo/20050318.html

One comment

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です