Apache 1.3.17 のインストール

SERVER

suEXEC 付きの Apache 1.3.17 を RedHat 6.2 にインストールしてみました。


Apache のインストール

UNIX 界で有名な Web サーバ、Apache のインストールを行います。今回は、http://www.apache.org/ より apache-1.3.17.tar.gz というファイルを取得して、それをインストールすることにしました。

はじめは Apache 1.3.19 のインストールに挑戦していたのですけど、なぜか Segmentation Fault が発生して、コンパイルこそ終了するものの httpd の起動を行うことができませんでしたので、今回はバージョンを落としてでの挑戦となりました。

 

まずはこれを展開します。ソースは /usr/local/src/ ディレクトリ内にダウンロードしたものと想定して話を進めていきます。

cd /usr/local/src

tar xvzf apache-1.3.17.tar.gz

展開が終わったら、出来上がった apache-1.3.19/ という名のディレクトリへ入って、./configure を実行します。今回は suEXEC も使用したかったので、suEXEC 系のオプションも添えて実行してみることにしました。

cd apache-1.3.17/

./configure --enable-suexec --suexec-caller=apache --suexec-uidmin=1000 --suexec-gidmin=1000

これで、Makefile が自動的に出来上がりますので、今度はこれに少し微調整を加えます。apache を動かすためのアカウントとして、apache ( wwws ) を用意します。

/usr/sbin/groupadd wwws

/usr/sbin/useradd -g wwws -s /bin/false -d /dev/null apache

そしてこれを、Makefile の中の次の項目に設定します。

conf_user = apache

conf_group = wwws

ほかにも、conf_serveradmin や conf_servername などもありますので、このあたりは適宜設定します。

 

これで下準備が終わったので、続いてコンパイルとインストール作業に入ります。次のような手順で、コンパイルとインストールを行います。

make

make install

これでインストールは完了です。

 

設定の微調整と起動

まずは、CGI を使用できるように、/usr/local/apache/conf/httpd.conf の編集を行いました。

AddHandler cgi-script .cgi

これで CGI が起動できる準備ができました。

あとついでに、UserDir public_html が書いてあるあたりに次の行も加えておくことにします。これで各ユーザのホームディレクトリから CGI を起動できるようにします。

<IfModule mod_userdir.c>

UserDir public_html

</IfModule>

 

<Directory /home/*/public_html>

AllowOverride None

Options ExecCGI

Order allow,deny

Allow from all

</Directory>

 

続いて Apache の起動です。起動は次のようなスクリプトを実行することで行えます。

/usr/local/apache/bin/apachectl start

これで、Apache が起動して Web が見れるようになります。

 

suEXEC の確認

今回の目的のひとつ、suEXEC の動作を確認方法を書いて見ます。まずは次のようなスクリプトを用意します。

#!/bin/sh

 

echo "Content-Type: text/plain"

echo

 

whoami

これを、今回は who.cgi という名前で保存することにします。

そして、これを suEXEC が許可されるユーザの public_html/ ディレクトリへコピーして Web ブラウザからそれを実行します。

たとえば www.mydomain というサーバで、ユーザーアカウント user のディレクトリ、/home/user/public_html/ に用意した場合には、http://www.mydomain/~user/who.cgi で実行することができます。

suEXEC がうまくいった場合には、ブラウザ上に実行中のユーザアカウント名が表示されます。今回の場合は user と表示されるはずです。

 

うまくいかなかった場合には次のことを確認してみてください。

  • 目的のユーザのユーザ ID が --suexec-minuid で指定したユーザ ID 以上であるか
  • 目的のユーザのグループ ID が --suexec-mingid で指定したグループ ID 以上であるか
  • Apache の実行アカウントが、--suexec-caller で指定したユーザと一致しているか
  • ちゃんと suEXEC が利用可能になっているか
  • ちゃんと AddHeader cgi-script .cgi が設定されているか
  • ユーザのホームディレクトリ上で Options ExecCGI が有効になっているか
  • public_html/ がそのユーザの所有物となっているか
  • who.cgi の所有者が、その public_html/ ディレクトリの Owner になっているか
  • who.cgi の所有グループが、その public_html/ ディレクトリの Group になっているか
  • who.cgi が自分自身が実行できる権限に設定されているか ( chmod u+x who.cgi )
  • who.cgi がほかの人が書き換えられるようになっていないか ( chmod go-w who.cgi )

 

自分自身、このあたりの調整ですっごくてこずってしまいましたので、そのあたりをもうちょっと書いてみることにしますね。

 

--suexec あたりの設定確認

このあたりはちょっと確実なチェックはできないので、不安だったら ./configure あたりからやり直してください。一応、,/configure を行った後にできあがる Makefile の中の #  suexec details (optional) あたりで見ることができるので、ここでチェックするのもいいでしょう。

 

Apache の実行アカウントが --suexec-caller で指定したユーザと一致しているか

まず、--suexec-caller に指定したユーザの確認方法は、上記の --suexec あたりの設定確認 を参照してください。Apache の実行アカウントは、/usr/local/apache/conf/httpd.conf の中の、User の設定を確認してみてください。

 

ちゃんと suEXEC が利用可能になっているか

まず、/usr/local/apache/bin/httpd -V を実行すると、Apache の設定が表示されます。このなかで、-D SUEXEC_BIN の値で設定されているのと同じ場所に suexec があるかを確認します。また、その suexec のパーミッションが -rws--x--x となっていること、所有者が root、所有グループが root となっていることなども確認しておきましょう。また、ちゃんと Apache が suexec を見つけたかどうかは logs/error_log に [notice] suEXEC mechanism enabled というログが残っているか で確認することができます。

 

CGI のパーミッションについて

suEXEC を使用して CGI を実行する場合、その CGI がおかれている public_html/ と同じユーザとグループ設定になっている必要があります。たとえばユーザアカウント user、グループが users というアカウントのホームディレクトリにある public_html/ の場合、その中の CGI スクリプトもまた、所有者 user、所有グループ users となっている必要があります。またその他の権限も重要で、自分以外にたいして書き込み権限があってはいけないようです。suexec はそのユーザになりきって実行しますので、グループやその他のユーザに対しては特に権限は必要ないので、700 というパーミッション設定でいいと思います。