7

私のApacheエラーログはいっぱいです

Error opening file for reading: Permission denied
Error opening file for reading: Permission denied
Error opening file for reading: Permission denied

このアクセス許可エラーの原因となっているファイルまたはファイルのフォルダーを特定するにはどうすればよいですか? 表示されるエラーと access_log リクエストの間に直接の関係はありません。

グーグルは、 straceを使用する必要があることを示唆していますが、使用する場合

strace apache2 

また

strace -etrace:open apache2

応答は冗長であり、このツールを実際に使用したことがないため、何を探すべきかわかりません。ここに表示されるもののトレースがあります。

.....
open("/lib/x86_64-linux-gnu/libnss_nis.so.2", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/libnss_files.so.2", O_RDONLY|O_CLOEXEC) = 3
open("/etc/passwd", O_RDONLY|O_CLOEXEC) = 3
apache2: bad user name ${APACHE_RUN_USER}

最後の行が原因であると思われる唯一の行ですが、私のWebサーバーは画像を処理しており、apacheユーザーが十分でない場合に問題になるあらゆる種類のディスクを処理しています.

ありがとう。

4

2 に答える 2

2

私は strace についてあまり詳しくありませんが、Apache を希望どおりに実行するには、他にもいくつかのことを行う必要があると思います。

apache2バイナリを実行するだけでは、プログラムは(ご指摘のとおり)不適切なユーザー名で停止します。これは、通常、apacheユーザー名/グループが構成の一部として設定されているためです(Ubuntu 12.04インストールの/ etc/apache2/envvarsにあります)。 .

私が最も簡単に見つけたのは、自分のマシンで apachectl スクリプトを見つけて、「start)」を検索することでした。次のような行が見つかります。

$HTTPD ${APACHE_ARGUMENTS} -k $ARGV

ここに strace を追加すると、次のようになります。

strace -etrace:open -f $HTTPD ${APACHE_ARGUMENETS} -k $ARGV

-f オプションを含める必要があるのは、apache が多数のプロセスを生成し、それらすべてをトレースする可能性が最も高いためです。少なくともこれは私にとってはうまくいきました:)

于 2012-10-08T20:29:55.800 に答える
0

open()戻り値 -1、errno == EACCES になる呼び出しを探す必要があります。

ubuntu (/usr/sbin/apachectl 内) で次の strace コマンドラインを微調整する必要がありました。

strace -o /tmp/strace.log -e trace=open -f $HTTPD ${APACHE_ARGUMENTS} -k $ARGV

-o出力をファイルに保存します。誰でも読める領域でファイル名が漏洩することが心配な場合は、適切な宛先ディレクトリを使用してください。

apache mod wsgiで実行されているpythonプログラムを使用して、同様のバグを自分で追跡しています。私はこれらを見つけています...

3556  open("/proc/self/auxv", O_RDONLY) = -1 EACCES (Permission denied)

私のバグは、wsgi ワーカー プロセスが root からアプリを実行している通常のユーザーに特権を落としたという事実に関係していると思いますが、特権を落とした後も、/proc/self/auxv通常のプロセスにはまだ読み取れません。 - 多分。

于 2017-01-31T11:15:54.040 に答える