さくらVPSでsuEXECを設定しました -修正しました-

前のエントリーでさくらのVPSを使い始めましたという記事を書いたのですが、movabletypeをインストールするにあたってはやはり共用サーバーとは勝手が違う事もあったりして色々と困っていたりしました。

一番大きな違いはsuEXECだと思われます。ちなみに共用サーバーでは通常suEXEC環境になっているため普段共用サーバーを使っているとあまりこの事を意識することはないかと思います。なのでVPSを借りた当初は普通にmovabletypeのインストールを始めるわけなんですが、作業を続けているうちにパーミッションエラーが出まくってどうもこれは勝手が違うということに気づくわけです。共用サーバーもVPSもApacheのはずなのに何が違うって言うんだ・・・・・って事でいろいろ調べてたのですが、suEXECを設定すればいいという事が分かったので早速設定を始めました。suEXECを設定すれば共用サーバーと同じような感覚になれます。
suEXECって何??っていう人はここに書いてるので読んでみてください。
自分この記事を見た瞬間かなりやる気が無くなりかけたんですが、一生懸命読んで理解しましたよw
ちなみにさくらVPSのCent OS5.5は既にsuEXEC自体は導入済みですので、新たにインストールは不要です。なので、設定を有効化してあげるだけでOKです。

うちの設定ではApache公開ディレクトリ /var/www/ がホームのユーザーを新たに作って、その下に各ドメイン用のディレクトリを配置してそこへmovabletypeをインスコしています。例えば /var/www/html/example.com/ みたいな感じですね。CGIもこのユーザーで実行させます。FTPもこのユーザーで使っています。
ホームが /var/www/ のユーザーを作る方法はここに書いてあるので参考にしてください。ちなみにsudo出来たりsuになれるユーザーでFTPを使うのはセキュリティ上好ましくないので必ずFTP用ユーザーを作ってください。

では設定始めます。
流れとしては

sudo vi /var/log/httpd/error_log

でApacheのエラーログを見てsuEXECが有効になっているのか確認
suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
という一行が出てればsuEXECは有効になっているのでOKです。これがない場合は・・・・インスコからやらないといけないんですかね?インスコからやる人はgoogleで調べてみてください。
次にhttpd.conf の修正(下記のうちの3行目を追加)
ここで設定したユーザー名とグループによってCGIが実行されます。上で作った /var/www/ ホームのユーザーを指定しました。

User apache
Group apache
SuexecUserGroup user group

最後に公開ディレクトリとそれ以下のファイル全て上記で設定したユーザー、グループの所有に変更すればOKです。
以下の簡単なCGIを公開ディレクトリで実行してみて、ブラウザにApacheではなく設定したユーザー名が表示されればOKです。

#!/usr/bin/perl
print "Content-type: text/plainnn";
print `whoami`;

上手く動かない場合はsuEXECのエラーログを見てみるといいです。
場所は /var/log/httpd/suexec.log です。
正常に動いていない場合はエラーが吐き出されますので、それを参考にして設定を直すといいです。
自分の場合は下記のようなエラーが出ていたので、これに合わせて所有を変更してOKでした。

target uid/gid (501/500) mismatch with directory (501/0) or program (501/501)

target uid/gid (501/500) の部分がhttpd.confで設定したユーザーとグループなのですが、それに対してディレクトリとプログラムの所有が異なるというエラーなので、所有者変更でディレクトリとファイルを全部501/500になるように合わせればOKでした。
今回参考にしたサイトは下記のサイトです。ありがとうございました。

※参考サイトではディレクトリパーミッションは711にするように書いてあるのですが・・・
うちでは755で動くのでパーミッションは特に変えていません。問題ないと思うのですがどうでしょうかね。
それとこのブログはまださくらVPSには移行していません。崩壊とOS再インストールを繰り返しているので、いつになるかな・・・・・

日本Apacheユーザー会 CGIのSuexec実行
パソコンおやじ suEXEC環境への移行
あのねちょう CentOS上でsuEXECを動かすのに苦戦したのでまとめ
WEBサイト+phpリファレンス SuexecUserGroupでsuexec権限でcgiを実行する
suExecの設定

この記事を書いた人

管理人

東京でフロントエンドまわりをやっています。
趣味はゲーム、音楽、ポータブルオーディオです。