31.suEXECでセキュリティ強化(2004/04/07)
31.1.suEXEC稼動開始
CGIは通常、hogehogeというユーザ所有のCGIファイルであっても、Webサーバのユーザ権限で動作します。
が、このsuEXECという得体の知れないプログラムを使うことで、CGIの所有者権限で動作させることができます。
これにより、CGIの属性を755にしたり、ログファイルを他ユーザでも書きこめるように666なんぞにする必要がなくなり、セキュリティを高められるというものです。
suEXECを有効すること自体は、簡単極まりないです。
chmod 4711 /usr/sbin/suexec
/etc/rc.d/init.d/httpd restart
|
suEXECの属性を変更して、apacheの再起動でOK。
これで、/var/log/httpd/error_log に ”[notice] suEXEC mechanism enabled (wrapper: /path/to/suexec)”なんてメッセージが出てたら成功。
ついでにsuEXECを無効にする方法は以下の通り。
chmod 0711 /usr/sbin/suexec
/etc/rc.d/init.d/httpd restart
|
31.2.既存環境の変更&http.confをイジる
まぁ、suEXECを有効にするぐらいは、ちょっとググればわかるんですよ。
しかし、Vineを使って、こうすれば動く!って解説してるページがあんまり無くって、まともにCGIが動かず。
実際、Vineに元々インストールされているsuEXECには一部問題があるし。(そのことについては後述)
ちなみに、今まで動いていたCGIが動かなくなるのは、suEXECがセキュリティチェックをしていて、
それに反するとCGIの実行ができなくなるwrapper的な役割もしているから。
そのセキュリティチェックでハマりそうなところは以下の3項目。
- CGIプログラムの属性(他人が書き込み可能だとNG)
- CGIプログラムの所有者&グループと同じユーザ&グループで実行させる
- CGIプログラムはWeb空間を越えてはならない。(リンクに注意)
1.と3. は、少し調べれば間違えることはないのだが、2. が気付かない。
そもそも、同じユーザ&グループで動かすっていう意味がわからなかった。(爆)
それでは、まずは1. の属性変更から。
| ファイル種別 |
通常 |
suEXEC使用時 |
| CGIファイル |
755 |
700 |
| logファイル |
666 |
600 |
読出専用ファイル (PerlライブラリやGIF、HTMLなど) |
644 |
600 |
ファイル生成ディレクトリ (lockディレクトリ等) |
777 |
700 |
通常の属性から、suEXEC使用時の属性へ変更する。
要は、実行ユーザ以外は読み書きできない設定です。
で、2.の設定。
これは、httpd.confにて<VirtualHost></VirtualHost>設定内にCGIファイルのユーザとグループ名で動かす設定をします。
〜/etc/httpd/conf/httpd.conf〜
<VirtualHost www.ashiyu.no-ip.com:2001>
DocumentRoot /home/httpd/html
User ashiyu
Group ashiyumember
</VirtualHost>
|
注意すべき点としては、必ず<VirtualHost>内にてUser,Groupの設定をすること!
外に記述すると、httpdを動かすUserやGroupを設定してしまうことになる。(VineのDefaultはUser,Groupともにapacheだったかな!?)
これでも動くんだが、セキュリティ的にはやヴぁいです。
ちなみに、Apache 2.0系では、”SuexecUserGroup user group”という記述が可能。(こっちのほうがわかりやすいな)
3. はlnコマンドなどでリンク張るときに、Web領域外へのリンクをしないように気をつければ問題なし。
これで、CGIの所有者権限でCGI実行が可能になりまっす。
最後に:
Vine固有の問題(問題と言い方には語弊があるかも、仕様と言った方が正しいか!?)なんだけど、CGIファイルを置く場所によってはsuEXECが使えません。
例えば、/home/ashiyu/public_html/ の下にhogehoge.cgi を置いて、上述したことを実行したとしても、/var/log/httpd/error_log に
error: command not in docroot (/home/ashiyu/public_html/hogehoge.cgi)
|
なんてエラーが出やがる。
これは何だ?と調べたところ、suEXECでCGIを動かすとき、「suexec-docroot以下にCGIスクリプトがないと実行できませんよ」ってことらしい。
残念ながら、このsuexec-docroot はsuEXECをコンパイルするときのみしか指定できないらしい。
Vineに元々組み込まれているsuEXECはどーなっているのかというと、--suexec-docroot=/home/httpd/html てな感じのコンパイルオプションになっている。
そんなわけで、解決策としては、
- --suexec-docrootを変更してsuEXECをコンパイルし直す
- 諦めて、/home/httpd/html 以下で使用する
の2通りになります。
ワシは、コンパイルするのが面倒なので、後者を選択しています。
VineでsuEXECが使えん!とハマっておられるそこのあなた、docrootを疑ってみませう。
管理人の戯言トップ |
ホームに戻る |