アクティブユーザーとログインのモニタリング: コマンド who
, w
, last
1. なぜユーザーの監視が重要なの?
Linuxはもちろん、どんなサーバーも(あるいはウェブサイトが詰まった怖い箱もそうだけど)、同時に多くのユーザーが作業する可能性を提供するよね。でも、もしサーバーが侵入されたらどうする?それとも、同僚の「いたずら者」が夜中にこっそり重要なファイルを削除しちゃったら?ユーザーのアクティビティを監視することで、誰がいつどこからシステムにログインしていたのか、そしてどんなプロセスを実行していたのかを把握する助けになるよ。それはまるでサーバーのための監視カメラみたいなもんだよ。
主要な監視ツール
サーバー上のユーザーアクティビティをチェックするには、Linuxでは3つの重要なコマンドが利用可能なんだ:
who
— システムで現在作業中のユーザーを表示する。w
— ユーザーのアクティビティやシステム負荷についてもう少し詳しい情報を提供する。last
— システムへのログイン履歴を表示する。
これらのコマンドそれぞれには特有のポイントがあって、異なるシナリオに適しているんだ。次にそれらを例で見てみよう。
2. コマンド who
コマンドwho
は、現在システムにログインしているユーザーのリストを表示する。これは「登録簿」みたいなもので、今サーバーに誰がいるのか確認できるよ。
who
コマンドの出力例:
user1 pts/0 2023-10-20 09:10 (192.168.1.100)
root pts/1 2023-10-20 09:15 (192.168.1.101)
ここで何を見ているかというと:
- ユーザー名
user1
,root
。 - どの端末から接続しているか
pts/0
,pts/1
。 - ログイン時間
2023-10-20 09:10
。 - 接続元
192.168.1.100
。
who
のオプション:
who -a
: システムのデータ(起動時間、実行中のプロセス、ユーザーなど)も表示する。who am i
: コマンドを実行したユーザーの情報だけを表示する。
3. コマンド w
who
は誰がログインしたかだけを記録するのに対して、w
はもっと多くの情報を提供するよ - 今ユーザーが何をしているかを教えてくれるんだ。これで、その人がちゃんとした作業をしているか、それともすぐに止めさせるべきかがわかるね。
w
出力例:
10:20:42 up 1 day, 5:12, 2 users, load average: 0.00, 0.01, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
user1 pts/0 192.168.1.100 09:10 1:00 0.01s 0.01s nano app.py
root pts/1 192.168.1.101 09:15 2:00 0.02s 0.02s htop
ここで何が起こっているか:
- 上部の行はシステム情報を提供しているよ: 現在の時刻、サーバーの稼働時間、ユーザー数、システム負荷
load average
。 - 表は以下を示している:
- ユーザー名
user1
,root
。 - ユーザーが接続しているセッション
pts/0
,pts/1
。 - ユーザーの IP アドレス
192.168.1.100
。 - システムへのログイン時間
09:10
。 - 放置時間
IDLE
。 - 現在ユーザーがやっていること
WHAT
, 例えば、nano
でファイルapp.py
を編集している。
- ユーザー名
w
のオプション:
w -h
: テーブルヘッダーを非表示にする。w username
: 特定のユーザーだけの情報を表示する。
4. コマンド last
who
と w
が現在の情報を提供するなら、last
は過去を見ることができる。これにより、システムへのすべてのログイン履歴が表示される。このコマンドは、ユーザーのすべてのログインが記録されるファイル /var/log/wtmp
を読み取る。
last
出力例:
user1 pts/0 192.168.1.100 Fri Oct 20 09:10 - 09:30 (00:20)
root pts/1 192.168.1.101 Fri Oct 20 09:15 - down (00:15)
ここで見る内容:
- ユーザー名
user1
,root
. - ターミナル
pts/0
,pts/1
. - IPアドレスまたはホスト名
192.168.1.100
,192.168.1.101
. - ログイン時間
Fri Oct 20 09:10
. - ログアウト時間
09:30
とセッション全体の時間00:20
.
last
のオプション:
last -n 10
: 最新の10件のエントリだけを表示する。last username
: 特定のユーザーのログイン履歴。last reboot
: サーバーが再起動された日時を表示する。
5. 実践例: ユーザーのアクティビティ分析
例えば、サーバーで夜間に誰が作業していたのかを確認したい時があります。それによって何か怪しいことが起きていないかを把握します。まずは現在ログインしているユーザーを確認してみましょう:
who
次に、彼らが何をしているのかを確認します:
w
もし何か怪しいこと(例えば知らないプロセス)が見つかった場合は、夜間に誰がログインしていたかを調べる必要があります。そのためには以下のコマンドを使います:
last
特定のユーザーの記録を調べる場合は、そのユーザーが気になった時に以下を使います:
last user1
もし異常(例えば未知のIPアドレスからのログイン)を見つけた場合、対応措置が必要です: アクセスを制限する、二要素認証を設定する、またはそのユーザーをブロックするなど。
6. 特徴とよくあるミス
監視コマンドを使用する際には、次のことを覚えておくべきだよ:
ログファイルが消去される可能性がある。 誰かが意図的に
/var/log/wtmp
から記録を消去した場合、last
コマンドは何も表示しないよ。これがログを定期的にバックアップしたり、リモートサーバーに送信したりするのが重要な理由だね。出力の理解を簡単にする。 時々、コマンドの出力が多すぎることがある(たとえば、大勢のユーザーがいる場合)。欲しい情報を探すために
grep
のようなフィルターを使うと便利だよ:last | grep user1
システム設定に依存する。 一部のシステムでは、設定によってログイン履歴が記録されないことがある。
/var/log/wtmp
が定期的に更新されていることを確認してね。
これらの知識をどう実際に活用するの?
- サーバー管理。 例えば、君が会社の管理者で、誰かがシステムを間違えて壊したりしないよう安全性を保ちたい場合に役立つ。
- 脅威の検出。 監視ツールを使うことで、不正アクセスの試みを検出できる。
- システム監査。 セキュリティ基準に準拠しているかを確認するとき、これらのコマンドを使ってユーザーのアクティビティを分析することが多いよ。
- 診断。 サーバーが遅くなっている?誰が何をしているのかをチェックしてみよう!
これで、君もシステムをモニタリングする準備はバッチリ!システムの保護は、その裏で何が起きているかを理解することから始まるんだ。
GO TO FULL VERSION