Killing Time 2nd

備忘録、日々の徒然想いを残します。

Apache on EtchのCGI

玄箱で家サーバを構成しているのだが、今まではISPホスティングサーバでc-board、404 not foundという掲示板のCGIを愛用させてもらってきた。これらを玄箱に移行してISPの契約が切れる7月で更新せず家サーバに一本化しようとしている。
しかし、そのc-boardが上手く動かない。エラーメッセージとして以下のようになっている。

[Thu May 08 09:34:09 2008] [error] [client *.*.*.*] (13)Permission denied: exec of '/usr/lib/cgi-bin/c-board38/data/c-board.css' failed, referer: http://*.*.jp/cgi-bin/c-board38/c-board.cgi?cmd=lgn;id=

こういったエラーメッセージが多数と、

[Fri May 09 23:55:51 2008] [error] [client 192.168.3.5] File does not exist: /usr/lib/cgi-bin/c-board38/image/mnu_table_rd.gif, referer: http://*.*.jp/cgi-bin/c-board38/c-board.cgi

が大量に発生していた。一応掲示板は表示はされ、投稿は出来るのだが画像が表示されずキャラクター、文字のみが表示されていた。はじめファイル、ディレクトリのパーミッションの間違い、ファイル転送時のバイナリーモード、アスキーモードの間違いを疑っていた。ファイル所有者を色々変えたり、ファイルの改行コードをいじったりしたのだが一向に直らず。
そこではじめに戻って/etc/apache2を見直してみた。玄箱Debian Etchなのだが、このDebianの設定ファイルは他と違ってhttpd.confに記述するのではなくapache2.confとsite-available下のファイルを設定する。そこで改めて見直してみる。cgi-binの設定はディレクティヴ、ScriptAliasで設定している。ScriptAliasの意味について調べてみる。
Apache HTTP Server Version 2.2 Documentation - Apache HTTP Server Version 2.2によると、ScriptAliasは

ディレクトリ中の全てのファイルを CGI プログラムであると仮定します。 そして、この特別なリソースがクライアントから要求されると、 そのプログラムの実行を試みます。

とある。つまりこのディレクトリ以下に画像データやスタイルシートを置いてもすべて実行使用とするという訳だ。そこでScriptAliasをただ単にAliasに変えるとちゃんと画像も表示された。
この辺りDebianの姿勢として安全性を第一にCGIと画像などの他のデータを分離することで担保しようとしているようだが、実際出来合いのCGIスクリプトを利用しようとするとパスの変更が面倒だったりするので、要注意というところ。
これで家サーバへの移行が一歩進んだ。