それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

Unixユーザーのログイン記録を調べて、不正アクセスがないか確認する。

ユーザーのログイン記録を調べる。

しばらく使ってないサーバーへ久しぶりにログインしたとき、誰かが使ってないか、Rootパスワード取られてないか不安に駆られることとかあります。サーバ乗っ取られてウチのサーバーがアタックしていると通報受けることも稀にあります。数十台あるとさすがに管理してられないのもあるので。。。

自分以外のユーザーがログインしてファイルを開いてたりしないか確認することもします。

ログイン状況の調査によく使うコマンドは次の通りです。

コマンド名 大体の用途
lastlog Unixの全ユーザーの最終ログインを見る
last ログイン履歴を新しいモノから順に見る。
w 一文字でも立派なコマンド、ログインしている(tty使用中)のユーザー一覧
who wと殆ど同じ
finger 昔は色々用途もあったけど、いまはwho/wと殆ど同じ
ps 起動中のプロセスを見る

僕が実際使うのは 次のモノが多い

rootでログインされてないか(意図しないユーザーでログインされてないか)
lastlog | grep root 
今ログインしているユーザは誰か。
who

実際に叩いてみた結果を見る

コマンドの細かい違いとか言葉で覚えるより、出力見た方が速いので。

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を一箇所に集める必要がある。