suPHPドキュメント
suEXECのphp版ともいうべき、suPHP。日本語のドキュメントが見つからなかったので、和訳してみた。自己責任でどうぞ。
suPHP - Home
ただし、CentOS 4では、Fedora Core 6用のrpmパッケージが使えるようなので、これを使いました。
[root@server ~]# wget http://ftp.riken.jp/Linux/fedora/extras/6/SRPMS/mod_suphp-0.6.2-1.fc6.src.rpm [root@server ~]# rpmbuild --rebuild mod_suphp-0.6.2-1.fc6.src.rpm [root@server ~]# rpm -ivh /usr/src/redhat/RPMS/x86_64/mod_suphp-0.6.2-1.x86_64.rpm
これで、下記の設定ファイルができるので、書き換えてApacheをリロードすればOKです。
/etc/suphp.conf /etc/httpd/conf.d/mod_suphp.conf
下記のサイトを参考にさせていただきました。
http://www.dabits.net/tips/server/suphp.html
以下のドキュメントは、suPHP 0.6.2 released に同梱のファイルを元にしています。
doc/INSTALL
=========================== == suPHP == =========================== インストール ------------ 1. 概要 suPHPとsuPHP Apache moduleは、複数のユーザーが、一つのサーバー上で PHPスクリプトを簡単に実行する手段を提供します。 これはセキュリティを提供します。なぜなら、PHPスクリプトは webserver の ユーザー権限で実行されないからです。 さらには、スクリプトに多くの制限が課される、PHPのセーフモードは使う 必要がなくなるでしょう。 suPHPの実行ファイルは、setuid-rootでインストールする必要がありますので、 suPHPのセキュリティバグのために、root権限でコマンドが実行されるアタックを 許す可能性があります。私は現在のところ、suPHPのどんなバグも認知していませんが、 バグが全くないことを保証することはできません。 2. インストール ./configure をシステムに応じたパラメーターをつけて実行してください。 ほとんどのシステムでは、下記で充分なはずです。 ./configure --prefix=/usr configureスクリプトは、おなじみのGNU autoconfの引数に加え、 次のsuPHP専用の引数が使えます。 --disable-checkpath: このコンパイルオプションをつけると、suPHPはスクリプト(あるいはシンボリックリンク) がDOCUMENT_ROOT配下にあるかどうかをチェックしません。"Alias"ディレクティブと同時に 使う場合に、このオプションが便利なことがあります。 --disable-checkuid: このオプションをつけると、/etc/passwdに存在しないUIDをもつスクリプトを、suPHPで 動作させることができます。 --disable-checkgid: このオプションをつけると、/etc/groupに存在しないGIDをもつスクリプトを、suPHPで 動作させることができます。 --with-apxs=FILE: Apacheの"apxs"がインストールされたパスです。指定されなかった場合は、configureは PATHの中のapxsを探します。apxsがない場合、Apacheモジュールであるmod_suphpはビルド されません。また、ApacheがDSOサポートなしでコンパイルされている場合も、ビルド されません。suPHPはApache 1、apache 2どちらのmod_suphpをビルドするかチェックする ためにapxsを使うので、正しいapxsのパスが設定されていることを確認してください。 --with-min-uid=UID: suPHPがPHPスクリプトの実行を許可する、最小のUIDです。(デフォルトは100) --with-min-gid=GID: suPHPがPHPスクリプトの実行を許可する、最小のGIDです。(デフォルトは100) --with-apache-user=USERNAME: Apacheが実行されているUsername(UIDではない)です。(デフォルトはwwwrun) --with-logfile=FILE: suPHPのログファイルのパスです。(デフォルトは/var/log/httpd/suphp_log) --with-setid-mode=MODE: MODEは下記のいずれかを選択します。 "owner": ownerのUID/GIDでスクリプトを実行します。 "force": Apacheで設定されたUID/GIDでスクリプトを実行します。 (Apache 2を使用している場合のみサポート) "paranoid": ownerのUDI/GIDでスクリプトを実行しますが、Apacheで設定された UDI/GIDと一致するかどうかをチェックします。 デフォルトは"paranoid"モードです。 非常に危険ですので、"force"モードには「絶対に」設定すべきではありません。 "owner"モードは、"force"モードほど危険ではないですが、推奨しません。 "paranoid"モードが理想的です。 "make"を使って、suPHPをコンパイルし、エラーがなければ、"make install"を 使ってインストールしてください。インストールするときにはrootであることを 確かめて下さい。 ApacheがDSOをサポートしていて、"apxs"がビルド中に見つかった場合は、 これでおしまいです。そうでなければ、Apacheサーバーを"mod_suphp.c"を インクルードしてリビルドする必要があります。suPHPのビルド中に、"/usr"以外の prefixをを用いた場合、suPHPが実行できるようpathをセットするため、 "mod_suphp.c"を修正する必要があります。($exec_prefix/sbin/suphpで見つかります) mod_suphpを用いて、Apache webserverをコンパイルする方法の詳細は、apache/INSTALL に記載されています。 次に、"httpd.conf"を修正して、特定のVHostsに対して、suPHPを有効にする 必要があります。この詳細は、apache/CONFIGをご覧ください。 suPHPが動作するためには、suPHPの設定ファイルに、最低一つのhandlerを 記載しなくてはなりません。suPHPの設定方法についての追加情報は、 CONFIGをお読みください。 =================================== (c)2002-2005 by Sebastian Marsching <sebastian@marsching.com> Please see LICENSE for additional information
doc/CONFIG
=========================== == suPHP == =========================== 設定 ------------- 1. 概要 suPHP設定ファイルは、$sysconfdir/suphp.conf である。(例、/etc/suphp.conf) これは、一般的な"INI-file"形式である。 セクション名は、[]で囲まれている。(例、[global]) 設定オプションは、keyとvalueのペアで、"="で区切られている。(例、umask=0077) ";"から始まる行はコメントである。 サンプルの設定ファイルは、suphp.conf-example で見ることができる。 2. グローバルオプション このオプションは[global]セクションで指定する必要がある。 これら全てのオプションは、任意である。 logfile: ログファイルのパスを指定する。指定がない場合、コンパイル時の値が使われる。 loglevel: "info", "warn", "error", "none"のいずれかが指定できる。 どのレベルのメッセージが記録されるかを指定する。 デフォルトは"info"である。 webserver_user: webserverが実行されているUIDのUsernameである。指定がない場合、 コンパイル時の値が使われる。 docroot: このパス内にスクリプトが存在しなければならない。これは特に check_vhost_docrootが無効となっているとき、追加のセキュリティ対策となる。 デフォルトは / で、全ての場所にあるスクリプトが実行できる。 chroot: スクリプトの実行前に、プロセスのルートディレクトリを変更するパスである。 スラッシュで終わってはいけない。スラッシュで終わると、chroot()は実行されない。 allow_file_group_writeable: グループに書き込み権限のあるファイルを許可する。デフォルトで無効になっている。 allow_directory_group_writeable: グループに書き込み権限のあるディレクトリ内のスクリプトを許可する。 デフォルトで無効になっている。 allow_file_others_writeable: othersに書き込み権限のあるファイルを許可する。デフォルトで無効になっている。 警告:このオプションを有効にすることは非常に危険であり、重大なセキュリティ 問題を発生します。特に任意のコードが実行される危険があります! allow_directoy_others_writeable: othersに書き込み権限のあるディレクトリ内のスクリプトを許可する。 デフォルトで無効になっている。 警告:このオプションを有効にすることは危険です! check_vhost_docroot: スクリプトがウェブサーバーで指定されたDOCUMENT_ROOT内にあるかどうか チェックします。このオプションは、ウェブページディレクトリ外の シンボリックリンクを避けるために用意されたものです。mod_vhost_aliasや Aliasディレクティブを使う場合は、無効にするといいでしょう。 このオプションは、コンパイル時に"--disable-check-docroot"オプションを 指定した場合、デフォルトで無効です。そうでなければ、デフォルトで有効です。 errors_to_browser: スクリプト実行時の些細な問題についての情報を、ブラウザに送信する場合、 このオプションを有効にします。このオプションはデフォルトで無効です。 env_path: "PATH"環境変数の中身です。これを安全な値にセットしてください。 デフォルトは、"/bin:/usr/bin"です。 umask: スクリプト実行前にセットされるumaskです。 8進数で指定する必要があります。(例、0077) min_uid: スクリプトを実行できる最小のUIDです。 デフォルトはコンパイル時の値です。 min_gid: スクリプトを実行できる最小のGIDです。 デフォルトはコンパイル時の値です。 3. ハンドラー [handlers]セクションでは、mime-typeと使用されるインタプリタとのマッピングを 指定します。 例: x-httpd-php=php:/usr/bin/php "key"はmime-typeです。"value"はコロンで区切られています。 最初の部分はモードで、2番目の部分はインタプリタへのパスです。 現時点では、2つのモードがサポートされています。 "php"モード: PHPスクリプトでこのモードを使います。使いたいPHPインタプリタを 指定してください。 "execute"モード: "ececute:!self"のように指定する必要があります。スクリプト自身が 実行されるので、インタプリタを指定してはいけません。CGIスクリプトに使用してください。 =================================== (c)2002-2005 by Sebastian Marsching <sebastian@marsching.com> Please see LICENSE for additional information
doc/apache/CONFIG
=========================== == suPHP Apache module == =========================== 設定 ------------- mod_suphp は次の設定ディレクティブを受け付けます。 suPHP_Engine ("on" か "off" を設定) このオプションは、指定されたserver(またはVirtualHost)上で、PHPスクリプトが PHPインタープリタで実行されるべきか、そのままのブラウザーに返されるかを mod_suphpに対して指定する。 このディレクティブは、グロバールコンテキストか<VirtualHost>ディレクティブ 内で使用することができる。 suPHP_ConfigPath (パス名を指定する) このオプションは、どのパスをPHPインタプリタに渡すべきかをmod_suphpに 対して指定する。(PHPRC環境変数で設定される) ファイルを指定せずに、ファイルが存在するディレクトリを指定する。 例:もし、"/path/to/server/config/php.ini"を使いたければ、 "suPHP_Config /path/to/server/config"と指定する。 このオプションを使わなければ、PHPはコンパイル時のデフォルトパスを使用する。 suPHP_UserGroup (user名とgroup名を指定する) *setid-modeが"force"または、"paranoid"の設定でコンパイルされたときだけサポート* PHPスクリプトが実行されるユーザー名とグループ名を指定する。 例:suPHP_UserGroup foouser bargroup suPHP_AddHandler <mime-type> <mime-type>タイプに対して、リクエストを扱うようmod_suphpに指示する。 suPHP設定ファイル内で、ハンドラーの動作が指定されている場合のみ動作する。 suPHP_RemoveHandler <mime-type> <mime-type>タイプに対して、リクエストを扱わないようmod_suphpに指示する。 =================================== (c)2002-2005 by Sebastian Marsching <sebastian@marsching.com> Please see LICENSE for additional information
doc/apache/INSTALL
=========================== == suPHP Apache module == =========================== インストール ------------ 1. 概要 suPHPとsuPHP Apache moduleは、複数のユーザーが、一つのサーバー上で PHPスクリプトを簡単に実行する手段を提供します。 これはセキュリティを提供します。なぜなら、PHPスクリプトは webserver の ユーザー権限で実行されないからです。 さらには、スクリプトに多くの制限が課される、PHPのセーフモードは使う 必要がなくなるでしょう。 suPHP配布物の中で、このディレクトリのREADMEファイルと、メインディレクトリの README、INSTALLファイルを必ず読んでください。 2. 単純な事実 このパートでは、追加モジュールとともに、Apacheサーバーをどのようにコンパイル するのかを知りたい人のために、最も重要な情報を提供します。 もし、このことに慣れていなければ、このマニュアルの3つめのパートである ステップバイステップガイドが役に立つでしょう。 mod_suphpは、"mod_suphp.c"というただ一つのファイルで成り立っているだけです。 もし、suphpのバイナリーがデフォルトパス(/usr/sbin/suphp)になければ、 Apacheのソースに、"configure"スクリプトを用いて、suphpを加える前に、 mod_suphp.cの中の対応する行を修正する必要があります。 mod_suphpをインストールする最も簡単な方法は、動的にロードされるモジュール(DSO) としてコンパイルすることです。もし、ApacheがDSOをサポートするようにコンパイル されていて、"apxs"が存在するか、"configure"スクリプトを走らせるときに そのパスを指定するならば、mod_phpは"make"時に自動的にコンパイルされ、 Apacheサーバーにインストールされます。("make install"実行時に) mod_suphpの設定方法に関する情報は、このディレクトリ内の"CONFIG"ファイルに 記載されています。 mod_suphpはApache 1.3.2xとApache 2.0.xのために開発されていることに 注意してください。他のバージョンでは動作しないかもしれません。 suPHPはLinuxで開発されており、もしかすると他の*NIXシステムでも動作するかも しれません。FreeBSDにsuPHPのportがあるということを聞いていますが、 私は現時点でFreeBSDを事項できる環境がないので、suPHPの現在のバージョンに 対して、どんな修正がなされたのかテストすることができません。 もしご存じでしたら教えていただき、GNU autoconfスクリプトを、自動的に 判断できるよう修正を試してみてください。 他のシステムでテストして動作した場合、私にお知らせください。 3. ステップバイステップガイド 既にApacheがmod_so(DSOサポート)で起動しているならば、mod_suphpは Apacheサーバーに自動的にインストールされているはずです。 もし動作していなければ、"httpd.conf"の中の、下記の2行を確認してください。 LoadModule suphp_module /usr/lib/httpd/mod_suphp.so AddModule mod_suphp.c 時々、"apxs"が間違った場所でこの行を追加することがあります。 その場合は、適切な場所に移動させる必要があります。(詳細はApacheのドキュメント参考) mod_suphpを(静的に)用いて、Apacheをスクラッチからコンパイルするには、 次のステップに進んでください。 必要ならば、"mod_suphp.c"の中の、suPHP実行パスを変更してください。 http://www.apache.org からApacheのソースを入手し、展開します。 新たに作成されたディレクトリに入ります。そして、"./configure --help"を 実行します。そうすると、configureスクリプトに関する非常に有用な情報が 表示されるでしょう。 ここで、configureスクリプトを、必要なパラメータと"--add-module=/path/to/mod_suphp.c" をつけて実行します。 これで、mod_suphp.cがApacheソースにコピーされ、アクティベートされます。 これで、Apacheを"make"し、"make install"を用いてインストールすることが できるようになります。 mod_phpでコンパイルすると、suPHPはおそらく動作しないことに注意して下さい。 suPHPを、PHPファイルをパースするようにするにするためには、Apacheの 設定に次の1行を追加し、適切なVHostでmod_suphpを有効にすればよいです。 AddHandler x-httpd-php .php 次の行をグローバルApache設定に追加することにより、mod_suphpをオンにできます。 suPHP_Engine on これにより、mod_suphpが全てのVirtualHostで有効になります。 最低限一つのsuPHP_AddHanderディレクティブを指定する必要があることに 注意して下さい。なぜなら、mod_suphpはデフォルトで何のmime-typeも扱いません。 オプションに関する追加の情報は、"CONFIG"ファイルをご覧ください。 4. 追加情報 mod_suphpがインストールされて、Apacheサーバーで実行されたとき、"x-httpd-php"という 同じmimeタイプが使われているため、ほとんどの場合、mod_suphpが動作しません。 双方が正常に動作したという報告がありますが、たぶんそれは些細なことでしょう。 ともあれ、私はmod_phpとmod_suphpの双方を同時に起動するにはどうしたらよいか、 という質問にはお答えしません。 mod_suphpとmod_phpを同時に起動することは「非常に危険」になりうるので、 避けるべきです。webserverの権限で実行されるCGIスクリプトについても、 同じ事が言えます。 suPHPは、CGIスクリプトを使っていないか、あるいはCGIスクリプトを suExecで動作させている場合のみ使用するべきです。 =================================== (c)2002-2005 by Sebastian Marsching <sebastian@marsching.com> Please see LICENSE for additional information