いくつかのWordpressブログをAWSに移行している最中ですが、ファイルのアクセス許可に関する問題が発生し、過去2時間で問題が解決しました。
最も単純なfopen呼び出しは常に失敗し、「ストリームのオープンに失敗しました:権限が拒否されました」:
<?php $handle = fopen('test.txt', 'w') or die('Can\'t open file'); ?>
私は以下を試しました/チェックしました
これを引き起こしている可能性のある見逃したものはありますか?私はこれをずっとずっと見続けてきたので、明らかな何かを見逃しています。
更新:適用後 wombleの提案 この問題は、不正な権限やPHP設定ミス。上記のコードでファイルを書き出すことはできましたが、PHPスクリプトが正しいユーザーとグループで実行されても、結果のファイルの所有権とグループはApacheの所有権とグループに設定されました。コマンドラインから同じテストスクリプトを実行すると、出力されたファイルに適切な権限が付与されます。これは私がmod_suexecを使用する際の問題であると私に思わせます。
編集:getmyuid()とgetmygid()スクリプトファイルのユーザーとグループのみが返され、実行時に許可されていないため、これは正しくありません。より正しいアプローチは、次のようなものを使用することです。
<?php echo exec('ps -up '.getmypid()); ?>
良い質問です-宿題を終えたことを示しています。
確認できなかった「明白な」ことは何も考えられないので、より高度なデバッグアドバイスしか提供できません。
strace
を起動し、内部で何が行われているかを正確に確認します。fopen(..., 'r')
を実行するコードを記述して、ディレクトリツリーのアクセス許可が実際にOKであることをトリプルチェックします。su
を問題のユーザーに送信し、コマンドラインでいくつかのことを試してください。それが機能する場合、あなたはknowスクリプトがあなたが思っているアクセス許可で実行されていません。getfacl
は使用するツールです)。それは珍しいことですが、時々彼らは跳躍してあなたの顔をはぎ取るでしょう。 ACLがある場合は、setfacl -x
を使用して、ACLが不要であることを確認したら削除してください。Apacheのホームフォルダーを確認します(通常は/var/www
)とファイルをこのフォルダの下に置き、最後に必要な権限を付与します。 php temp uploadフォルダをこれに変更します。これは私のために働いています。
/usr/sbin/apachectl -t -D DUMP_MODULES
すべてのモジュールが有効になっていることを確認してください
あなたが取得する場合
Warning: SuexecUserGroup directive requires SUEXEC wrapper.
解決
このような警告は通常、suexecラッパーに対する無効な権限によって引き起こされます。
# ls -la /usr/sbin/suexec
-rwsr-xr-x 1 root root 12064 2008-04-17 01:15 /usr/sbin/suexec
権限または所有権が上記の例と異なる場合は、次のコマンドを使用して修正します。
# chown root:root /usr/sbin/suexec
# chmod 4755 /usr/sbin/suexec
この修正後、すべてが大丈夫でした。