2017-10-25 32 views
1

Apache2とphp7でUbuntu 16.04を使用しています。 私はphpでいくつかのログファイルを読んでそれを印刷することはしませんでした。 したがって、私は簡単ですPHP - readfile()がストリームを開けませんでした:許可が拒否されました - なぜですか?

readfile("/var/log/apache2/access.log"); 

しかし、それは動作しません。私はこのエラーを取得:

Warning: readfile(/var/log/apache2/access.log): failed to open stream: Permission denied in /var/www/test.php on line 2 

私は右のパーミッションを設定しているかなり確信しているが、ApacheとPHPは、WWW-データとして実行されたので、私はグループのADM 'と'へのユーザのWWW-データを追加しましたこれらのグループにはファイルパス全体とファイルそのものに対する読み取りアクセス権があるため、「syslog」と表示されます。 パーミッションはデフォルトでは640ですが、たとえば647に設定した場合にのみ、ファイルはphp/apacheで読み込み可能です.644または646でも十分ではありません。

なぜですか? Apacheのvhost設定で何かを変更する必要がありますか?

追加:LS -alpは/ var/log/apache2の

drw-r----- 2 root adm  4096 Oct 25 11:07 ./ 
drwxr-xr-x 9 root syslog 4096 Oct 25 10:39 ../ 
-rw-r----- 1 root adm 47861 Oct 25 14:01 access.log 
-rw-r----- 1 root adm 12014 Oct 25 14:01 error.log 
-rw-r----- 1 root adm  0 Oct 25 10:40 other_vhosts_access.log 
+0

これを質問に追加してください:cd/var/log/apache2; ls -alp – Nic3500

+0

@Tenbo:彼はすでに647が大丈夫だと言った。彼は彼のファイルを読むのにo = rwxが必要なように見えますが、それは変です。だから私はls -alpを/ var/log/apache2に投稿するように頼んだのです。 – Nic3500

+0

@Nicが私の開始ポストに追加されました – lemon

答えて

0

これは明らかにパーミッションエラーであるので、のaccess.logにつながる各親フォルダは間違いなくグループはADMのいずれかに設定されていることかsyslog

access.logにつながる各フォルダには、少なくともサブグループにPHPを降格させるために、読み取りのグループ許可がである必要があります(g+rx)。


私があなただったら、私は(ログファイルは、アプリケーションで明確に不可欠であるため)Webルートに公にアクセスできないフォルダにファイルを書き込むためにApacheの設定を変更します。これにより、特にWebアプリケーションで危険なシステムフォルダのアクセス権が変更されなくなります。

+0

ありがとう! 1つのフォルダにグループの実行権限がありませんでした。 – lemon

関連する問題