AWStats: нет доступа к /var/log/apache2/access.log

14

Я установил 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, но какие рекомендуемые разрешения для предоставления?

Joril
источник
Попробуйте это, не могу обещать, если это будет работать: chown www-data:www-data <yourFile>и тогда chmod 655 <yourFile>.
theTuxRacer
1
Ну , чтобы сделать Awstats работать это достаточно chmod 755 /var/log/apache2и chmod 644 access.log, но я хотел бы «это лучший pratice» -kind ответа :) Спасибо за пробили в хотя!
Джорил
Я думаю, что вы правы с # 1 (просто с доступом на чтение, если нет нужды в чем-то, что нужно awstats). Это дает доступ к ограниченной учетной записи пользователя и не предоставляет новый доступ к чему-либо кроме этого.
belacqua

Ответы:

8

Если вы переходите к пункту 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 создаст в будущем, будут иметь адекватные разрешения

теист
источник
2
И чтобы "все пользователи" могли просматривать "/ var / log / apache2 /", сделайте дополнительно: chmod a + x / var / log / apache2 /
alfonx
6

В большинстве установок:

  • 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) Измените « создать 640 корневых адм » на « создать 644 корневых адм » в /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 в качестве этого нового пользователя / группы.

roberthernandez
источник
Еще одним решением было бы изменить группу /var/log/apache2и все, что в ней, www-dataи сделать файлы читаемыми по группам. Это немного менее допустимо, чем сделать их читаемыми во всем мире.
Reinier Post