web-dev-qa-db-fra.com

Configuration Apache et logrotate

la semaine dernière, j'ai trouvé un problème sur mon serveur, car l'utilisation du disque était à 100% et j'ai découvert qu'Apache avait créé un énorme fichier error.log de 60 Go. J'ai ensuite changé le LogLevel pour émerger, mais après une semaine, c'est à nouveau 1,3 Go, ce qui est définitivement trop. De plus, j'ai un access.log de 6 Mo et un autre_vhosts_access.log de 167 Mo. J'ai donc découvert que le problème pouvait être que logrotate ne fonctionnait pas. En fait, les fichiers compressés des journaux ont une date très ancienne (23 février). J'ai donc d'abord essayé de changer la configuration du fichier logrotate pour Apache2, en ajoutant une taille maximale pour le fichier, ressemblant maintenant à ceci:

/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
}

Après cela, j'ai essayé manuellement de forcer logrotate à exécuter une configuration spécifique pour Apache avec

logrotate -f /etc/logrotate.d/Apache2

et j'ai eu cette erreur:

error: skipping "/var/log/Apache2/access.log" because parent directory has insecure permissions (It's 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's 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's 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.

Ce qui est étrange, c'est qu'en quelque sorte, il exécute la rotation, créant un fichier error.log vide, mais avec des autorisations différentes de l'ancien, et ne compressant pas le error.log existant. En regardant le répertoire des journaux Apache, il ressemble maintenant à ceci:

-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

Alors, quelle est la bonne façon de procéder? dois-je changer les autorisations du répertoire/var/log/Apache2? (qui est maintenant 777) Je n'ai pas défini ces autorisations et je ne sais pas si c'est correct. ou devrais-je dire à logrotate quel utilisateur utiliser pour la rotation? et comment?

29
sissy

En suivant les instructions d'un site Web, je viens de changer le fichier de configuration logrotate, en ajoutant la directive su demandée comme suit et maintenant elle tourne dans le bon sens.

su <user> <group>
30
sissy

ajoutez simplement su root adm au fichier de configuration:

/var/log/Apache2/*.log {
    # …
    su root adm
}
42
mcnesium

J'ai "le répertoire parent a des autorisations non sécurisées" lors d'une tentative de rotation forcée de syslog.
Voici comment je l'ai résolu:

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.
3
Denis Ryzhkov