古いバージョンの suexec コマンドを使用する

CentOS 7 上で、Apache を 2.4.6 から 2.4.54 にバージョンアップしたら CGI が実行できなくなった。

一旦 2.4.6 をアンインストールして、iusレポジトリから yum で 2.4.54 をインストールしたんだが、CGI を実行すると Internal Server Error になる。

error_log には、

End of script output before headers: hogehoge.cgi

としか出てない「何が原因がわからないエラー」だ。「End of script output before headers」って、「Content-type: text/html;charset=UTF-8」のようなヘッダ部すら送られない、つまり「プログラムがまったく実行されていない」状態である。

まあ、こういう場合は suEXEC 関係だろうな・・・と思い、/var/log/secure を見てみると、

Jan  7 11:23:42 httpd suexec[15490]: command not in docroot (/home/www/htdocs/hogehoge.cgi)

って。やっぱり「docroot」関連か。

# /usr/sbin/suexec -V
 -D AP_DOC_ROOT="/var/www"
 -D AP_GID_MIN=100
 -D AP_HTTPD_USER="apache"
 -D AP_LOG_SYSLOG
 -D AP_SAFE_PATH="/usr/local/bin:/usr/bin:/bin"
 -D AP_UID_MIN=500
 -D AP_USERDIR_SUFFIX="public_html"

Document Root が /var/www になっている。
Apache 2.4.6 のときに Document Root を /home で作り直したのだが(DOcument Root が /home/www/htdocs なので)、2.4.54 にした際に suexec コマンドも作り直されてしまった。

suEXEC の設定は、コンフィグファイルのようなもので簡単に指定できない。
再コンパイルしてプログラムを作り直す必要があるのだ。(これがなかなか手間)

ただし、suEXEC 自体はなにかセキュリティ上の問題が出ているわけではないので、2.4.54 で作られる最新のものでなくても問題ないはずだ。
残念ながら、Web サーバ上の suexec は書き換えられてしまったが、予備機にまだ 2.4.6 のときのプログラムが残っている。
FTP で suexec コマンドを持ってきて置いてみた。

・・・が、

# suexec -V
-bash: /usr/sbin/suexec: Permission denied

実行権限エラーが・・・

error_log にも、

Permission denied: exec of '/usr/sbin/suexec' failed

と出ているので、オーナーと実行権限を直してみる。

# chown root:apache /usr/sbin/suexec
# chmod 510 /usr/sbin/suexec
# /usr/sbin/suexec -V
 -D AP_DOC_ROOT="/home"
 -D AP_GID_MIN=100
 -D AP_HTTPD_USER="apache"
 -D AP_LOG_SYSLOG
 -D AP_SAFE_PATH="/usr/local/bin:/usr/bin:/bin"
 -D AP_UID_MIN=500
 -D AP_USERDIR_SUFFIX="public_html"

実行できた。
ちゃんと suEXEC で実行される CGI のある Document Root が /home 以下になっている。ばっちり。

しかし、これで、error_log に Permission denied は出なくなったがやっぱり CGI は実行されない。

/var/log/secure には「failed to setgid」と。

Jan 09 22:00:50 httpd suexec[31741]: uid: (1001/hogeusr) gid: (1001/hogegrp) cmd: hogehoge.cgi
Jan 09 22:00:50 httpd suexec[31741]: failed to setgid (1001: hogehoge.cgi)

そうかそうか。結局、SUID 設定をしないとダメなのだな。

# chmod u+s /usr/sbin/suexec
# ls -la /usr/sbin/suexec
-r-s--x--- 1 root apache 15368 Apr  3  2020 /usr/sbin/suexec

これで、ばっちり CGI も suEXEC 有効で実行されるようになった。

今後は、Apacbe のバージョンアップをするときに suexec コマンドを別名で退避しておいて、Apache インストール後にもとに戻すようにしよう。

トラックバック(0)

このブログ記事を参照しているブログ一覧: 古いバージョンの suexec コマンドを使用する

このブログ記事に対するトラックバックURL: https://blog.netandfield.com/mt/mt-tb.cgi/6385

コメントする

このブログ記事について

このページは、shinodaが2023年1月11日 09:07に書いたブログ記事です。

ひとつ前のブログ記事は「ナフコの「充電式電気のこぎり」を買ってみた」です。

次のブログ記事は「単管パイプは県庁殴り込み用の道具じゃありません!(笑)」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。


月別 アーカイブ

電気ウナギ的○○ mobile ver.

携帯版「電気ウナギ的○○」はこちら