Конфигурация Apache и logrotate

На прошлой неделе я обнаружил проблему на своем сервере, потому что использование диска было 100%, и я узнал, что Apache создал огромный файл error.log 60 ГБ. Затем я изменил LogLevel на появление, но через неделю он снова стал 1.3GB, что определенно слишком много. Кроме того, у меня есть access.log 6MB и other_vhosts_access.log из 167MB. Поэтому я узнал, что проблема может быть неработающей logrotate. На самом деле gzipped файлы журналов имеют очень старую дату (23 февраля). Поэтому я сначала попытался изменить конфигурацию файла logrotate для apache2, добавив максимальный размер для файла, выглядя теперь следующим образом:

/var/log/apache2/*.log {
    weekly
    size 500M
    missingok
    rotate 20
    compress
    delaycompress
    notifempty
    create 640 root adm
    sharedscripts
    postrotate
                if /etc/init.d/apache2 status > /dev/null ; then \
                    /etc/init.d/apache2 reload > /dev/null; \
                fi;
    endscript
    prerotate
        if [ -d /etc/logrotate.d/httpd-prerotate ]; then \
            run-parts /etc/logrotate.d/httpd-prerotate; \
        fi; \
    endscript
}

После этого я вручную попытался заставить logrotate запускать определенную конфигурацию для apache с помощью

logrotate -f /etc/logrotate.d/apache2

и я получил эту ошибку:

error: skipping "/var/log/apache2/access.log" because parent directory has insecure permissions (It world writable or writable by group which is not "root") Set "su" directive in config file to tell logrotate which user/group should be used for rotation.
error: skipping "/var/log/apache2/error.log" because parent directory has insecure permissions (It world writable or writable by group which is not "root") Set "su" directive in config file to tell logrotate which user/group should be used for rotation.
error: skipping "/var/log/apache2/other_vhosts_access.log" because parent directory has insecure permissions (It world writable or writable by group which is not "root") Set "su" directive in config file to tell logrotate which user/group should be used for rotation.

Странно то, что каким-то образом он запускает ротацию, создавая пустой файл error.log, но с разными разрешениями от старого и не сжимая существующий error.log. Глядя на каталог журнала apache, он выглядит вот так:

-rwxrwxrwx  1 root           adm            6.3M Oct 21 10:54 access.log
-rwxrwxrwx  1 root           adm             22K Feb 18  2014 access.log.1
-rwxrwxrwx  1 root           adm            7.0K Feb 16  2014 access.log.2.gz
-rwxrwxrwx  1 root           adm            4.0K Feb  9  2014 access.log.3.gz
-rw-------  1 amministratore amministratore    0 Oct 21 10:32 error.log
-rw-r--r--  1 root           root           1.3G Oct 21 10:57 error.log.1
-rwxrwxrwx  1 root           adm            167M Oct 21 10:57 other_vhosts_access.log
-rwxrwxrwx  1 root           adm            225K Feb 23  2014 other_vhosts_access.log.1
-rwxrwxrwx  1 root           adm             16K Feb 15  2014 other_vhosts_access.log.2.gz
-rwxrwxrwx  1 root           adm            3.2K Feb  8  2014 other_vhosts_access.log.3.gz

Итак, каков правильный путь? следует ли изменять разрешения каталога /var/log/apache 2? (теперь 777) я не установил эти разрешения, и я не знаю, правильно ли это. или я должен сказать logrotate, какой пользователь использовать для вращения? и как?

Ответы

Ответ 1

Следуя инструкциям на веб-сайте, я только что изменил файл конфигурации logrotate, добавив требуемую директиву su следующим образом, и теперь он вращается в правильном направлении.

su <user> <group>

Ответ 2

просто добавьте su root adm в файл конфигурации:

/var/log/apache2/*.log {
    # …
    su root adm
}

Ответ 3

У меня есть "родительский каталог имеет небезопасные разрешения" при попытке принудительного поворота syslog.
Вот как я это решил:

cat /etc/logrotate.conf
    ...
    # use the syslog group by default, since this is the owning group
    # of /var/log/syslog.
    su root syslog

vim /etc/logrotate.d/rsyslog
    # Add to top:
    su root syslog

logrotate -f /etc/logrotate.d/rsyslog
    # No errors now, log is rotated.