最近Apache2サーバーをアップグレードしましたが、CGIアプリを実行できなくなりました。ログが表示されています
(13)複数回試行した後、cgiデーモンに接続できないことを許可が拒否されました
エラーメッセージは、Apacheが一部のファイルへのアクセスを拒否されていることを意味していることを理解しており、問題を追跡して解決する方法について困惑しています。
エラーメッセージに記載されているファイルは本当にブロックされたファイルですか?または、問題は他の必要なファイルが原因である可能性がありますか? .cgiファイルは、/ usr/shareの下の以前の場所にあります。ファイルの所有権(ルート)とアクセス許可(誰でも読み取り可能/実行可能)は、ファイルとその祖先に対して常に使用されていたものと同じです。 SELinuxファイルのラベルは変更されていません。
SELinux監査ログには、ApacheまたはCGIプログラムに関連する拒否は示されていません。 donotaudit状態の場合、監査を有効にしましたが、それでも何も表示されませんでした。 SELinuxを一時的に許容モードに切り替えましたが、役に立ちませんでした。許容モードでApacheを再起動してみました。これは問題を解決しませんでした。
この問題を解決する方法について何か提案はありますか?古いApacheに戻したくなります。
動作する場合と動作しない場合があり、可能性は非常に低いようですが、誰かが同様の問題を抱えていたため、これが解決策でした。
chmod 755 /var/log/httpd/
またはApacheのログのディレクトリがサーバー上にあるものは何でも。
これは古い質問ですが、インターネットで適切な説明や解決策を見つけるのにほとんど成功しなかったので、答えを追加しようと思いました。
この問題は、イベントMPMを使用している場合にのみApache 2.4(httpd24パッケージとしてインストールされている)を搭載したRHEL 7で発生しました(プリフォークMPMは正常に機能しました)。 SELinuxはすでにpermissiveに設定されています。
CGIソケットに関するコメントに基づいて、ドキュメントを確認しました。
基本的に、mpm-eventを使用する場合のCGIデーモンにはソケットファイルが必要です。 ApacheはユーザーApacheで実行され、サーバー上のグループApache(および間違いなく他の多くのサーバー)で実行されるため、このソケットファイルを含むフォルダーにはApache.apacheによる読み取り/書き込みアクセス権が必要です。
ログフォルダのアクセス許可を上書きしたくないので、conf.modules.d/00-mpm.conf
にScriptSock
ディレクティブを明示的に設定することにしました。
ScriptSock /var/run/httpd/cgid.sock
次に、httpd
ディレクトリが存在することを確認し(注:tmpfiles.d
はtmpfsであるため、/var/run
を介してこれを構成する必要があります)、所有権をApache.apacheに変更しました。権限はデフォルトの755のままにしました。
これで問題は解決しました。
エラーは特定のファイルまたはディレクトリに固有のものではありません。これはエラーパターンであり、どの権限が根本原因であるかについての手がかりは含まれていません。
... [cgid:error] ...(13)許可が拒否されました:... AH01257:複数回試行した後cgiデーモンに接続できません:...リファラー:.。
上記のパターンがhttpdログエントリに表示されているが、selinux監査ログがクリーンである場合、問題は、エラーメッセージにリストされているファイルではなく、CGIデーモンに関連するいくつかのアクセス権です。 CGIデーモンは、複数のものを見つけて書き込むことができる必要があります。
Mpm_event_moduleは、ほとんどのパッケージでhttpdコンパイル時に指定されることが多く、これによりhttpdはデフォルトでmod_cgiではなくmod_cgidになります。
他の回答の提案はどれもうまくいくかもしれませんし、うまくいかないかもしれません。たとえば、特定のユーザーが他の権限を失うことなくサイトコンテンツにアクセスできるように、グループ「サイト」を作成した場合に発生した別のケースがあります。/var/runディレクトリのグループとして「Apache」があり、ソケットを作成しようとしたときにアクセス許可の拒否が作成されました。
AIX7にも同じ問題がありました。修正する/ var/log/httpdディレクトリに権限を設定します。
-mpm.confに以下の設定があることを確認してください
/etc/httpd/conf.modules.d/00-mpm.conf
コメントアウトmod_mpm_prefork.so次にコメントmod_mpm_worker.soモジュール
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
#LoadModule mpm_worker_module modules/mod_mpm_worker.so
#LoadModule mpm_event_module modules/mod_mpm_event.so
Apacheのアップグレード間でモジュールの動作が変更されました。 Apache confディレクティブは、cgiを適切に提供するためにいくつかの変更が必要になる可能性があります。 Apache confとcgiの詳細、およびファイルシステム上のその場所を知らなければ、推測する以上のことを行うのは非常に困難です。
また、SELinuxが疑われる場合は、SELinuxを無効にして、ApacheがCGIの提供を再開するかどうかを確認してください。もしそうなら、あなたはあなたがやろうとしていることを許可するためにポリシーを調整するか、あなたのシステムをSELinuxポリシーに準拠させることにあなたの努力を集中し始めることができます。