ユーザーのログイン状況を確認するコマンドをまとめてみました。
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/utmp | 664 |
last | /var/log/wtmp | 664 |
[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 [オプション] ドメイン名 | ドメイン管理者の連絡先を調べる |