【LPICで見た】/etc/motdの内容を出力しているのは誰?【答え:sshd】

 前書き:Message Of The Dayファイルとは

LPIC受験者は、よくご存知の/etc/motd (Message Of The Day)ファイル。

ユーザがLinuxサーバにsshログインした際に、/etc/motdファイルの内容がターミナル上に表示されます。

例えば、Raspberry Piでは、/etc/motdファイルに以下の内容が記載されています。

Raspberry Piにsshログインすると、以下のように/etc/motdファイルの内容が出力されます。

/etc/motdファイルの主な用途(記載内容)は、以下がパッと思いつきます。

  • チームメンバへの連絡を記載
  • サーバを見分けるためのロゴ追加
  • イタズラ、負の感情の吐露(私はコレをよくします)

で、不意に「/etc/motdファイルの内容をターミナルに表示しているのは誰よと疑問が湧いたので、調査した内容を本記事で紹介します。Debian環境を前提とします。

本記事で説明する内容
  • /etc/motdファイルの作成者
  • /etc/motdを表示する人
  • /etc/motdメッセージを非表示にする方法

              

/etc/motdファイルはbase-filesが生成

そもそも、/etc/motdファイルは誰が作るのでしょうか。

特定ファイルが収録されているパッケージを教えてくれるapt-fileコマンドを使用すると、OSの基本的なシステムファイルを提供するbase-filesパッケージがヒットします。

base-filesパッケージを取得して中身を確認すると、/etc/motdファイルの原型が見つかります。しかし、一部の情報(#OSNAME#)が変数の状態です。

上記のmotdファイルで登場した#OSNAME#を書き換えてくれる人は、base-filesパッケージ内のDebianパッケージ生成スクリプトdebian/rules(中身はMakefile)です。sedコマンドで#OSNAME#文字列を置換しています。

                  

motdを表示する人 = sshd (openssh-server)

では、本題である/etc/motdファイルの内容を表示する人は誰でしょうか。

皆さんの予想通り、犯人はsshd(openssh-serverパッケージ)でした。

先ほどと同様に、aptコマンドでopenssh-serverパッケージを取得して中身を確認した所、openssh-7.9p1/session.cに関数do_motd()が定義されていました。

以下に示す通り、do_motd()の中で/etc/motdファイルの内容を表示しています。

                

motdメッセージを非表示にする方法

前述したopenssh-7.9p1/session.cを読んでいた時に気づきましたが、${HOME}/.hushloginファイルが存在する場合は、ログイン時にmotdメッセージを出力しないようです。

恐らく、ssh認証方式によってmotdメッセージの出力有無が決まっているのでしょう(この内容はLPIC出題内容にあったかどうか忘れました)

                             

おすすめ