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で設定を行いましたが、たぶんそのバージョン付近だったらだいたい同じだと思われます。
次に、/etc/apache2/suexec/www-dataファイルが作成されているかどうか確認してください。ちょっと順序を確かめていないのですが、もしこのファイルがなかったら、
最後に適当なスクリプトを使って実験してみてください。今までwww-dataがオーナーだったファイルが自分の所有者権限で動き出します。
これらの設定で何かしらの不都合が出たら、# a2dismod suexecでモジュールを切り離してみてください。
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としてsuexecモジュールを有効にしてみてください。ファイルが見つかったら適当なエディタで開きます。
Enabling module suexec.
/var/www
public_html/cgi-bin
suexecの設定
デフォルトでは上記のようになっています。このファイルにsuexecを有効にするディレクトリを追加します。大抵の場合はドキュメントルートの/var/wwwとごく頻繁に使うpublic_html/cgi-binに設定されています。cgiスクリプトを有効にしているディレクトリに合わせてこの設定を行います。というのもsuexecはスクリプトの実行オーナーを変える設定なのでスクリプトの走らないディレクトリを指定しても意味がありません。ですので、例えば/home/*/public_html以下でスクリプトを許可している場合は、/var/wwwというように書き換えてください。さらに/var/wwwを使用していない場合は、public_html一行でOKです。設定が終了したら保存して、もう一度、
public_html
# a2enmod suexecで再起動して設定は終了です。
# /etc/init.d/apache2 restart
最後に適当なスクリプトを使って実験してみてください。今までwww-dataがオーナーだったファイルが自分の所有者権限で動き出します。
これらの設定で何かしらの不都合が出たら、# a2dismod suexecでモジュールを切り離してみてください。



