sudo の logfile とは
Linux で sudo 権限を実行する際、セキュリティ上 sudo の実行ログを残すべきなのだが、visudo コマンドで sudoers ファイルを編集する際に以下のように追記してやると指定されたパスに sudo 実行履歴が転送されるようになっていた。
Defaults logfile=/var/log/sudo.logこれはフォレンジック調査が必要になった場合、このログが役に立つのでサーバ運用では必須と言える設定だった。
起きたこと
26年4月に Ubuntu Server LTS 26.04 がリリースされたのでサーバ運用で使っていた矢先、セキュリティの観点でlogfile オプションをいつもの手癖で設定しようとしたら何故か visudo でエラーが吐かれた。
/tmp/sudoers-7uW086/sudoers:12:17: syntax error: unknown setting: 'logfile'
Defaults logfile=/var/log/sudo.log
^~~~~~~
What now? e(x)it without saving / (e)dit again:書式は何も間違ってないが、何故?
原因
Ubuntu Server LTS 26.04 では sudo では無く、sudo-rs が採用されている。
が、この sudo-rs は logfile をサポートしていない。
https://docs.rs/crate/sudo-rs/latest
logfile is not supported --- logging is always done via syslog.流石に冗談だよな。
syslog のログは基本的にはローテーションするので1年ローテーションするよう設定させてもいいが、sudo 以外のログも吐き出されるのでディスク容量を逼迫させてしまう可能性があり出来ればやりたくない。
対処
rsyslog を使って転送させる方法がある。
まず、/etc/rsyslog.d 配下に config ファイルを作成する。
既にあるファイルから追記しても良いと思うが、汚したくないので今回は50-sudo.conf として新規作成する。
$ sudo vim /etc/rsyslog.d/ <==tab を押下
20-ufw.conf 21-cloudinit.conf 50-default.conf
$ sudo vim /etc/rsyslog.d/50-sudo.confそして次のように記載する。
if ($programname == 'sudo' and $msg contai$msg contains 'COMMAND='ns 'COMMAND=') then {
action(type="omfile" file="/var/log/sudo.log")
stop
}$programname == 'sudo' はログ出力が sudo であること、$msg contains 'COMMAND=’ は COMMAND= の文字が含まれていること、action(type="omfile" file="/var/log/sudo.log") は出力先を指定、そして stop で処理を止めている。
設定を保存後、念のため以下のコマンドを実行して config をチェックする。
エラーが出ておらず、「End of config validation run. Bye.」と出ていればよい。
$ sudo rsyslogd -N1
rsyslogd: version 8.2512.0, config validation run (level 1), master config /etc/rsyslog.conf
rsyslogd: End of config validation run. Bye.問題が無ければ rsyslog サービスを以下のコマンドで再起動する。
$ sudo systemctl restart rsyslog試しに whoami を sudo 権限で実行してみてログを確認。
$ sudo whoami
rootcat コマンドで出力を確認、次のように出ていれば完了。
$ cat /var/log/sudo.log
2026-09-10T10:38:04.217080+00:00 test sudo: test : TTY=/dev/pts/0 ; PWD=/home/test ; USER=root ; COMMAND=/usr/bin/whoami以上、誰かの助けになれば光栄です。
しかし、設定する手間が増えてしまったのでどうしたものか…。



