■状況
CentOS使用
メンテの都合上apacheはデフォルトのまんま,yumで.
suexecの示してるディレクトリが/var/www なので,他のディレクトリ(/home/hoge/webとする)で動かしてるvirtualhostに対してsuexecが使えない.
■症状
cgi実行時,エラーログに
・Premature end of script headers
・suexec policy violation: see suexec log for more details
が出てる.
suexecのログには
・command not in docroot
が出てる.
■原因
suexecのdocrootが/var/wwwになっているので,その下のディレクトリじゃないとsuexecで実行させてもらえない.
(mod_userdirのときは別っぽい?)
/usr/sbin/suexec -Vしてみると
-D AP_DOC_ROOT="/var/www"
ということで,確かに/var/wwwになってる.
■対応法その1
・
suexecを再コンパイルすることなくCGI実行可能なトップディレクトリを変更する方法 » fanta-orange
これすげぇぇぇぇ!(suexecのバイナリ内で/var/wwwになってるところを書き換える)
と思ったが,suexecが書き換わったら再度やるのよね…ということで今回はパス.
■対応法その2
・
特定の VirtualHost でのみ SuEXEC したい - ふしぎなぼうし
こちらは/var/www以下の適当な場所に/home/hoge/webをmountする方法.
# mkdir /var/www/mnt/hoge/web
# mount --bind /home/hoge/web /var/www/mnt/hoge/web
httpd.confのDocumentRootも/var/www/mnt/hoge/webに変えてやる.
reloadして完了.
しかしこれはこれで/var/wwwの下に行っちゃっうので/homeのつもりで使ってると不具合あり(パーミッションとか).
使えるかどうかはシチュエーション次第だなぁ.
/home をbindしたほうが良かったかも?