先に結論
Debian 13(trixie)以降、およびRaspberry Pi OSの最新版では、セキュリティ上の理由により wall コマンドの権限が変更・廃止されています。そのため shutdown のメッセージが他ユーザーに届きません。
同じ現象で詰まった方の参考になれば。
きっかけ
LPICの勉強中に「shutdownコマンドはwallを使ってログイン中の全ユーザーにメッセージを通知する」という記述を読み、実際に試してみました。
sudo shutdown -h +5 "shutdown soon!"
別のユーザー(taro)でSSHログインして待っていましたが、メッセージが届きません。
調査の流れ
まずwallを単体で試す
wall "hello"
これも届かず。エラーも出ない。
/dev/pts のパーミッションを確認
Linuxでは各ユーザーのSSHセッションは /dev/pts/0、/dev/pts/1 のような仮想端末ファイルとして存在しています。wall はこのファイルにテキストを書き込むことで画面に表示させる仕組みです。
ls -l /dev/pts/
# crw--w---- 1 udon tty pts/0
# crw------- 1 taro tty pts/4
pts/0 は tty グループに書き込み権限があります。問題なさそう。
wallコマンド自体を確認
ls -l $(which wall)
# -rwxr-xr-x 1 root root 67912 May 10 2025 /usr/bin/wall
あれ、-rwxr-xr-x です。本来であれば tty グループのsetgidビット(s)がついて -rwxr-sr-x 1 root tty になっているはずなのに、ありません。
wall が他ユーザーの /dev/pts/* に書き込むには tty グループの権限が必要で、setgidビットがあれば実行時に自動でその権限を借りられます。ビットがないと一般ユーザーでは他ユーザーのptsに書き込めません。
試しに root で直接書き込むと届くことを確認:
sudo su
echo "hello" > /dev/pts/0 # rootなら届く
straceで動きを追う
strace wall 'hello' 2>&1
ログを見ると /dev/pts/* への書き込みが一切行われていませんでした。メッセージ送信まで到達していない様子。
mesgコマンドがない
受信側の確認のために mesg を使おうとしたら、コマンド自体がインストールされていませんでした。
原因:2段階のセキュリティ対応
調べたところ、以下のRedditのスレを発見。
スレのリンクを確認すると、Debianのパッケージ変更ログに記載がありました。
ステップ1:CVE-2024-28085 への対処(2024年3月)
util-linux 2.39.3-11 での変更:
* Apply upstream patch fixing CVE-2024-28085
* No longer install wall, write setgid tty
wall コマンドに脆弱性が発見され、その対処として setgid ttyビットが削除されました。これにより一般ユーザーからの wall は他ユーザーの端末に書き込めなくなりました。
ステップ2:mesg・write の完全廃止(2024年11月)
util-linux 2.40.2-11 での変更:
* The mesg(1) and write(1) programs are no longer provided.
It is believed chatting between users is nowadays done using
more secure facilities.
mesg と write コマンド自体がパッケージから削除されました。「ユーザー間のやり取りはより安全な手段で行われるようになった」という理由です。
まとめ
ということで、新しいDebian系のOSではwallコマンドが使えないということが分かりました。
LPICの勉強は遅々として進まず……。笑
