Dabits

サーバサイドから運営まで何でもやるエンジニア系DJ

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再起動