自分のコンピュータを他の人と共有し、その人にsudoアクセスを許可した場合、その人がどのようにコンピュータを使っているかを監視するのは賢明なことです。ありがたいことに、sudoの履歴をチェックするのは簡単です。どのようにするか見てみましょう。

認証ログ

Linux のサービスの多くは、問題のトラブルシューティングに役立てるためにログを残しています。ありがたいことに、とりわけ、この記事で求めている情報を正確に伝える詳細なリストも保存されています。このリストで、誰が、いつ、sudoを使ってどのコマンドを発行したかを確認することができます。この情報を見つけるには、DebianやUbuntuベースのディストリビューションを使用している場合、お気に入りのターミナルに次のように入力します。

sudo nano /var/log/auth.log

他のディストリビューションでは、場所は異なるかもしれません。この情報は “/var/log/secure” または “/var/log/audit/audit.log” にある可能性があります。sudoerのファイルを確認することで、このログファイルの場所を見つけることができます。これもディストリビューションによっては、違う場所にあるかもしれません。通常、"/etc/sudoers" にあります。お気に入りのテキストエディタで開き、ログファイルのエントリを検索してください。その値は、私たちが探しているファイルがある場所です。ですから、代わりにあなたのものをチェックするために、上のコマンドを書き換えてください。

混沌を理解する

ログファイルには、おそらく興味のない項目が大量に含まれています。スクロールして目を通すか、テキストエディタの検索機能を使って sudo のすべての使用箇所を探すことができます。

しかし、代わりに grep を使うとよりよいでしょう。この方法では、単純なクエリに基づいてログの内容をフィルタリングすることができます。その中のすべての sudo エントリを見つけるには、次のようにします。

sudo grep sudo /var/log/auth.log

ログのパスをあなたのディストリビューションの正しいものに更新することを忘れないでください。

このコマンドは結果をターミナルに直接表示します。

ファイル形式で表示させたい場合は、コマンドの後にリダイレクトを追加してください。

sudo grep sudo /var/log/auth.log > sudolist.txt

それをチェックアウトすると、日付、時間、コンピュータ名、使用したコマンドを含む一連のエントリが見つかります。

通常のバッシュ

ターミナルで入力したすべてのコマンドを調べるだけなら、Homeフォルダにある「.bash_history」ファイルをチェックアウトすることができます。例えば、ターミナルで次のように入力します。

sudo nano /home/USERNAME/.bash_history

これで、あなた(または他のユーザー)がターミナルで実行したすべてのコマンドが表示されます。

Journalctl

これで、sudo が何をしたかを見るもうひとつの方法は、systemd の journalctl を使うことです。その中で、これは systemd を使うすべての Linux ディストリビューションに付属している、システムロギングプログラムです。

Debian や Ubuntu だけでなく、Arch Linux や Fedora などの人気のあるディストリビューションも含まれます。このように、systemd ベースの Linux ディストリビューションを常に切り替えている場合、journalctl は有用なユーティリティになります。

それを知っていれば、sudo ログを見るために journalctl を使うのは信じられないほど簡単です。まず、root ユーザーか superuser 権限を持つアカウントでログインする必要があります。

sudoプログラムのすべてのログを表示するには、次のコマンドを実行します。

sudo journalctl -e /usr/bin/sudo

これを実行すると、今度は journalctl プログラムが sudo プログラムを見て、すべてのジャーナルエントリを検索し、sudo に言及しているすべてのログを表示するように指示します。そこから、journalctl はすべての情報をシステムページャーにパイプし、sudo 関連のログの全履歴を簡単にスクロールできるようにします。

ここから、journalctl は、ユーザーが sudo コマンドを起動したすべてのインスタンスをハイライトします。上で説明したように、これはマルチユーザーシステムを修正しようとしているときに、誰がいつ特権コマンドを実行したかを知りたい場合に役に立ちます。

GUI 特化型プログラム

全てを知った上で、デスクトップ環境に付属する専用のインターフェイスを使って、システムのsudoログを読むことも可能です。この方法だと、システムを監視するために覚えなければならない複雑なコマンドの量を減らすことができます。

重要なことは、これらのプログラムはデスクトップ環境の基本的なインストールに必ず含まれていることです。しかし、Linuxディストリビューションは、これらの小さなユーティリティが含まれていないカスタムビルドを作成することがよくあります。そのため、これらのツールがすでにシステムにインストールされているかどうか、まず確認する必要があります。

GNOME ログ

GNOME Log ユーティリティは、GNOME デスクトップ環境を使用するディストリビューションのデフォルトのグラフィカルシステムロガーです。Ubuntu 21.10、22.04、Fedora 36 などのディストリビューションが含まれます。

プログラムを使い始めるには、まずアプリケーションメニューを開きます。そこから “Logs” と入力して GNOME ログ・ユーティリティを探します。

一旦開くと、プログラムはシステムの特定の側面に関するログをチェックするためのタブをいくつか表示します。sudoのログを確認するには、“Security “をクリックする必要があります。

これは、あなたのマシンの最新のセキュリティ情報をすべて表示します。これには、sudo を使用しているかどうかに関係なく、root 権限で実行されたすべてのプロセスが含まれます。ここから、ウィンドウの右上にある虫眼鏡のアイコンを押して、これらのログエントリーの検索を開始することができます。

これで、“sudo” という単語を入力すれば、sudo で実行されたコマンドとプロセスだけを見たいことを GNOME Logs に伝えることができます。

KSystemLog

KSystemLog は Kubuntu 21.10, 22.04 や Manjaro KDE など、デスクトップに KDE Plasma 環境を採用しているディストリビューションのデフォルトのログユーティリティです。GNOME Logと同様に、マシンの広範なビューを提供することができる、完全な機能を備えたプログラムでもあります。

KSystemLog を使ってシステムの sudo 履歴を見るのは非常に簡単です。まず、画面の左下にある Plasma アイコンをクリックして、アプリケーションランチャーを開く必要があります。

ランチャーの検索バーに “KSystemLog “と入力してください。これでユーティリティが検索され、Enterを押すとすぐに実行されます。

実行すると、KSystemLog は直ちに現在システムで動作しているプログラムのログを表示します。ここから、フィルタバーで “sudo” と入力すると、sudo から来たログだけを見ることができます。

MATEシステムログ

最後に、MATE System Logは、MATEベースのディストリビューションにデフォルトで搭載されている、最小限のGUIログプログラムです。これまでの GUI ロガーとは異なり、マシンで利用可能なすべてのシス テムログのためのシンプルなファイルブラウザを提供するだけです。そのため、MATEシステムログは初心者が適切に使用するには難しく見えるかもしれません。

にもかかわらず、このプログラムを使って sudo の履歴ログを見るのは比較的簡単です。まず、デスクトップの左上にあるメニューボタンをクリックして、アプリケーションメニューを開いてください。

そこから検索バーに焦点を当て、“Log File Viewer “と入力してください。これで MATE にシステムログプログラムを探し、実行するように指示します。

実行されると、MATE システムログプログラムはシステムで利用可能な現在のログをすべてリストアップします。これで、sudo の履歴を見るために必要な最後のことは、“auth.log” をクリックすることです。

上記のように、これはあなたのシステムで実行されたすべてのsudo関連のコマンドを記録するログファイルです。私の場合、最近sudoでシステムのアップデートを実行したことが表示されました。

よくある質問

journalctlから最新のsudoログエントリだけを表示させることは可能ですか?

はい!journalctlから限られた量のログだけを表示することは可能です。これは、酷使されているマシンをメンテナンスしていて、直近の sudo 関連のログを知りたい場合に特に役立ちます。ターミナルで次のコマンドを実行します。

sudo journalctl –lines=10 -e /usr/bin/sudo` とします。

これを実行すると、journalctl に、実行中に記録された sudo 関連の直近の 10 件のエ ントリだけを表示させるように指示します。

また、journalctl から時間指定のログだけを表示させることもできます。このコマンドは、昨日から今日にかけてコミットされた sudo 関連のログだけを表示するよう journalctl に指示します。

sudo journalctl --since=yesterday --until=today -e /usr/bin/sudo とします。

私は Bash を使っていないのですが、sudo の履歴を見ることはできますか?

これはあなたが現在使っているシェルに大きく依存します。しかし、ほとんどの場合、すべてのシステムシェルは、あなたがマシンで実行したすべてのコマンドの実行履歴を作成することができるはずです。

たとえば、Debian ベースのシステムの履歴ファイルは、しばしば “.history” というラベルが付いています。そのため、デフォルトの “.bash_history” ではなく、このファイルを開くことができます。

KSystemLog を開くとパスワードを要求されたり拒否されたりするのですが、コピーが壊れているのでしょうか?

デフォルトでは、KSystemLog は昇格した特権で自分自身を開こうとします。これにより、ログを表示するだけでなく、システムで現在実行されているプロセスを管理することができるようになります。

そのため、KSystemLog を初めて開くときは、常にルート・ユーザーとして自分自身を実行しようとします。しかし、そのためには、まず、あなたのルート・アカウントのパスワードを知る必要があります。

それでも、KSystemLogはroot権限を与えずに使用することが可能です。そのためには、KSystemLogが昇格した特権を要求してきたときに「無視」ボタンを押せばいいのです。

画像クレジット:Unsplash

Akira
Akiraは情熱的なゲーマーであり、製品レビュアーです。ゲームをしていないときは、最新のゲーミングアクセサリーを試したり、製品のレビューをしていることが多い。彼の分かりやすいスタイルは、ゲーマーが自分のニーズに最も適した製品を簡単に判断できるようにするものです。また、技術的な問題にも精通しており、その解決方法も知っている。