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項目。
  1. CGIプログラムの属性(他人が書き込み可能だとNG)
  2. CGIプログラムの所有者&グループと同じユーザ&グループで実行させる
  3. 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 てな感じのコンパイルオプションになっている。 そんなわけで、解決策としては、 の2通りになります。 ワシは、コンパイルするのが面倒なので、後者を選択しています。 VineでsuEXECが使えん!とハマっておられるそこのあなた、docrootを疑ってみませう。

管理人の戯言トップ | ホームに戻る |

webmaster@ashiyu.net