ユーザーのログイン状況を確認するコマンドのまとめ

ユーザーのログイン状況を確認するコマンドをまとめてみました。

LinuCレベル1の試験範囲である「1.10.1 セキュリティ管理業務の実施」において「ユーザのログイン状況や履歴を把握する」ためのコマンドです。

コマンド名内容
whoログイン中のユーザー情報を表示
wログイン中のユーザー情報と実行しているコマンドを表示
last最近ログインしたユーザーの一覧を表示

普通にLinuxマシンを操作する上でも常用するコマンドですし、覚えやすいのでサクッと体得してしまいましょう。

コマンド実行例ですが、前提条件として192.168.0.178のノードから192.168.0.227のノードにSSHログインしている状態で実行しています。

[ymizusawa@localhost ~]$ tty
/dev/pts/1

who 〜 ログイン中のユーザー情報を表示

$ who オプション

ログイン中のユーザー情報を表示します。

[ymizusawa@localhost ~]$ who
ymizusawa :0 2020-10-23 17:08 (:0)
ymizusawa pts/1 2020-12-09 17:29 (192.168.0.178)
ymizusawa pts/3 2020-11-30 09:20 (:0)
ymizusawa pts/4 2020-12-07 14:22 (192.168.0.121)

ユーザー名、端末名、ログイン日時、接続元アドレスを表示します。
pts/*はログイン端末名です。

ユニークなオプションとして以下のものがあります。

オプション内容
-qログインユーザーとユーザー数を表示
-rランレベルを表示
-bシステム起動時間を表示
[ymizusawa@localhost ~]$ who -q
ymizusawa ymizusawa ymizusawa ymizusawa
ユーザ数=4
[ymizusawa@localhost ~]$ who -r run-level 5 2020-10-23 17:07
[ymizusawa@localhost ~]$ who -b システム起動 2020-10-23 17:07

参考までに、who -qに近いコマンドとしてusersコマンドがあります。

[ymizusawa@localhost ~]$ users
ymizusawa ymizusawa ymizusawa ymizusawa

ちなみに、whoコマンドは、var/run/utmp ファイルの情報を参照しています。/var/run/utmp はバイナリファイルです。

w 〜 ログイン中のユーザー情報とユーザーが実行しているコマンドを表示

$ w オプション

ログイン中のユーザー情報とユーザーが実行しているコマンドを表示します。
ヘッダ(1行目)は uptime を実行した時と同じ情報です。

[ymizusawa@localhost ~]$ w 16:24:30 up 47 days, 23:16, 4 users, load average: 0.12, 0.04, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
ymizusaw :0 :0 2310月20 ?xdm? 21:49m 18.20s /usr/libexec/gnome-session-binary --session gnome-class
ymizusaw pts/1 192.168.0.178 15:50 6.00s 0.09s 0.02s w
ymizusaw pts/3 :0 3011月20 10days 0.08s 0.08s bash
ymizusaw pts/4 192.168.0.121 月14 29:03m 0.14s 0.14s -bash
[ymizusawa@localhost ~]$ uptime 16:24:53 up 47 days, 23:17, 4 users, load average: 0.09, 0.04, 0.05 [ymizusawa@localhost ~]$ uptime ; w -h 16:25:15 up 47 days, 23:17, 4 users, load average: 0.06, 0.04, 0.05
ymizusaw :0 :0 2310月20 ?xdm? 21:50m 18.20s /usr/libexec/gnome-session-binary --session gnome-class
ymizusaw pts/1 192.168.0.178 15:50 3.00s 0.10s 0.02s w -h
ymizusaw pts/3 :0 3011月20 10days 0.08s 0.08s bash
ymizusaw pts/4 192.168.0.121 月14 29:04m 0.14s 0.14s -bash

IDLEはログイン後、何もしていない時間。JCPUは端末から実行されている全てのプロセスが利用した時間。PCPUは現在実行しているコマンドが利用している時間。WHATはユーザーが現在実行しているコマンド。

情報を取捨選択する場合は、オプションを利用します。

オプション内容
-hヘッダを表示しない
-s一部表示を省略
-fログイン元を表示しない
-iログイン元をIPアドレスで表示
[ymizusawa@localhost ~]$ w -shf
ymizusaw :0 ?xdm? /usr/libexec/gnome-session-binary --session gnome-classic
ymizusaw pts/1 2.00s w -shf
ymizusaw pts/3 10days bash
ymizusaw pts/4 28:59m -bash

ちなみに、who同様に、wも /var/run/utmp ファイルの情報を参照しています。/var/run/utmp はバイナリファイルです。

last 〜 最近ログインしたユーザーの一覧を表示

$ last

最近ログインしたユーザーの一覧を表示します。

still logged in は現在もログイン中であることを表しています。

[ymizusawa@localhost ~]$ last
ymizusaw pts/1 192.168.0.178 Wed Dec 9 17:29 still logged in
ymizusaw pts/5 192.168.0.180 Mon Dec 7 15:36 - 17:56 (02:20)
ymizusaw pts/4 192.168.0.121 Mon Dec 7 14:22 still logged in
ymizusaw pts/1 192.168.0.178 Mon Dec 7 10:16 - 21:45 (11:29)
ymizusaw pts/1 192.168.0.178 Mon Dec 7 09:47 - 09:59 (00:12)
ymizusaw pts/5 192.168.0.178 Sat Dec 5 13:02 - 20:59 (07:57)
ymizusaw pts/4 192.168.0.199 Sat Dec 5 13:02 - 13:49 (00:46)
ymizusaw pts/3 :0 Mon Nov 30 09:20 still logged in
ymizusaw pts/1 192.168.0.121 Mon Nov 30 09:12 - 23:17 (6+14:05)
ymizusaw pts/1 10.0.1.7 Mon Nov 23 20:48 - 12:47 (5+15:59)
ymizusaw pts/3 10.0.1.56 Fri Nov 20 16:31 - 16:58 (00:26)
ymizusaw pts/1 10.0.1.7 Thu Nov 19 16:06 - 16:33 (4+00:27)
ymizusaw pts/3 10.0.1.50 Mon Nov 9 21:12 - 23:24 (02:12)
ymizusaw pts/2 10.0.1.55 Fri Oct 23 17:38 - 17:39 (00:01)
ymizusaw pts/1 10.0.1.7 Fri Oct 23 17:37 - 17:58 (26+00:21)
ymizusaw pts/0 :0 Fri Oct 23 17:08 - 09:12 (37+16:04)
(中略)
wtmp begins Mon Oct 12 17:02:01 2020

特定のユーザーのログイン履歴を確認したい場合は、コマンドの後にユーザー名を入れて実行します。

$ last hogehoge
hogehoge pts/1 192.168.0.178 Thu Dec 10 17:35 still logged in
hogehoge pts/1 192.168.0.178 Thu Dec 10 08:36 - 10:49 (02:13)
hogehoge pts/1 192.168.0.178 Wed Dec 9 17:49 - 20:02 (02:12)
wtmp begins Wed Dec 9 13:11:40 2020

lastコマンドは、ユーザーのログイン履歴が記録されている /var/log/wtmp ファイルを参照しています。/var/log/wtmpはバイナリファイルです。

コマンドが参照するファイルについて

先述の通り、who、w、lastコマンドが参照するファイルはバイナリファイルなので、catコマンドなどでは直接参照できませんが、いずれのファイルも一般ユーザーが参照可能な権限が付与されています。

コマンド参照するファイルファイル権限
who, w/var/run/utmp664
last/var/log/wtmp664
[ymizusawa@localhost ~]$ ls -l /var/run/utmp /var/log/wtmp
-rw-rw-r--. 1 root utmp 26496 12月 10 15:50 /var/log/wtmp
-rw-rw-r--. 1 root utmp 3840 12月 10 15:50 /var/run/utmp

一般ユーザーに対する読み取り権限を無効にすることで一般ユーザーによる参照を防ぐことができます。

以下の設定はrootになった上で /var/log/wtmp ファイルの権限を変更し、再び一般ユーザーで last コマンドを実行した例です。

[ymizusawa@localhost ~]$ su -
パスワード:
最終ログイン: 2020/11/20 (金) 14:30:55 JST日時 pts/1
[root@localhost ~]# chmod 660 /var/log/wtmp
[root@localhost ~]# ls -l /var/log/wtmp
-rw-rw----. 1 root utmp 26496 12月 10 15:50 /var/log/wtmp
[root@localhost ~]# exit
ログアウト
[ymizusawa@localhost ~]$ last
last: /var/log/wtmp: Permission denied

余談

whoが含まれるコマンドがありますので簡単にまとめておきます。

コマンド内容
whoami自分のユーザー名を表示する
whois [オプション] ドメイン名ドメイン管理者の連絡先を調べる