Rsyslog ne fonctionne pas correctement, il n'enregistre rien

11

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

Victor Henriquez
la source
2
Le disque de journal est-il plein?
Jenny D
Oh désolé, j'ai oublié d'ajouter ces informations, je mettrai à jour la question. Mais il reste suffisamment d'espace pour écrire des journaux.
Victor Henriquez
1
essayez et strace -p <pid> ou démarrez rsyslog manuellement sous strace et vérifiez s'il se plaint de quelque chose
manjiki
Bon conseil, malheureusement je n'ai rien trouvé de pertinent. J'ai mis à jour la question avec le journal strace, juste au cas où vous trouveriez quelque chose qui me manque. Je suis vraiment frustré.
Victor Henriquez
exécutez-le manuellement en mode débogage (-d si iirc), donc il ne se bifurquera pas, ou utilisez l'option follow forks de strace. Mon mauvais, désolé.
manjiki

Réponses:

12

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' createoption de votre configuration logrotate. Soit le configurer comme create 0644 syslog admdans /etc/logrotate.d/rsyslogou encore mieux, le définir globalement en /etc/logrotate.confomettant le mode, le propriétaire et le groupe, simplement comme ceci create(qui est d'ailleurs la configuration par défaut), auquel cas les mêmes valeurs du fichier seront utilisées. Consultez man logrotatepour 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.

AAA
la source
1
Cette. Pour plus de discussion et de détails, consultez le bogue rsyslogd sur launchpad: bugs.launchpad.net/ubuntu/+source/rsyslog/+bug/940030
JustinC
You rock man, j'ai perdu deux jours à trouver ce problème
deFreitas
0

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:

chmod 770 /var/log
chgrp syslog /var/log
initctl restart rsyslog

Rsyslog pourra désormais écrire dans / var / log car il s'exécute en tant qu'utilisateur 'syslog', groupe 'syslog'.

Greg Bell
la source
0

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.

# find the start command 
me@d2-slprod02:~$ sudo systemctl status rsyslog
● rsyslog.service - System Logging Service
   Loaded: loaded (/lib/systemd/system/rsyslog.service; enabled; vendor preset: enabled)
   Active: active (running) since Fri 2019-06-21 10:04:43 CEST; 2h 26min ago
     Docs: man:rsyslogd(8)
           http://www.rsyslog.com/doc/
 Main PID: 18753 (rsyslogd)
    Tasks: 4
   Memory: 1.4M
      CPU: 291ms
   CGroup: /system.slice/rsyslog.service
           └─18753 /usr/sbin/rsyslogd -n

 # let's have a look at syscalls.
 sudo strace /usr/sbin/rsyslogd -n
 ...
 write(2, "rsyslogd: error during parsing f"..., 206rsyslogd: error during parsing file /etc/rsyslog.d/50-default.conf, on or before line 8: warnings occured in file '/etc/rsyslog.d/50-default.conf' around line 8 [v8.16.0 try http://www.rsyslog.com/e/2207 ]
 ...

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!

Bjarte Brandt
la source