動的なmotdが欲しいのですが、どうすればいいのかわかりません。
見つけたものを試して、/etc/update-motd.d/00-header
、10-sysinfo
、90-footer
を追加し、/etc/motd
/var/run/motd.dynamic
、/run/motd.dynamic
、/run/motd
にシンボリックリンクしましたまたは/var/run/motd
。
/etc/pam.d/sshd
には次の行があります:
# Print the message of the day upon successful login.
# This includes a dynamically generated part from /run/motd.dynamic
# and a static (admin-editable) part from /etc/motd.
session optional pam_motd.so motd=/run/motd.dynamic
session optional pam_motd.so noupdate
Systemdとも混同しています。
これを行う方法はありますか?誰かが簡単な運命の例を提供できますか?
以下のように、Debian Jessie 8.2ホストでfortuneの例を使用して単純なdynamic-motdをテストでき、問題がバグのある動作に関連していることがわかりました。
mkdir /etc/update-motd.d
cd /etc/update-motd.d
以下のように2つのテストファイルを作成し、実行可能にした
root@debian:/# cd /etc/update-motd.d/
root@debian:/etc/update-motd.d# ls -l
total 8
-rwxr-xr-x 1 root root 58 Dec 1 23:21 00-header
-rwxr-xr-x 1 root root 41 Dec 1 22:52 90-fortune
root@debian:/etc/update-motd.d# cat 00-header
#!/bin/bash
echo
echo 'Welcome !! This is a header'
echo
root@debian:/etc/update-motd.d# cat 90-fortune
#!/bin/bash
echo
/usr/games/fortune
echo
ただし、現時点では、motdに変更はありませんでした。だから私はstraceしたsshdプロセスです。そのトレース(以下に示す興味深い部分)から、新しく作成されたmotd.newファイルの名前が/ var/run/motdに変更されていることがわかります。しかし、後で/run/motd.dynamicから読み取ろうとしています-これは作成されていません
20318 rename("/var/run/motd.new", "/var/run/motd") = 0
20318 open("/run/motd.dynamic", O_RDONLY) = -1 ENOENT (No such file or directory)
20318 open("/etc/motd", O_RDONLY) = 8
この問題は、pam_motdモジュールとの不整合に関連しているようです。バグレポートを見る https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=743286;msg=2
Motdファイルの場所を/run/motd.dynamic
の/run/motd
から/etc/pam.d/sshd
に変更するだけで、動作します
root@debian:/etc/pam.d# grep pam_motd sshd
#session optional pam_motd.so motd=/run/motd.dynamic
session optional pam_motd.so motd=/run/motd
session optional pam_motd.so noupdate
以下は、sshログイン中に見られるサンプルMOTDです...
Welcome !! This is a header
* Culus fears Perl - the language with optional errors
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
You have new mail.
Last login: Tue Dec 1 23:49:57 2015 from x.x.x.x
これは長年にわたって変化しました:
最初は/etc/motd
(静的)。
その後、Ubuntuは独自のパッケージを作成しましたupdate-motd
は、cronから呼び出されたスクリプトに基づいています。
最後に、PAMはUbuntuの/etc/update-motd.d/のアイデアをコピーしたため、Debianや他の人もそのように動作します。
ここに説明があります
https://ownyourbits.com/2017/04/05/customize-your-motd-login-message-in-debian-and-ubuntu/
これが現在の状況です。PAMは/var/run/motd.dynamic
および/etc/motd
存在する場合(投稿から貼り付け)
/etc/motd
–クラシックな静的ファイル。 Ubuntu 16.04 LTSには、/ var/run/motdへのシンボリックリンクとしても存在しなくなりました。作成された場合は、その内容も印刷されます。/var/run/motd
–これはUbuntuの最初の実装で使用されました。もう使われていません。 PAMによって無視されるだけです。/var/run/motd.dynamic
–これは現在ログイン時に表示されるものです。これは、起動ごとに/etc/init.d/motdによって更新されます。また、/ etc/update-motd.d /内のスクリプトが存在する場合は、それを実行することにより、PAMによって更新されます。/etc/motd.tail
– /etc/update-motd.dの入力に使用されるUbuntuパッケージ。そのうちの1つは、このファイルのコンテンツを分類するため、静的コンテンツを簡単に追加できました。そのスクリプトはパッケージに存在しないため、ファイルには意図した効果がありません。投稿の例
mkdir /etc/update-motd.d
rm -f /etc/motd # in Debian still exists
cat > /etc/update-motd.d/10logo <<EOF
#!/bin/sh
echo
cat /etc/issue
EOF
cat > /etc/update-motd.d/20updates <<'EOF'
#!/bin/sh
echo
echo "uptime is $( uptime )"
echo "date is $( date )"
EOF
chmod a+x /etc/update-motd.d/*