1
votes

I have Ubuntu 16.04 with Apache2 and php7 on it. I wan't to read some log files with php and print them. Therefore I do a simple

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

But that does not work. I get this error:

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

I'm quite sure I've set the permissions right, Apache and php runs as www-data, so I added the user www-data to the groups 'adm' and 'syslog', as these groups have read permissions for the whole file path and the file itself. Permissions are 640 by default, but only if I set it to 647 for example, the file is readable for php/apache.Even 644 or 646 is not enough.

Why is that? Do I have to change something in the Apache vhost config?

Addition: 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
1
Please add this to the question: cd /var/log/apache2; ls -alpNic3500
@Tenbo: he already said 647 was fine. Looks like he needs o=rwx to read his file, which is weird. That is why I asked him to post the ls -alp on /var/log/apache2.Nic3500
@Nic added to my starting postlemon

1 Answers

0
votes

Since this is clearly a permissions error, ensure each parent folder leading to access.log definitely have the group set to either adm or syslog.

Each folder leading up to access.log must have at least a group permission of read and execute (g+rx) to allow PHP to descend into each sub-directory.


If I were you, I would change the apache config to write the file to a publicly inaccessible folder in your web root (since the log file is clearly essential in your application). This saves you from modifying system folder permissions which can be dangerous especially in web applications.