モーグルとカバとパウダーの日記

モーグルやカバ(EXカービング)山スキー(BC)などがメインの日記でした。今は仕事のコンピュータ系のネタが主になっています。以前はスパム対策関連が多かったのですが最近はディープラーニング関連が多めです。

chroot環境で動くapache 2.4でCGIがPermission deniedになる問題

CentOS7 で chroot 環境で動く apache 2.4 の設定で、CGIがうまく動かないという相談を受けました。

apache 2.4 では mod_cgi ではなく mod_cgid を使うのですが、

[cgid:error] (13)Permission denied: [client *****] AH01257: unable to connect to cgi daemon after multiple tries: *****

のような感じのエラーが出て動かないという状況でした。

mod_cgid の設定は下記のようになっていました。

LoadModule cgid_module modules/mod_cgid.so

<IfModule cgid_module>
    Scriptsock /var/run/cgid/cgisock
</IfModule>

ここで「/var/run/cgid/」は chroot 環境のディレクトリに作られていて、パーミッションも与えられていて、実際 cgisock ファイルも apache が作成できている状況でした。

で実はこの「Scriptsock /var/run/cgid/cgisock」の指定のところ、よくあるのは「Scriptsock cgisock」のようにフルパスではなく書かれているのですが、この指定だと log ディレクトリ内に sgisock ファイルが作られてしまうため、このようにフルパスでの指定になっていました。

パーミッションについて色々試してもダメだったため、下記のように「Scriptsock /var/run/cgid/cgisock」を「Scriptsock cgisock」に修正して(もちろんディレクトリのパーミッションやオーナーは同じ設定)動かしたところ、無事に動くようになりました。

LoadModule cgid_module modules/mod_cgid.so

<IfModule cgid_module>
    Scriptsock cgisock
</IfModule>

なので cgisock ファイルは logディレクトリ内に作成されています。

chroot環境下のときの apache と mod_cgid のパスの扱いに齟齬がある?のかなと推測していますが、ちゃんと追って調べていません。

とりあえずこうやれば動く、ということだけ。