J'utilise un serveur Debian et il y a quelques jours, mon rsyslog a commencé à se comporter très bizarrement, le démon fonctionne mais il ne semble rien faire. Beaucoup de gens utilisent le système mais je suis le seul à avoir un accès root (légal).
J'utilise la configuration par défaut de rsyslogd (si vous pensez que c'est pertinent, je la joindrai, mais c'est celle qui est fournie avec le paquet).
Après avoir fait pivoter tous les fichiers journaux, ils sont restés vides:
# ls -l /var/log/*.log
-rw-r--r-- 1 root root 0 Jun 27 00:25 /var/log/alternatives.log
-rw-r----- 1 root adm 0 Jun 26 13:03 /var/log/auth.log
-rw-r----- 1 root adm 0 Jun 26 13:03 /var/log/daemon.log
-rw-r--r-- 1 root root 0 Jun 27 00:25 /var/log/dpkg.log
-rw-r----- 1 root adm 0 Jun 26 13:03 /var/log/kern.log
-rw-r----- 1 root adm 0 Jun 26 13:03 /var/log/lpr.log
-rw-r----- 1 root adm 0 Jun 26 13:03 /var/log/mail.log
-rw-r----- 1 root adm 0 Jun 26 13:03 /var/log/user.log
Toute tentative de forcer l'écriture d'un journal n'a aucun effet:
# logger hey
# ls -l /var/log/messages
-rw-r----- 1 root adm 0 Jun 26 13:03 /var/log/messages
Lsof montre que rsyslogd n'a aucun fichier journal ouvert:
# lsof -p 1855
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
rsyslogd 1855 root cwd DIR 202,0 4096 2 /
rsyslogd 1855 root rtd DIR 202,0 4096 2 /
rsyslogd 1855 root txt REG 202,0 342076 21649 /usr/sbin/rsyslogd
rsyslogd 1855 root mem REG 202,0 38556 32153 /lib/i386-linux-gnu/i686/cmov/libnss_nis-2.13.so
rsyslogd 1855 root mem REG 202,0 79728 32165 /lib/i386-linux-gnu/i686/cmov/libnsl-2.13.so
rsyslogd 1855 root mem REG 202,0 26456 32163 /lib/i386-linux-gnu/i686/cmov/libnss_compat-2.13.so
rsyslogd 1855 root mem REG 202,0 297500 1061058 /usr/lib/rsyslog/imuxsock.so
rsyslogd 1855 root mem REG 202,0 42628 32170 /lib/i386-linux-gnu/i686/cmov/libnss_files-2.13.so
rsyslogd 1855 root mem REG 202,0 22784 1061106 /usr/lib/rsyslog/imklog.so
rsyslogd 1855 root mem REG 202,0 1401000 32169 /lib/i386-linux-gnu/i686/cmov/libc-2.13.so
rsyslogd 1855 root mem REG 202,0 30684 32175 /lib/i386-linux-gnu/i686/cmov/librt-2.13.so
rsyslogd 1855 root mem REG 202,0 9844 32157 /lib/i386-linux-gnu/i686/cmov/libdl-2.13.so
rsyslogd 1855 root mem REG 202,0 117009 32154 /lib/i386-linux-gnu/i686/cmov/libpthread-2.13.so
rsyslogd 1855 root mem REG 202,0 79980 17746 /usr/lib/libz.so.1.2.3.4
rsyslogd 1855 root mem REG 202,0 18836 1061094 /usr/lib/rsyslog/lmnet.so
rsyslogd 1855 root mem REG 202,0 117960 31845 /lib/i386-linux-gnu/ld-2.13.so
rsyslogd 1855 root 0u unix 0xebe8e800 0t0 640 /dev/log
rsyslogd 1855 root 3u FIFO 0,5 0t0 2474 /dev/xconsole
rsyslogd 1855 root 4u unix 0xebe8e400 0t0 645 /var/spool/postfix/dev/log
rsyslogd 1855 root 5r REG 0,3 0 4026532176 /proc/kmsg
J'étais tellement frustré que même réinstaller le paquet rsyslog, mais il refuse toujours de journaliser quoi que ce soit:
# apt-get remove --purge rsyslog
# apt-get install rsyslog
Je pensais que quelqu'un avait piraté le système, alors exécutez rkhunter, chkrootkit, unhide pour tenter de trouver les processus / ports cachés et nmap dans un hôte distant pour comparer avec les ports affichés par netstat. Et je sais que cela ne veut rien dire, mais tout va bien. Le système possède également un pare-feu iptables très restrictif avec les connexions entrantes / sortantes.
Cela me rend fou, une idée de ce qui se passe ici?
[EDIT - info sur l'espace disque]
# df -h
Filesystem Size Used Avail Use% Mounted on
rootfs 24G 22G 629M 98% /
/dev/root 24G 22G 629M 98% /
devtmpfs 10M 112K 9.9M 2% /dev
tmpfs 76M 48K 76M 1% /run
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 151M 40K 151M 1% /tmp
tmpfs 151M 0 151M 0% /run/shm
[EDIT - info strace]
Strace me va bien
[pid 28824] access("/var/log/auth.log", F_OK) = 0
[pid 28824] access("/var/log/syslog", F_OK) = 0
[pid 28824] access("/var/log/daemon.log", F_OK) = 0
[pid 28824] access("/var/log/kern.log", F_OK) = 0
[pid 28824] access("/var/log/lpr.log", F_OK) = 0
[pid 28824] access("/var/log/mail.log", F_OK) = 0
[pid 28824] access("/var/log/user.log", F_OK) = 0
[pid 28824] access("/var/log/mail.info", F_OK) = 0
[pid 28824] access("/var/log/mail.warn", F_OK) = 0
[pid 28824] access("/var/log/mail.err", F_OK) = 0
[pid 28824] access("/var/log/news/news.crit", F_OK) = 0
[pid 28824] access("/var/log/news/news.err", F_OK) = 0
[pid 28824] access("/var/log/news/news.notice", F_OK) = 0
[pid 28824] access("/var/log/debug", F_OK) = 0
[pid 28824] access("/var/log/messages", F_OK) = 0
Le journal complet des straces peut être téléchargé ici
Réponses:
Il s'agit très probablement d'un problème de propriété de fichier. rsyslog commence à s'exécuter en tant que root mais abandonne ensuite les privilèges et s'exécute en tant qu'utilisateur syslog (directive de configuration $ PrivDropToUser ).
Les fichiers syslog (auth.log, daemon.log, etc.) sont initialement la propriété de syslog: adm mais si vous changez de propriétaire en root (comme il semble dans votre liste de fichiers), peu importe si vous HUP (ie, rechargez) rsyslog ou redémarrez-le, il sera refusé d'ouvrir ces fichiers en raison du manque de privilèges.
Si le changement de propriétaire s'est produit après la rotation des journaux, vérifiez l'
create
option de votre configuration logrotate. Soit le configurer commecreate 0644 syslog adm
dans/etc/logrotate.d/rsyslog
ou encore mieux, le définir globalement en/etc/logrotate.conf
omettant le mode, le propriétaire et le groupe, simplement comme cecicreate
(qui est d'ailleurs la configuration par défaut), auquel cas les mêmes valeurs du fichier seront utilisées. Consultezman logrotate
pour plus de détails.Certaines versions de rsyslog incluent une directive $ omfileForceChown comme solution de contournement pour le changement externe de propriétaire de fichier, mais ce n'est pas recommandé. La méthode recommandée consiste à configurer correctement la propriété et les autorisations. De plus amples informations sur ce problème peuvent être trouvées en suivant ce lien.
la source
J'ai eu ce problème car mon / var / log résidait sur un disque virtuel pour réduire l'usure de mon SSD et je voulais le déplacer vers un disque dur, donc j'avais plus d'historique que le démarrage actuel.
Ce qui était drôle, c'était un disque virtuel, je n'en avais pas à copier en mode mono-utilisateur, donc je ne savais pas quelles étaient les autorisations et la propriété! Duh.
Petite histoire, avec votre nouvel emplacement:
Rsyslog pourra désormais écrire dans / var / log car il s'exécute en tant qu'utilisateur 'syslog', groupe 'syslog'.
la source
Si les autorisations de fichiers sont toutes bonnes et que logrotate est correctement configuré, votre prochaine étape sera de jeter un œil aux appels système rsyslog.
Dès que ma faute de frappe a été corrigée dans ce fichier
/etc/rsyslog.d/50-default.conf
, syslog a recommencé à écrire dans / var / log / syslog!la source