先日、サーバの引っ越しでレンタルサーバにサイトを引っ越した時にCGIエラーが発生した時の備忘録となります。
MovableTypeを使用したサイトでしたが、ファイル、DBの設定が完了してログインをしようとすると下記の500エラーが発生して少しハマりました。。
suexec polcy violation: see suexec log for more detailsi
調べてみるとsuExecという仕組みでCGIが動いていて、これが原因となっていること。
suExecは、CGIを使用する上でのセキュリティの仕組みで、Apacheの実行ユーザとは別に指定したユーザによるCGIを実行を可能にする仕組みになります。
レンタルサーバでは良くありますが、1台のサーバで複数のWebサイトが入っておりそれぞれ別のユーザでFTPアップロードしてサイトを作成しています。
当然Apacheの実行ユーザとFTPユーザが違うのでパーミッションを777とか666など甘い状態にして動かしたりします。
suExecを使用するとCGIをFTPユーザで実行できるのでパーミッションを755などで設定します。
suExec下でCGIが実行されている場合、パーミッションを777にしていると逆にエラーにされてしまいます。
このエラーの回避方法
1.実行するCGIファイルと、ファイルがあるおディレクトリのパーミッションを755に変更
まずはこれが基本になります。
2.宣言文を変更する。
通常、宣言分は #!/usr/local/bin/perl -w の用に書きますがこれを下記のように変更します。
#! /usr/bin/perl —
このsuExec絡みのエラーは所有権の問題なので基本はパーミッション設定で直ると思います。