PHP - readfile () не удалось открыть поток: в доступе отказано - но почему?

У меня Ubuntu 16.04 с Apache2 и php7. Я не хочу читать некоторые файлы журналов с помощью php и распечатывать их. Поэтому я делаю простой

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-данные, поэтому я добавил пользовательские www-данные в группы «adm» и «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

person lemon    schedule 25.10.2017    source источник
comment
Пожалуйста, добавьте это к вопросу: cd / var / log / apache2; ls -alp   -  person Nic3500    schedule 25.10.2017
comment
@Tenbo: он уже сказал, что 647 в порядке. Похоже, ему нужно o = rwx, чтобы прочитать его файл, что странно. Вот почему я попросил его разместить ls -alp в / var / log / apache2.   -  person Nic3500    schedule 25.10.2017
comment
@Nic добавил в мой начальный пост   -  person lemon    schedule 25.10.2017


Ответы (1)


Поскольку это явно ошибка разрешений, убедитесь, что для каждой родительской папки, ведущей к access.log, определенно задана группа adm или syslog.

Каждая папка, ведущая к access.log, должна иметь как минимум групповое разрешение на чтение и выполнение (g+rx), чтобы PHP мог перейти в каждый подкаталог.


На вашем месте я бы изменил конфигурацию apache, чтобы записать файл в общедоступную папку в вашем корневом веб-каталоге (поскольку файл журнала явно необходим в вашем приложении). Это избавляет вас от изменения разрешений системной папки, что может быть опасно, особенно в веб-приложениях.

person Tenbo    schedule 25.10.2017
comment
БЛАГОДАРНОСТЬ! Одна папка не имела разрешений на выполнение для группы. - person lemon; 25.10.2017