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?
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>
ajoutez simplement su root adm
au fichier de configuration:
/var/log/Apache2/*.log {
# …
su root adm
}
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.