CGIWrapの設定とインストール

//概要
CGIWrapはSuexecの様な「ユーザ権限でCGIを実行できる」ラッパーである。
使い方次第でSuexecよりも使い勝手が良いため、導入する方も少なくない。
今回は、そのCGIWrapの仕組み/設定/インストールまでを行う。


//CGIをユーザ権限で実行する意味とは?
通常、CGIはサーバにあるhttpd(Apache等)で設定されたユーザ(デフォルトではapacheやnobody)
により実行される。その際、ログを読み書きする場合にはCGI実行ユーザとファイルの所持者が違うため
そのログファイルのパーミッションを+w(だれでも書き込める様)に設定しなければならない。
ここで少し考えてほしい。
「誰でも書き込むことができる」と言うことは、「同サーバ上の他ユーザでも書き込める」
と言うことになってしまう。これではログを書き換えられてしまう恐れがあり、セキュリティ上好ましくない。
そこで出てくるのがCGIWrapやSuexec等のラッパーである。ラッパーを通して実行することにより
CGIがその所持ユーザにより実行されるため、ログのパーミッションを誰でも書き込める様に設定する必要が無くなる。
これにより、他のユーザに不正にファイルを書き換えられるのを防ぐことができるわけだ。


//設定・インストール
・ここでは、当サーバの設定を例に一連の流れを説明する。

○ファイルのダウンロード・展開
http://cgiwrap.unixtools.org/よりCGIWrapの最新版をダウンロードして、展開する

[root@www ~]# wget http://jaist.dl.sourceforge.net/sourceforge/cgiwrap/cgiwrap-3.9.tar.gz => `cgiwrap-3.9.tar.gz.1′
jaist.dl.sourceforge.net をDNSに問いあわせています… 150.65.7.130
jaist.dl.sourceforge.net[150.65.7.130]:80 に接続しています… 接続しました。
HTTP による接続要求を送信しました、応答を待っています… 200 OK
長さ: 138,875 [application/x-gzip]
100%[================================>] 138,875 541.00K/s
19:57:25 (539.90 KB/s) – `cgiwrap-3.9.tar.gz’ saved [138,875/138,875]
[root@www ~]#tar zxvf cgiwrap-3.9.tar.gz
cgiwrap-3.9/
cgiwrap-3.9/COPYING
    ・
    ・
    ・
cgiwrap-3.9/util.c
cgiwrap-3.9/util.h
[root@www ~]#cd cgiwrap-3.9
[root@www cgiwrap-3.9]#

○CGIWrapの設定/インストール
./configure の後に続くオプションでCGIWrapを設定していく。主なオプションはこちらのConfiguration Optionsに掲載してある(英語)
なお、最小限’–with-install-dir’と’–with-httpd-user’ は必要となっている。

[root@www cgiwrap-3.9]#./configure –with-perl=/usr/bin/perl \ ←perlの位置 > –with-local-contact-email=webmaster@dabits.net \ ←管理者メールアドレス
> –with-install-dir=/var/www/cgi-bin \ ←インストールディレクトリを設定(CGIWrapの推奨設定)
> –with-cgi-dir=html \ ←ユーザディレクトリをhtml
> –with-httpd-user=apache \ ←httpd実行ユーザをapache
> –with-check-shell \ ←シェルユーザによる実行禁止
> –without-logging-file ←ログの記録をしない
checking build system type… i686-pc-linux-gnu
    ・
    ・
    ・
config.status: creating config.h
config.status: config.h is unchanged
[root@www cgiwrap-3.9]# make ←コンパイル
gcc -c -g -O2 -I. -I. cgiwrap.c
gcc -c -g -O2 -I. -I. debug.c
gcc -c -g -O2 -I. -I. util.c
gcc -c -g -O2 -I. -I. fetch.c
gcc -c -g -O2 -I. -I. stdutil.c
gcc -c -g -O2 -I. -I. msgs.c
gcc -o cgiwrap cgiwrap.o debug.o util.o fetch.o stdutil.o msgs.o
[root@www cgiwrap-3.9]# make install ←インストール
rm -f /var/www/cgi-bin/cgiwrap
rm -f /var/www/cgi-bin/cgiwrapd
rm -f /var/www/cgi-bin/nph-cgiwrap
rm -f /var/www/cgi-bin/nph-cgiwrapd
# rm -f /var/www/cgi-bin/php-cgiwrap
# rm -f /var/www/cgi-bin/php-cgiwrapd
cp cgiwrap /var/www/cgi-bin/cgiwrap
chown root /var/www/cgi-bin/cgiwrap
chgrp root /var/www/cgi-bin/cgiwrap
chmod 4755 /var/www/cgi-bin/cgiwrap
ln /var/www/cgi-bin/cgiwrap /var/www/cgi-bin/cgiwrapd
ln /var/www/cgi-bin/cgiwrap /var/www/cgi-bin/nph-cgiwrap
ln /var/www/cgi-bin/cgiwrap /var/www/cgi-bin/nph-cgiwrapd
# ln /var/www/cgi-bin/cgiwrap /var/www/cgi-bin/php-cgiwrap
# ln /var/www/cgi-bin/cgiwrap /var/www/cgi-bin/php-cgiwrapd
[root@www cgiwrap-3.9]#cd ..
[root@www ~]# rm -rf cgiwrap-3.9 ←解凍したディレクトリを削除
[root@www ~]# rm -f cgiwrap-3.9.tar.gz ←ダウンロードしたファイルを削除

○Apache再設定
CGIWrapを適用するためApacheを再設定する。

[root@www ~]# vi /etc/httpd/conf/httpd.conf
Action cgi-wrapper /cgi-bin/cgiwrap/apache
↑追加(ドキュメントルートにあるスクリプトをapache権限で動作させるため。)

# ScriptAlias /cgi-bin/ /var/www/cgi-bin/ ←コメントをはずす

ScriptAlias /cgi-bin/ /var/www/cgi-bin/
AddHandler cgi-script .cgi .pl ←変更(CGIの実行をCGIWrap経由にさせる。)

AddHandler cgi-wrapper .cgi .pl
Action cgi-wrapper /cgi-bin/cgiwrap ←追加(〃)
[root@www ~]# /etc/init.d/httpd restart ←Apache再起動

コメントを残す

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