ユーザーのログイン記録を調べる。
しばらく使ってないサーバーへ久しぶりにログインしたとき、誰かが使ってないか、Rootパスワード取られてないか不安に駆られることとかあります。サーバ乗っ取られてウチのサーバーがアタックしていると通報受けることも稀にあります。数十台あるとさすがに管理してられないのもあるので。。。
自分以外のユーザーがログインしてファイルを開いてたりしないか確認することもします。
ログイン状況の調査によく使うコマンドは次の通りです。
コマンド名 | 大体の用途 |
---|---|
lastlog | Unixの全ユーザーの最終ログインを見る |
last | ログイン履歴を新しいモノから順に見る。 |
w | 一文字でも立派なコマンド、ログインしている(tty使用中)のユーザー一覧 |
who | wと殆ど同じ |
finger | 昔は色々用途もあったけど、いまはwho/wと殆ど同じ |
ps | 起動中のプロセスを見る |
僕が実際使うのは 次のモノが多い
rootでログインされてないか(意図しないユーザーでログインされてないか)
lastlog | grep root
今ログインしているユーザは誰か。
who
詳しくは参考サイトで
Linuxコマンド逆引き大全 - 【 ユーザーのログイン履歴を参照する 】:ITpro
Linuxコマンド集 - 【 lastlog 】 ユーザーが最後にログインした日付を表示する:ITpro
実際に叩いてみた結果を見る
コマンドの細かい違いとか言葉で覚えるより、出力見た方が速いので。
lastlog の例
takuya@cheese:~$ lastlog ユーザ名 ポート 場所 最近のログイン root **一度もログインしていません** daemon **一度もログインしていません** proxy **一度もログインしていません** www-data **一度もログインしていません** takuya pts/0 om126243015156.o 水 9月 15 17:28:57 +0900 2010 sshd **一度もログインしていません** nx **一度もログインしていません** mysql **一度もログインしていません** Debian-exim **一度もログインしていません** dnsmasq **一度もログインしていません**
このように `getent passwd` で得られる全ユーザーについてそれぞれのユーザーの最終ログイン日時と、どこからつないだかがわかる。(実際にはwtmpログなんだけど)
last コマンド
直近一週間のログイン記録が分かる。SSHでつないでるとと、どのIP(ホスト)からつないだかが分かる。
wtmp を調べてくれる、この難点は wtmpのログより昔の記録は分からない。
たとえば wtmp のログ期間が一週間だったりするので注意が必要。
takuya@cheese:~$ last takuya pts/0 om126243015156.o Wed Sep 15 17:28 still logged in takuya pts/0 softbank12610417 Wed Sep 8 21:17 - 21:19 (00:01) wtmp begins Wed Sep 8 21:17:20 2010
who コマンド
takuya@cheese:~$ who takuya pts/1 2010-09-15 17:54 (om126243015156:S.0) takuya pts/2 2010-09-15 17:29 (om126243015156:S.1)
finger コマンド
takuya@cheese:~$ finger Login Name Tty Idle Login Time Office Office Phone takuya takuya pts/1 Sep 15 17:54 (om126243015156:S.0) takuya takuya pts/2 3 Sep 15 17:29 (om126243015156:S.1)
wコマンド
w コマンドは現在実行中のアプリを教えてくれる bash だったりするのであまり意味はないけど。
takuya@cheese:~$ w 17:58:09 up 142 days, 14:00, 2 users, load average: 0.03, 0.05, 0.14 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT takuya pts/1 om126243015156:S 17:54 0.00s 0.29s 0.01s w takuya pts/2 om126243015156:S 17:29 4:08 0.39s 0.37s /bin/bash
psコマンド
誰が何を実行しているか見るときは ps auxf しかないき、それをみるといい。
ps は -f オプションとつけるとプロセスの親子関係が分かるので嬉しいよ。
root 10368 0.0 0.0 3364 1064 ? S Sep01 0:00 \_ hald-runner root 10386 0.0 0.0 3428 1012 ? S Sep01 0:00 \_ hald-addon-input: Listenin root 10390 0.0 0.0 3440 1012 ? S Sep01 0:00 \_ /usr/lib/hal/hald-addon-cp 106 10391 0.0 0.0 2268 876 ? S Sep01 0:00 \_ hald-addon-acpi: listening root 10399 0.0 0.0 3428 1032 ? S Sep01 1:55 \_ hald-addon-storage: pollin root 10420 0.0 0.0 4868 1960 ? Ss Sep01 0:00 /usr/sbin/NetworkManager --pid-fil root 10442 0.0 0.0 3520 1164 ? Ss Sep01 0:00 /usr/sbin/NetworkManagerDispatcher root 10466 0.0 0.0 3892 1016 ? Ss Sep01 0:00 /usr/bin/system-tools-backends root 14159 0.0 0.0 3688 1284 ? S Sep01 0:00 /bin/sh /usr/bin/mysqld_safe mysql 14196 0.0 1.9 244848 40768 ? Sl Sep01 4:52 \_ /usr/sbin/mysqld --basedir=/us root 14197 0.0 0.0 2800 648 ? S Sep01 0:00 \_ logger -p daemon.err -t mysqld root 8772 0.0 0.4 26388 8436 ? Ss Sep01 0:15 /usr/sbin/apache2 -k start www-data 25469 0.0 0.2 26900 5028 ? S Sep12 0:00 \_ /usr/sbin/apache2 -k start www-data 25470 0.0 0.2 26900 5028 ? S Sep12 0:00 \_ /usr/sbin/apache2 -k start www-data 25471 0.0 0.2 26884 5020 ? S Sep12 0:00 \_ /usr/sbin/apache2 -k start www-data 25472 0.0 0.2 26884 5020 ? S Sep12 0:00 \_ /usr/sbin/apache2 -k start www-data 25473 0.0 0.2 26884 5020 ? S Sep12 0:00 \_ /usr/sbin/apache2 -k start www-data 31767 0.0 0.2 26884 5020 ? S Sep13 0:00 \_ /usr/sbin/apache2 -k start www-data 24266 0.0 0.2 26884 5020 ? S Sep15 0:00 \_ /usr/sbin/apache2 -k start www-data 24274 0.0 0.2 26884 4968 ? S Sep15 0:00 \_ /usr/sbin/apache2 -k start root 10986 0.0 0.0 5408 1076 ? Ss Sep09 0:13 /usr/sbin/sshd root 13694 0.0 0.1 8004 2468 ? Ss 23:28 0:00 \_ sshd: takuya [priv] takuya 13699 0.0 0.0 8004 1356 ? S 23:28 0:00 \_ sshd: takuya@pts/0 takuya 13700 0.1 0.2 7908 5392 pts/0 Ss 23:28 0:00 \_ -bash takuya 13735 0.0 0.0 3476 988 pts/0 R+ 23:32 0:00 \_ ps auxf
今後やりたいなぁ。
→今後の対策は wtmp のログ期間を長くすることが必要になる。
→Syslogを一箇所に集める必要がある。