Rsyslog가 제대로 작동하지 않습니다. 아무것도 기록하지 않습니다. 사람입니다. 기본 rsyslogd 구성을 사용하고 있습니다 (관련이 있다고

데비안 서버를 실행 중이며 며칠 전에 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을 찾으려면 unstat를 실행하여 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 정보]

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는 루트로 실행되기 시작하지만 권한을 삭제하고 사용자 syslog (구성 지시문 $ PrivDropToUser ) 로 실행됩니다 .

syslog 파일 (auth.log, daemon.log 등)은 처음에 syslog : adm이 소유하지만 파일 목록에서 보이는 것처럼 소유권을 루트로 변경하면 rsyslog 또는 HUP (예 : 다시로드) 여부에 관계없이 권한 부족으로 인해 해당 파일을 열 수 없도록 다시 시작하십시오.

로그 회전 후 소유권 변경이 발생한 경우 로그 회전 create구성 옵션 을 확인하십시오 . 같은 방식 create 0644 syslog adm으로 구성 /etc/logrotate.d/rsyslog하거나 더 나은 방식으로 구성하고, /etc/logrotate.conf이와 같이 단순히 create기본 구성 인 모드, 소유자 및 그룹 을 생략하여 전역 적으로 정의하십시오. 이 경우 파일의 동일한 값이 사용됩니다. 자세한 man logrotate내용은 상담 하십시오.

일부 버전의 rsyslog에는 파일 소유권의 외부 변경에 대한 임시 해결책으로 지시문 $ omfileForceChown이 포함되어 있지만 권장되지는 않습니다. 권장되는 방법은 소유권과 권한을 올바르게 구성하는 것입니다. 이 문제에 대한 자세한 내용은 해당 링크를 참조하십시오.


답변

파일 권한이 모두 있고 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.confsyslog는 / var / log / syslog에 다시 쓰기 시작했습니다!


답변

내 / var / log가 SSD의 마모를 줄이기 위해 램 디스크에 상주했기 때문에이 문제가 있었으며 HDD로 이동하여 현재 부팅보다 더 많은 기록을 가지고 싶었습니다.

재미있는 점은 램 디스크이기 때문에 단일 사용자 모드에서 복사 할 사본이 없으므로 권한과 소유권이 무엇인지 알지 못했습니다! 어.

새로운 위치와 짧은 이야기 :

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

Rsyslog는 이제 ‘syslog’사용자 그룹 ‘syslog’로 실행되므로 / var / log에 쓸 수 있습니다.


답변