(2003.10.19新規作成;
2004.6.12更新; 2006.5.5更新)
Fedora Core 5には、Apache HTTP Server 2.2.0 (Apache2)、GUIで設定できるsystem-config-httpdが含まれるが、suEXEC(後述)の設定が希望するものと違うので、自分でコンパイル・インストールした。
以下では、バーチャルホスト(virtual host; 仮想ホスト)とsuEXECを有効にしてインストールする。
次のようなURLとディレクトリの対応を想定する。
URL | ディレクトリ |
---|---|
http://my.domain/~*/ | /home/*/public_html/ |
http://subdomain.my.domain/ | /home/foouser/anydir/ |
まずはファイルをダウンロードする。ファイルは次の場所にある。
ネットワークへの負荷を考えて,日本国内のサーバーからダウンロードする。ファイル名はhttpd-x.y.z.tar.gz(x, y, zはバージョン番号)であり,一番新しいファイルをダウンロードする。
ファイルがダウンロードできたら,展開する。
$ bzip2 -dc httpd-2.0.52.tar.bz2 | tar xvf - $ cd httpd-2.0.52
次に、Apacheに組み込むモジュールの設定を行う。モジュールの一覧は、モジュール一覧 - Apache HTTP サーバにある。
モジュールを選ぶとき、どういう方針でいくか。
$ ./configure --enable-mods-shared=most --enable-suexec --with-suexec-caller=apache \ --with-suexec-docroot=/home --enable-ssl=static
$ ./configure --enable-rewrite --enable-so --enable-suexec \ --enable-vhost-alias --with-suexec-caller=apache \ --with-suexec-uidmin=500 --with-suexec-gidmin=500 \ --with-suexec-docroot=/home --enable-ssl
vhost-alias の名前がApache 2.0から変わり、アンダースコアからハイフンになっている。
また、Apache 2.0では、--enable-ssl=static オプションを付ける。OpenSSLのコンパイル時の設定によっては実行時にX509_free()が見つからないエラーになることがあって、その回避のため。
どのモジュールが有効になっているかは、modules.c で確認できる。
(この節、2006.5.6更新)
suEXECは、各ユーザーのpublic_html/以下にあるCGIプログラムをそのユーザ権限で実行する。ホームディレクトリ以下にapacheユーザ (各ユーザから見るとother) の書き込み許可を与えなくてもよくなる。
CGIプログラムではない静的なHTMLファイルは、依然としてapacheユーザ権限でアクセスするので、public_htmlのパーミションは701でなければならない。
Note. Red Hat Linux / Fedora Coreは、ユーザープライベートグループ (User Private Group=UPG; ユーザごとにグループを生成する) を採っているので、groupのパーミションは重要ではない。
suEXECは、Apache 2.2のコンパイル時に設定する。
suEXECでカバーされないディレクトリは、apacheユーザでCGIプログラムが実行される。このようなCGIプログラムは、直接suexecコマンドを実行し、suexec-docroot以下のディレクトリにあるプログラムを別のユーザに成りすまして実行できる。mod_phpもapacheユーザで動くことに注意。潜在的なセキュリティ上の脆弱性が生じるので、suEXECを使うかどうか、suexec-docrootをどう設定するかも含めて十分な検討が必要。
次いで、コンパイル、インストールする。
$ make $ su # make install
以上で,/usr/local/apache2ディレクトリにインストールされる。
きちんとインストールされたか、設定を見ておく。suexecコマンドは、rootユーザが呼び出したときに限り、-Vオプションを付けると設定を表示する。
# ../bin/suexec -V -D AP_DOC_ROOT="/home" <----ここが/homeになっているか -D AP_GID_MIN=100 -D AP_HTTPD_USER="apache" -D AP_LOG_EXEC="/usr/local/apache2/logs/suexec_log" -D AP_SAFE_PATH="/usr/local/bin:/usr/bin:/bin" -D AP_UID_MIN=100 -D AP_USERDIR_SUFFIX="public_html"
次に,設定ファイルを変更する。Apacheの設定ファイルのファイル名はhttpd.confで,/usr/local/apache2/confディレクトリにある。何ヶ所か変更を加えておく。
LoadModuleディレクティブで読み込まれているモジュールで不要なものをコメントアウトしておく。
#LoadModule ext_filter_module modules/mod_ext_filter.so #LoadModule dav_module modules/mod_dav.so #LoadModule dav_fs_module modules/mod_dav_fs.so
Apache 2.2では、設定ファイルがいくつかに分かれている。httpd.confファイルのなかでIncludeしている。別ファイルになっている設定ファイルは、conf/extraディレクトリにある。例えば、mod_rubyについては、mod_rubyメモを参照。
httpdを実行するユーザー名,グループ名を変更する。デフォルトではnobodyだが,何でもかんでもnobodyで動かすと,nobodyユーザーが乗っ取られたときのリスクが大きくなる。
# User/Group: The name (or #number) of the user/group to run httpd as. # It is usually good practice to create a dedicated user and group for # running httpd, as with most system services. User apache Group apache
サーバー管理者のメールアドレスを設定する。
# ServerAdmin: Your address, where problems with the server should be # e-mailed. This address appears on some server-generated pages, such # as error documents. e.g. admin@your-domain.com # ServerAdmin root@ホスト名
次に、.htaccessで設定を変更できる範囲を拡大する。これはhttpd-userdir.confファイルに書く。
# Control access to UserDir directories. The following is an example # for a site where these directories are restricted to read-only. # <Directory /home/*/public_html> AllowOverride All Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec </Directory>
AddDefaultCharsetは明示的に文字コードの指定がないときに付加する文字コードを指定する。日本語の文書のときにもISO-8859-1を付けられては不味いので、設定を殺しておく。
# reasons in browsers, related to javascript and URL parsing # which encourage you to always set a default char set. # #AddDefaultCharset ISO-8859-1
バーチャルホスト (virtual host) を設定するときは、あらかじめDNSのほうも変更しなければならない。参照;djbdns(tinydns, dnscache) を使う
ここでは、orange.fruits、d.orange.fruitsが同じIPアドレスを指すようになっているものとする。
conf/extra/httpd-vhosts.confファイルで設定する。
NameVirtualHost *:80 <VirtualHost *:80> ServerName orange.fruits </VirtualHost> <VirtualHost *:80> ServerName d.orange.fruits DocumentRoot /home/hori/public_diary UserDir disable SuexecUserGroup hori hori </VirtualHost>
ホスト名ベース(ひとつのIPアドレス)のバーチャルホストにするので、NameVirtualHostを指定する。
SuexecUserGroupで指定したユーザー・グループでCGIプログラムは実行される。
httpd.confなどの設定ファイルを変更したら、httpdコマンドで確認しておく。誤りがある場合はエラーメッセージが出るので、適宜修正する。
# ../bin/httpd -t Syntax OK
Apacheを起動するには、/usr/local/apache2/binにあるapachectlコマンドを使う。
# ./apachectl start
error_logファイルに起動メッセージが記録される。suEXECが有効になっていることを確認する。
chkconfigコマンドでシステムの起動時にapacheを起動するかどうか設定できるようにするために、apachectlスクリプトの最初のほうに次の行を追加しておく。
# chkconfig: - 85 15 # description: Apache HTTP Server.
また、/etc/rc.d/init.d/httpd(または/etc/init.d/httpd)へのシンボリックリンクを張っておく。