Rsyslog无法正常工作,它不会记录任何内容


11

我正在运行Debian服务器,几天前,我的rsyslog开始表现得很奇怪,守护程序正在运行,但是似乎没有任何作用。有很多人使用该系统,但我是唯一具有(合法)根访问权限的系统。

我正在使用默认的rsyslogd配置(如果您认为合适,我会附上它,但这是该软件包随附的配置)。

轮流所有日志文件后,它们仍然为空:

# 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

任何试图强制写入日志的尝试均无效:

# logger hey
# ls -l /var/log/messages 
-rw-r----- 1 root adm 0 Jun 26 13:03 /var/log/messages

Lsof显示rsyslogd没有打开任何日志文件:

# 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

我非常沮丧,甚至重新安装了rsyslog软件包,但它仍然拒绝记录任何内容:

# apt-get remove --purge rsyslog
# apt-get install rsyslog

我以为有人入侵了系统,因此运行rkhunter,chkrootkit,取消隐藏,以查找隐藏进程/端口,并在远程主机中找到nmap,以与netstat显示的端口进行比较。而且我知道这并不意味着什么,但是一切都还不错。该系统还具有一个iptables防火墙,该防火墙对传入/传出连接的限制非常严格。

这让我发疯,知道这是怎么回事吗?

[编辑-磁盘空间信息]

# 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

[编辑-跟踪信息]

Strace对我来说还不错

[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

完整的strace日志可从此处下载


2
日志磁盘是否已满?
珍妮·D

抱歉,我忘记添加该信息,我将更新问题。但是仍然有足够的空间来写入日志。
Victor Henriquez 2013年

2
尝试和strace -p <pid>或在strace下手动启动rsyslog并检查它是否在抱怨什么
manjiki 2013年

好的建议,不幸的是我找不到任何相关的东西。我已经用strace日志更新了问题,以防万一您可以找到我所缺少的东西。我真的很沮丧
Victor Henriquez 2013年

在调试模式下手动运行(如果为iirc,则为-d),因此它不会分叉,或使用strace的follow forks选项。我不好,对不起。
manjiki 2013年

Answers:


13

最有可能是文件所有权问题。rsyslog开始以root身份运行,但随后放弃特权,并以syslog用户身份运行(配置指令$ PrivDropToUser)。

最初,syslog文件(auth.log,daemon.log等)由syslog:adm拥有,但是如果您将所有权更改为root(从文件列表中可以看到),则无论您是HUP(即重新加载)rsyslog还是重新启动它,由于缺少特权,将拒绝打开那些文件。

如果所有权更改是在日志轮换之后发生的,请检查createlogrotate配置的选项。可以像这样create 0644 syslog adm进行配置,/etc/logrotate.d/rsyslog甚至更好地进行配置,都可以在/etc/logrotate.conf省略模式,所有者和组时进行全局定义,就像这样create(这是默认配置),在这种情况下,将使用文件的相同值。请咨询man logrotate全部细节。

某些版本的rsyslog包含指令$ omfileForceChown作为外部更改文件所有权的变通方法,但不建议这样做。推荐的方法是正确配置所有权和权限。通过该链接可以找到有关此问题的更多信息。


1
这个。有关更多讨论和详细信息,请参阅启动板上
JustinC

你们这
家伙

1

如果文件权限全部正确且logrotate已正确配置,则下一步将是查看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 ]
 ...

一旦我的错字在此文件中被修复/etc/rsyslog.d/50-default.conf,syslog就开始再次写入/ var / log / syslog!


0

我遇到了这个问题,因为我的/ var / log位于一个ramdisk上,以减少SSD的磨损,并且我想将其移动到HDD上,因此我的历史比当前的启动还要多。

有趣的是,由于它是一个虚拟磁盘,所以我没有一个可以在单用户模式下进行复制,因此我不知道权限和所有权应该是什么!咄。

简短的故事,带您的新位置:

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

由于Rsyslog以“ syslog”用户(组“ syslog”)运行,因此现在可以写入/ var / log。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.