CodeGym /コース /Docker SELF /アクティブユーザーとログインのモニタリング: コマンド `who`, `w`, `last`

アクティブユーザーとログインのモニタリング: コマンド `who`, `w`, `last`

Docker SELF
レベル 5 , レッスン 4
使用可能

アクティブユーザーとログインのモニタリング: コマンド 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

whow が現在の情報を提供するなら、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. 特徴とよくあるミス

監視コマンドを使用する際には、次のことを覚えておくべきだよ:

  1. ログファイルが消去される可能性がある。 誰かが意図的に/var/log/wtmpから記録を消去した場合、lastコマンドは何も表示しないよ。これがログを定期的にバックアップしたり、リモートサーバーに送信したりするのが重要な理由だね。

  2. 出力の理解を簡単にする。 時々、コマンドの出力が多すぎることがある(たとえば、大勢のユーザーがいる場合)。欲しい情報を探すためにgrepのようなフィルターを使うと便利だよ:

    last | grep user1
    
  3. システム設定に依存する。 一部のシステムでは、設定によってログイン履歴が記録されないことがある。/var/log/wtmpが定期的に更新されていることを確認してね。

これらの知識をどう実際に活用するの?

  • サーバー管理。 例えば、君が会社の管理者で、誰かがシステムを間違えて壊したりしないよう安全性を保ちたい場合に役立つ。
  • 脅威の検出。 監視ツールを使うことで、不正アクセスの試みを検出できる。
  • システム監査。 セキュリティ基準に準拠しているかを確認するとき、これらのコマンドを使ってユーザーのアクティビティを分析することが多いよ。
  • 診断。 サーバーが遅くなっている?誰が何をしているのかをチェックしてみよう!

これで、君もシステムをモニタリングする準備はバッチリ!システムの保護は、その裏で何が起きているかを理解することから始まるんだ。

コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION