Webサーバで最大のセキュリティリスクはCGIアプリケーションにあります。
デフォルトのApacheでは、サーバはApacheのユーザID(nobody等)でCGIアプリケーションを実行するため、簡単なCGIを作成することで他のユーザのディレクトリ内のファイルがみることができたり思わぬ被害が出てしまいます。
所有者のユーザIDでCGIアプリケーションが実行することができれば、ダメージをそのユーザIDのアクセス権限内に制限できます。この機能がSuExecという機能です。
Webサーバで最大のセキュリティリスクはCGIアプリケーションにあります。
デフォルトのApacheでは、サーバはApacheのユーザID(nobody等)でCGIアプリケーションを実行するため、簡単なCGIを作成することで他のユーザのディレクトリ内のファイルがみることができたり思わぬ被害が出てしまいます。
所有者のユーザIDでCGIアプリケーションが実行することができれば、ダメージをそのユーザIDのアクセス権限内に制限できます。この機能がSuExecという機能です。
SuExecを利用するにはコンパイルが必要です。ここではapache_1.3.29をダウンロードしたものとして説明します。
ソース入手方法等の基礎知識はApache1系標準インストールを参照してください。
SuExecのコンパイルは2種類の方法があります。
(1) ユーザディレクトリ(UserDir)での運用
$ tar cvfz apache_1.3.29 $ cd apache_1.3.29 $ ./configure --enable-suexec --suexec-caller=nobody \ --suexec-userdir=public_html --suexec-uidmin=100 --suexec-gidmin=100 $ make $ su # make install
利用の環境に合わせて以下のコンパイルオプションの引数の変更が必要です。
--suexec-caller=nobody
httpd.conf内のApacheが動作するユーザ名へ変更します。
--suexec-userdir=public_html
httpd.conf内のホームディレクトリの定義(UserDir)の値に変更します。
--suexec-uidmin=100
--suexec-gidmin=100
SuExecを実行するもっとも小さいユーザID,グループIDを指定します。
よっぽどのことが無い限り100で十分だと思いますが/etc/passwdファイルを参照ください。
これでユーザディレクトリ(UserDir)でSuExecが有効となります。
(2) バーチャルホスト(VirtualHost)での運用
$ tar cvfz apache_1.3.29 $ cd apache_1.3.29 $ ./configure --enable-suexec --suexec-caller=nobody \ --suexec-docroot=/home --suexec-uidmin=100 --suexec-gidmin=100 $ make $ su # make install
利用の環境に合わせて以下のコンパイルオプションの引数の変更をしてください。
--suexec-caller=nobody
httpd.conf内のApacheが動作するユーザ名へ変更します。
--suexec-docroot=/home
バーチャルドメインが定義しているディレクトリを指定します。
--suexec-uidmin=100
--suexec-gidmin=100
SuExecを実行するもっとも小さいユーザID,グループIDを指定します。
よっぽどのことが無い限り100で十分だと思いますが/etc/passwdファイルを参照ください。
ほとんど、ユーザディレクトリ構成と代わりませんが、間違いやすいのでコンパイルの際には気をつけてください。
(1) ユーザディレクトリ(UserDir)での運用ではとくに定義は必要はありません。自動的にユーザディレクトリで動作するユーザIDに変更になります。
(2) バーチャルホスト(VirtualHost)での運用ではバーチャルドメインの定義内に以下のように実行したいユーザID、グループIDを指定する必要があります。
<VirtualHost 192.168.0.10> ServerAdmin webmaster@example.com DocumentRoot /home/examplecom/public_html ServerName www.example.com ErrorLog /home/examplecom/logs/error_log CustomLog /home/examplecom/logs/access_log common User examplecom Group users </VirtualHost>
User・・・ユーザIDの指定
Group・・・グループIDの指定
となります。
定義をしなければApacheの権限(nobody等)でそのまま動作します。
では実際に、SuExecの動作確認をしてみましょう。
以下の様な簡単なスクリプトを作成し、実行することでCGIの実行権限が確認できます。
suexec.cgiとでも保存して動作確認をしてください。
#!/usr/local/bin/perl print "Content-type: text/plain\n\n"; printf "user = %s\n",(getpwuid($>))[0]; exit;
実行後、Apacheの動作ユーザでは無く指定したユーザ名が表示されれば完成です。
ONE VOICE THE SONGS OF CHAGE&ASKA BY VARIOUS ARTISTS EMIミュージック・ジャパン / |
|
NOW 2 EMIミュージック・ジャパン / |
|
BOOM 釈迦‐楽 マーキュリー・ミュージックエンタテインメント / |