Rsyslog

Rsyslog 無法正常工作,它沒有記錄任何內容

  • March 17, 2022

我正在執行一個 Debian 伺服器,幾天前我的 rsyslog 開始表現得很奇怪,守護程序正在執行,但它似乎沒有做任何事情。許多人使用該系統,但我是唯一擁有(合法)root 訪問權限的人。

我正在使用預設的 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、unhide 以嘗試在遠端主機中找到隱藏程序/埠和 nmap,以與 netstat 顯示的埠進行比較。我知道這並不意味著什麼,但一切看起來都很好。該系統還有一個 iptables 防火牆,它對傳入/傳出連接非常嚴格。

這讓我發瘋,知道這裡發生了什麼嗎?

$$ EDIT - disk space info $$

# 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 - strace info $$

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 日誌可以從這裡下載

很可能是文件所有權問題。rsyslog 開始以 root 身份執行,但隨後放棄特權並以使用者 syslog 身份執行(配置指令$PrivDropToUser)。

syslog 文件(auth.log、daemon.log 等)最初歸 syslog:adm 所有,但如果您將所有權更改為 root(從您的文件列表中可以看出),那麼無論您是否 HUP(即重新載入)rsyslog 或重新啟動它,由於缺乏權限,它將被拒絕打開這些文件。

如果所有權更改發生在日誌輪換之後,請檢查create您的 logrotate 配置選項。要麼像create 0644 syslog admin一樣配置它,/etc/logrotate.d/rsyslog甚至更好,在/etc/logrotate.conf省略模式、所有者和組的情況下全域定義它,就像這樣create(順便說一下,這是預設配置),在這種情況下,將使用文件的相同值。詳情請諮詢man logrotate

某些版本的 rsyslog 包含指令$omfileForceChown作為文件所有權的外部更改的解決方法,但不建議這樣做。推薦的方法是正確配置所有權和權限。可以在該連結之後找到有關此問題的更多資訊。

引用自:https://serverfault.com/questions/518975