suEXECの設定

2010.10.26 0:42
 Apacheにはsuexecという便利な機能があって、サーバーサイドのスクリプトを走らせる人間には必要不可欠といっていい機能です。Apache(現在のところApache2)は、そのままのプレーンな設定では(といってもプレーンとかノーマルとかいう人間がいないようにApache2もまた人どれぞれの設定をしているわけですが...)、オーナーの問題でちょっとややこしいことが起きてきます。
 PHPやPerl、rubyやPythonなどサーバーサイドのスクリプトからファイルを作ったり削除したりといろいろとするわけですが、これらの事実上の実行権限はそのサーバーの所有者ではなくてwww-dataという見ず知らずの方であって、彼はApacheそれ自身なのです。我々が自分で書いて、touch test.txtとした場合には如何にも自分自身が作りました!的な感慨に襲われるのですが実際は我々の手を離れてApacheがオーナーとして仕事しています。そのような場合、suexecは、httpd(Apache)のユーザー権限ではなく、その所有者(自分)のユーザー権限でCGIなどのスクリプトを実行してくれるというプログラムです。
http://httpd.apache.org/docs/2.0/ja/suexec.html
 公式ドキュメントにはセキュリティーに関していちいち恐ろしげなことを書いていますが、用はパーミッション関係の話をわかっていれば大丈夫です。パーミッション関係のことがよくわからないうちに、777と666と755にしてみたら...なんか正常にプログラムが動き出した!という方は勉強しなおしましょう。
 ここではUbuntu 9.10で設定を行いましたが、たぶんそのバージョン付近だったらだいたい同じだと思われます。

suexecのインストール

# apt-get -y pt-get -y install apache2-suexec-custom
で一発インストール。
 次に、/etc/apache2/suexec/www-dataファイルが作成されているかどうか確認してください。ちょっと順序を確かめていないのですが、もしこのファイルがなかったら、
# a2enmod suexec
Enabling module suexec.
 としてsuexecモジュールを有効にしてみてください。ファイルが見つかったら適当なエディタで開きます。
/var/www
public_html/cgi-bin

suexecの設定

 デフォルトでは上記のようになっています。このファイルにsuexecを有効にするディレクトリを追加します。大抵の場合はドキュメントルートの/var/wwwとごく頻繁に使うpublic_html/cgi-binに設定されています。cgiスクリプトを有効にしているディレクトリに合わせてこの設定を行います。というのもsuexecはスクリプトの実行オーナーを変える設定なのでスクリプトの走らないディレクトリを指定しても意味がありません。ですので、例えば/home/*/public_html以下でスクリプトを許可している場合は、
/var/www
public_html
というように書き換えてください。さらに/var/wwwを使用していない場合は、public_html一行でOKです。設定が終了したら保存して、もう一度、
# a2enmod suexec
# /etc/init.d/apache2 restart
で再起動して設定は終了です。

 最後に適当なスクリプトを使って実験してみてください。今までwww-dataがオーナーだったファイルが自分の所有者権限で動き出します。
 これらの設定で何かしらの不都合が出たら、# a2dismod suexecでモジュールを切り離してみてください。






プロフィール



  • Name :: 山上オサム ♂(39)
  • Hobby :: 武術
  • Work :: Web Designer