クラウド、レンタルサーバ、SEO、WPなどのレシピを!

サーバーレシピ

CentOS7 SpamAssassin WEBアプリ

httpd CGI SuEXECで、[Internal Server Error] (CentOS7)

更新日:

httpd 2.4、CentOS7系で、SuEXECで、Internal Server Errorに少しはまった件です。
httpdは、yumでインストールをしています。

「パーミッション」「権限」の重要性

デザイン系のWEB制作者でも、「パーミッション」とか「権限」とか聞いた事があると思います。

WEBアプリ(CGI)を動かすときに、避けて通れないものです。
デザイナーは、「755にしないと!実行権限をつけないと!改行に気をつけないと!」
と「気をつけないと!」と思っているかと思います。

「パーミッション」「権限」は、それほど、WEBアプリ(CGI)には、頻繁に出てくるキーワードです。

SuEXECを試す

今回、あるプログラムから、サーバー内の「実行ユーザ」を「特定のもの」にする必要がありました。
実際には、「Postfix3.3 迷惑メール対策 SpamAssassin(スパムアサシン)[ユーザ毎の設定]」の記事の「SpamAssassin」の設定ファイルをCGIで、読み込ませるためです。
「Postfix、マルチドメイン」のディレクトリは、「特定のユーザ」のみが閲覧できます。

httpd 2.4など初期設定では、「apache」などのユーザでプログラムが動きます。
つまり、「apache」というユーザが、「SpamAssassin」の特定のファイルが読めるようになっていないといけません。
かし、実際には、「apache」ではなく、「違う特定のユーザ」で、「Postfixのマルチドメイン環境」が構成されています。

そこで、apache 1.3 の時代から、「SuEXEC」という「指定されたユーザで実行する」という設定が、apache(httpd)で可能です。

今回、httpd2.4 の中のVirtualHostの中で、SuEXECを活用して、「Postfixの設定ファイル(SpamAssassinの設定ファイル)」が読めるようにしました。

具体的には、

が書かれたファイルを

/etc/httpd/conf.d/
の下に、置きました。

(ファイル名は、任意のファイル名で大丈夫です)

SuEXECが有効か?

perlで書かれたWEBアプリ(CGI)を、ブラウザ上から起動すると、
「InternalServerError」がでます。

最初は、「SuEXEC」が有効になっているのか?
を疑いました。

有効かどうかは、「apachectl -V」というコマンドで調べます。

上記の「 -D SUEXEC_BIN="/usr/sbin/suexec"」と指定があります

かつ

とファイルもあります。
有効になっています。

再度試行錯誤します。

journalctlで、SuEXECのエラーを確認する。

次に「journalctl」コマンドで、チェックします。

ソースコードで、httpdを入れる場合、SuEXECのエラーファイルの指定することができます。
また、/var/log/httpd/suexec.log というファイルに書かれる場合もありますが、CentOS7系のyumで入れると、そのようなファイルは作成されません。

↑というエラーメッセージがでてきました。
check.cgiというファイル名を実行しようとしています。
上記は、「実行グループが、許可されていなよ」というエラーです。

suexecの仕様をチェックしてみます。

↑この中で、

と指定されています。

「グループのIDが、最低でも1000だよ。」ということです。
今回、「100」のグループIDで実行しようとしました。

調整をします。

再び、check.cgiを実行しようとしたところ、InternalServerErrorがでました。

というエラーが出てきました。

プログラムを動かす場所が「ダメ」というものです。

再度、SuEXECの仕様を見てみます。

↑この中で、

とあります。
つまり、「/var/www」以下にコンテンツがないといけません。

そこで、コンテンツを

/home/以下
から
/var/www/html
に持ってきます。

これでやっと、CGIが動きました。

SuEXECの、DOC_ROOTを変える

この「/var/www」を変更するには、基本、「httpdのソースインストール」しかないようです。
裏技的には、「/usr/sbin/suexec」のバイナリの中身を変更する。という方法もあるようですが・・・
「そこまでして・・・。ならば、ソースインストールしますわ。」という気持ちになります。

SuEXECを活用したい場合、VirtualHostで、
「このドメインは、このユーザ権限で」
「あのドメインは、あのユーザ権限で」
という発想があるからだと思います。
一つのドメインならば、httpd.confで、指定している大元のユーザ名を希望のものにすればいいはずです。

おそらく、VirtualHostの指定を

/var/www/html01
/var/www/html02

などと、すればいいのかと思います。

/home/(dir01)/www/
/home/(dir02)/www/

というのは、ちょっと、異質的な発想なのかもしれません・・・

SuEXEC、その他のエラー

そのほか、指定したユーザ/グループ以外が書き込める状態だとエラーになる。
など、「権限」に厳しいです。
「journalctl -f」コマンドで確認しましょう。

SuEXEC、まとめ

エラーは、

journalctl -f
suexec -V
で、チェック

当然ながら、CGI自体のエラーがあるかもしれません。

気分でエラーを出している分けではないので、「なにか原因があります」
根気よく探しましょう!

-CentOS7, SpamAssassin, WEBアプリ

Copyright© サーバーレシピ , 2019 All Rights Reserved.