AWStats: невозможно получить доступ к /var/log/apache2/access.log
Я установил awstats на свой новый сервер Ubuntu Lucid, но когда cron пытается запустить его как пользователь www-dataжалуется что cannot access /var/log/apache2/access.log: Permission denied,
В /usr/share/doc/awstats/README.Debian есть этот абзац:
По умолчанию Apache хранит (начиная с версии 1.3.22-1) файлы журналов с uid=root и gid=adm, поэтому вам нужно либо...
1) Измените права файлов журналов в /etc/logrotate.d/apache, чтобы www-данные имели как минимум доступ для чтения.
2) Как 1), но перейдите к конкретному пользователю и используйте функцию suEXEC Apache для запуска под тем же пользователем (и либо измените также право на /var/lib/awstats, либо используйте другой каталог). Это более сложно, но тогда журналы, как правило, недоступны для сервера (что, вероятно, было точкой по умолчанию Apache).
3) Измените awstats.pl на группу adm (но учтите, что вы рискуете разрешить CGI-скрипту доступ к административным ресурсам на машине!).
Я бы пошел с 1, но какие рекомендуемые разрешения для предоставления?
2 ответа
Если вы переходите к пункту 1, и в нем говорится, что www-данные должны иметь как минимум разрешение на чтение, тогда рекомендуется использовать только чтение.
Вы можете изменить строку (в файле logrotate):
create 640 root adm
в
create 644 root adm
Чтобы дать всем пользователям (включая www-данные) разрешение на чтение.
Вам нужно будет изменить разрешения для существующих файлов в /var/log/apache2/, чтобы соответствовать этому параметру
chmod a+r /var/log/apache2/* #or whatever your path is
Тогда все файлы могут быть прочитаны всеми пользователями, и все файлы, которые logrotate создаст в будущем, будут иметь адекватные разрешения
В большинстве установок:
- awstats работает как ваш пользователь apache www-data;
- файлы журнала apache принадлежат пользователю root:adm и имеют права-rw-r ----- (aka: chmod 640); а также
настройки владения и прав доступа можно найти в файле/etc/logrotate.d/apache2, содержимое которого:
/var/log/apache2/*.log { daily missingok rotate 60 compress delaycompress notifempty dateext create 640 root adm sharedscripts postrotate /etc/init.d/apache2 reload > /dev/null endscript }
Самое простое решение:
1) Измените "create 640 root adm" на "create 644 root adm" в /etc/logrotate.d/apache2, используя ваш любимый текстовый редактор или, если вам нужно все в скрипте:
sudo sed -i 's/create 640 root adm/create 644 root adm/g' /etc/logrotate.d/apache2
2) Измените разрешения для /var/log/apache2/access.log и /var/log/apache2/error.log на 644.
sudo chmod 644 /var/log/apache2/access.log /var/log/apache2/error.log
3) Перезапустите apache.
sudo apachectl -k graceful
Я видел людей, добавляющих www-данные в группу пользователей adm в качестве решения. Это намного больше разрешений для www-данных, чем мне удобно.
Другие более безопасные варианты включают создание нового пользователя и групп для awstats и запуск / запуск awstats в качестве этого нового пользователя / группы.