[Linuxメモ]SaaSesのVPS OsukiniサーバーでSuexecを使うには?

TS3Y0093
愛猫に会いたい今日この頃。一人寝は寂しいのですw。

さて、Osukiniサーバーを借りているのは前にも書いた通りです。このブログはCoreserver上にありますが、負荷が高めのウェブアプリはVPSの方に移しています。

SaaSesのVPS Osukiniサーバーを借りてみた。 – KUMA TYPE

[Linuxメモ]SaaSesのVPS、OsukiniサーバーLTで行った設定の私的メモ – KUMA TYPE

で、Suexecを設定するのが面倒なので、普通にパーミッションを設定していたのですが、今回Coreserverの方でアカウントに制限を掛けられて、ブログなどが503でまともに表示されなくなってしまったので、サーバーを引っ越すと共に負荷が高めのアプリはOsukiniサーバーの方に移動したり停止したりしました。で、アプリを動かすのにパーミッションの設定が面倒なのでSuexecを遅ればせながら設定することにしました。ちなみにOsukiniサーバーの場合最初からSuexecは有効になっています。最近はそうなのかしら?

設定の仕方は特に難しくないので、検索してみると色々あるので以下の様なサイト様を参考にするといいかと思います。

suEXEC環境への移行
SuEXECの設定 – メメメモモ

で、rootになってsuexec -Vしてみると以下のようにSuexecの情報が表示されるわけです。

[root@rad-xen-vweb7 ~]# suexec -V
-D AP_DOC_ROOT="/var/www"
-D AP_GID_MIN=100
-D AP_HTTPD_USER="apache"
-D AP_LOG_EXEC="/var/log/httpd/suexec.log"
-D AP_SAFE_PATH="/usr/local/bin:/usr/bin:/bin"
-D AP_UID_MIN=500
-D AP_USERDIR_SUFFIX="public_html"
[root@rad-xen-vweb7 ~]#

するとAP_DOC_ROOTつまりSuexecを利用するドキュメントルートディレクトリが/var/wwwになっているわけです。コンテンツは/homeディレクトリ配下に置いているのでこれではSuexecが使えないわけです。しかも、これって設定ファイルとかで設定するんじゃなくて/usr/sbin配下のsuexec実行ファイルの中に埋め込められているので簡単に変更できないわです。オプションを変更してApacheをリコンパイルする必要があるわけです。しかし自分でソースからインストールしたわけではなくデフォルトでインストールされているものなのでよくわからないしめんどくさい。そういうわけで、困って検索してみると下の記事を発見。参考にさせていただきました。
バーチャルホストでCGIを使う | Vagon

なるほど、バイナリファイルを直接書き換えちゃうわけですね。ディレクトリパスがもとより長くなると使えない技っぽいけど、今回はもとより短くなるので平気そうです。

ひと通り読ませていただいた後、実際にやって見ることにしました。ただ、わざわざemacsをインストールするのは面倒なのでviでいきました。

[root@rad-xen-vweb7 sbin]# cd /usr/sbin
[root@rad-xen-vweb7 sbin]# cp -p suexec suexec.org
[root@rad-xen-vweb7 sbin]# vi suexec

rootになって/usr/sbinに移動
念の為にsuexecのコピーを取ります。
そしてviを起動。バイナリモードもあった気もするが気にしなーい。

20121623
あたりまえですが、見事にぐちゃぐちゃです。

20121624
/wwwと入力して/var/wwwの箇所を検索します。

20121625
発見。ここを書きなおすわけです。普通に/var/wwwを/homeに書き換えます。結果3文字短くなるのでその分0で埋めたりするのだと思います。が、0うめできないのでコピーします。多分文字列の後の^@となっているところが0だと思うのでここにカーソルを持って行きylで1文字コピーしました。そして、3pで三回貼り付けします。

20121626
結果こうなります。そしたら:wqで保存して終了します。

[root@rad-xen-vweb7 sbin]# suexec -V
-D AP_DOC_ROOT="/home"
-D AP_GID_MIN=100
-D AP_HTTPD_USER="apache"
-D AP_LOG_EXEC="/var/log/httpd/suexec.log"
-D AP_SAFE_PATH="/usr/local/bin:/usr/bin:/bin"
-D AP_UID_MIN=500
-D AP_USERDIR_SUFFIX="public_html"
[root@rad-xen-vweb7 sbin]#

再度suexec -Vすると、ご覧のようにドキュメントルートがきっちり/homeになりました。これでアパッチを再起動すればちゃんとSuexecが/home配下で使えるようになってました。

[root@rad-xen-vweb7 sbin]# service httpd restart
httpd を停止中:                                            [  OK  ]
httpd を起動中:                                            [  OK  ]
[root@rad-xen-vweb7 sbin]#

apacheの再起動は上のようにします。

ちなみに、バーチャルホストでSuexecを使うためにはhttpd.confを以下のように設定します。

<VirtualHost *:80>
    ServerAdmin postmaster@kumacchi.com
    DocumentRoot /home/kumacchi/public_html/niconico.kumacchi.com
    ServerName niconico.kumacchi.com
    ErrorLog logs/niconico.kumacchi.com-error_log
    CustomLog logs/niconico.kumacchi.com-access_log common
    SuexecUserGroup kumacchi kumacchi
    <Directory /home/kumacchi/public_html/niconico.kumacchi.com>
        AllowOverride All
        Options -Indexes SymLinksIfOwnerMatch ExecCGI IncludesNoExec
    </Directory>
</VirtualHost>

赤字の部分をバーチャルホストの設定に追加するだけです。SuexecUserGroupの後にSuexecで実行時のユーザーとグループを指定してあげると実際にCGIが動作するときに指定したユーザーとグループで動作するようになります。

四方山話
アカウントに制限をかけられた理由ですが、某掲示板のCoreserverのスレを見ると同じサーバーの人が負荷が高くてMySQLにつながらないとサポートに連絡をとったそうで、その回答で負荷の高い人に制限をかけて対応すると回答があったらしいのです。で、私のアカウントに制限がかかったわけです。私だけがかかったのか私以外の人にも制限がかかったのかわかりません。でも、まあ、なんというか私の言い分としてはMySQLにつながらないほどの負荷をかけているのは私ではないと思います。確かに通常より負荷が高めになっていました。中国のIPアドレスで結構なアクセスが来ていて通常より数倍の負荷がかかっていたのは確かです。ブロックしましたけど。多分僕だけではないと思うので全体的に負荷は高まっていたのではないかと思います。確かにその時、私の負荷はサーバー内で1位でした。しかし、それは私がPerl使いだからです。Coreserverの場合cgiはcgiとして動きますが、phpの場合はモジュールで動作するので負荷の観測ができません。cgiだとsuexecで動いているのでどのアカウントのcgiなのかsshでtopコマンドを叩けば簡単に特定できます。しかし、phpの場合は特定できないのでやりたい放題だったりします。なので管理画面に表示される負荷ポイントと順位は、cgiだけのものだったりします。私もよく重いなーと思った時にはsshで繋いでtopコマンドを叩いて様子を見ているのですが、いつもそういう場合MySQLの負荷がとんでもないのですが誰が負荷をかけているのかtopコマンドだけではさっぱりわかりません。誰かがphpでMySQLをぶん回しているのだろうということは想像できます。そして私はMySQLを1ミリも使ってないのです。まあ、そういうわけで私に制限をかけてもサーバーの負荷は下がらないと思います。まあ、実際サーバーが重くて引越しにも苦労したのですが、2日ほどかけて何とか引越しも完了しました。コンテンツのダウンロードが現在ADSL回線なので遅くて苦労しました。おまけにダウンロード中に回線切れたりして何度もやり直したり。blogをtarやzipで固めようとしても途中でkillされるし、そろそろCoreserveにブログを置くのは辛くなってきたので、そのうちもう一台VPSをかりてそちらに移そうと思っています。わかりやすいところに制限をかけたのだと思いますが、それでは解決になっていないと思うのでサポートさんにはさらに頑張って頂きたいと思う今日この頃です。

タグ : , ,