rsyslog でコンソールに打ち出されるメッセージを消すのに手間取った話

今まで emerg (ヤバいよヤバいよ)を受け取ったことがなかった...

とある ASUSWiFiメッシュルーターを設定中に起きた出来事です。

Ubuntu 20.04 LTS にインストールした rsyslog で ASUSルーターからの syslog を受けていると、SSHログインしたターミナルで鬱陶しいビープが定期的に発生する。なんなら、ビープではなく wall 的にターミナル上に強制的にメッセージが出力される。

この現象がなんなのか、(syslogで受け取っているメッセージである以外に)しばらく分からず放置していた。が、vimを開いていても割り込んでくるのは流石に迷惑なので、どうしたら無効に出来るものかと調べてみました。

wall コマンドって有りましたね、懐かし...

WALL(1)                     Linux User's Manual                    WALL(1)

NAME
       wall -- send a message to everybody's terminal.

SYNOPSIS
       wall [-n] [ message ]

DESCRIPTION
       Wall sends a message to everybody logged in with their mesg(1) per‐
       mission set to yes.  The message can be given  as  an  argument  to
       wall,  or  it can be sent to wall's standard input.  When using the
       standard input from a terminal, the message  should  be  terminated
       with the EOF key (usually Control-D).

       The  length of the message is limited to 20 lines.  For every invo‐
       cation of wall a notification  will  be  written  to  syslog,  with
       facility LOG_USER and level LOG_INFO.

OPTIONS
       -n     Suppresses the normal banner printed by wall, changing it to
              "Remote broadcast message".  This option is  only  available
              for  root  if wall is installed set-group-id, and is used by
              rpc.walld(8).

ENVIRONMENT
       Wall ignores the TZ variable - the time printed in  the  banner  is
       based on the system's local time.

SEE ALSO
       mesg(1), rpc.rwalld(8).

AUTHOR
       Miquel van Smoorenburg, miquels@cistron.nl

                               15 April 2003                       WALL(1)

同じホストにログイン中の皆さまに一斉にメッセージを送り付けることが出来るコマンド。 主には、管理者がホストコンピュータをシャットダウンする時に、ログインしている利用者を追い出すために「出ていけ」メッセージをターミナルに割り込ませるのだ。

ビープ音

bash でのビープ音を制御するのは bell-style (via. Visual Bell mini-Howto )

set bell-style audible|visible|none

rsyslog で syslog 受けてから起きているのだが、どこで wall 叩いているのか?

mseg(1)set bell-style none を無効化したら大人しくなると思ったがダメだったので、発生源をなんとかするしかなさそうだ...。

rsyslog の設定ファイルは /etc/rsyslog.conf なので読んでみたが、どうもそれっぽいものがない...。RH系サーバーしか触ったことがないから Ubuntu はヨクワカラナイ...。

$ cat /etc/rsyslog.conf  | grep -Ev '^$|^#'
module(load="imuxsock") # provides support for local system logging
module(load="imklog" permitnonkernelfacility="on")
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
$RepeatedMsgReduction on
$FileOwner syslog
$FileGroup adm
$FileCreateMode 0640
$DirCreateMode 0755
$Umask 0022
$PrivDropToUser syslog
$PrivDropToGroup syslog
$WorkDirectory /var/spool/rsyslog
$IncludeConfig /etc/rsyslog.d/*.conf

コンソール、tty に割り込むような出力は定義されていないように見えるんだよなぁ...。分からんから CentOS 7 の rsyslog.conf と比べてみると...。趣がだいぶ違うな...。

$ cat /etc/rsyslog.conf | grep -Ev '^#|^$'
$ModLoad imuxsock # provides support for local system logging (e.g. via logger command)
$ModLoad imjournal # provides access to the systemd journal
$WorkDirectory /var/lib/rsyslog
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
$IncludeConfig /etc/rsyslog.d/*.conf
$OmitLocalLogging on
$IMJournalStateFile imjournal.state
*.info;mail.none;authpriv.none;cron.none                /var/log/messages
authpriv.*                                              /var/log/secure
mail.*                                                  -/var/log/maillog
cron.*                                                  /var/log/cron
*.emerg                                                 :omusrmsg:*
uucp,news.crit                                          /var/log/spooler
local7.*                                                /var/log/boot.log

CentOS 7 には *.emerg :omusrmsg:* が有るので、mesg と bell がターミナルに割り込むのは分かるのだが。。。今まで食らったことがなかったな...。

さて、Ubuntu ではどこにあるのか、チョット奥まったところで見つけた...。

$ cat /etc/rsyslog.d/50-default.conf  | grep -Ev '^$|^#'
auth,authpriv.*         /var/log/auth.log
*.*;auth,authpriv.none      -/var/log/syslog
kern.*              -/var/log/kern.log
mail.*              -/var/log/mail.log
mail.err            /var/log/mail.err
*.emerg             :omusrmsg:*

:omusrmsg:* が Output Module User Message だ。これは要らんのでコメントアウトしてしまえば、鬱陶しさは消える。

そう言えば、いままでこんな目に遭ったことがなかった。 *.emerg とは何なのだろうか?

f:id:nginoza:20211222020141p:plain
syslogのセベリティ via. https://wiki.gentoo.org/wiki/Rsyslog

ツーかさ、「システムダウンの危機」ってどない? ASUSルーターは何故気軽に emerg を出すのだろうか?勘弁してくれ。

そう言えば、syslog って古い書式と新しい(新しいか?)書式がいつまでも混在していますね。。。なんでですかね? via. よくあるご質問(サポートFAQ)・詳細: よくあるご質問(サポートFAQ)・検索一覧 | NEC