ここでは、管理するコマンドを紹介していきます。
■topコマンド
# top
さまざまなシステム状況(CPU使用率、メモリー使用率、プロセスなど)をリアルタイム表示し、システム上でもっともリソースを消費しているプロセス順に表示します(5秒ごとに自動的に更新されます)。
*コマンドの終了:[ q ]キーを押すと終了します。
■uptimeコマンド
# uptime
現在時刻、稼働時間、ログインユーザー数、ロードアベレージ。
ロードアベレージは、左から順に1分、5分、15分前のシステムのロードアベレージ=実行順番待ちジョブの平均数で、CPUの個数(1CPUの場合はこの数字が1)以上の数字になると処理が重くなります。高負荷状態にある訳です。常にこの数字がCPU数を上回るようですと、何らかの改善策が必要ですね。
各プロセス合計、待機中プロセス、稼動中プロセス、ゾンビプロセス、停止プロセスの数。(ゾンビプロセス=親プロセスから生まれた子プロセスが終了したにも関わらず親プロセスがまだその終了確認をできない場合、子プロセス終了以前に親プロセスを終了させてしまったなどの場合に発生する恐ろしい怪物のこと)
左からユーザー、システム、nice、アイドルに費やされたCPUの時間を%表示。(niceとは、各プロセスの実行優先度のことで、ここではユーザー・システムの両方が合算されます)
■freeコマンド
# free -m(−mオプションは表示を解りやすいMB単位にします
【プロセス情報】注以下太字部分の説明
PID プロセス識別(ID)番号
USER プロセスの実行権限者
PRI 現在のプロセスの優先度。(処理の優先順位)
NI 他のプロセスに対する相対的優先度を指すnice値のこと。ここの値が大きい(プラス)ものほど、処理優先度は低くなり(後回しにされる)、−20〜19の間の値が入ります。−20が最高優先処理順位で19が最低優先処理順位。
SIZE プロセスの容量(KB単位)
RSS プロセスが使用している実メモリ容量(KB)
SHARE プロセスが使用している共有メモリ容量(KB)
STAT 現在のプロセスの状態を表示
S=スリープ状態
D=割込み不可スリープ状態
R=実行中
Z=ゾンビ状態(終了しきれずにいる状態)
T=停止中
N=NIがプラスの値状態を表示
<=NIがマイナスの値状態を表示
W=スワップアウトされた状態
%CPU 現在のCPU使用率(%)。この値の大きい順に各プロセスが並び替えられて表示されます。
%MEM 実メモリの占有使用率(%)を表示
TIME プロセスの実行時間(秒)
COMMAND プロセスが今現在実行中のコマンド名。スワップアウト中のプロセスのコマンド名は()で表示されます。
プロセスに関しては専用の#psコマンドがあります。
■psコマンド
# ps aux
(オプションのaは制御端末のあるプロセスを表示、uはユーザ名と開始時刻表示xは制御端末の無いプロセス(=カーネルなど)も表示)
topコマンドにない部分を補足(重複するのもは上記の表参照)
TTY 制御端末名
START プロセスの開始時刻(日時)
TIME プロセスの実行時間
COMMAND 実行コマンド名とパス(シェル表記の場合もあり)
上記以外に、プロセス、メモリ、スワップ、入出力、システム、CPUの各情報の統計を表示する#vmstatコマンドもあります。システム起動時からコマンド実行時までの平均値を表示しますので、TOPコマンドの現在値表示とは反対にサーバの平均的な状態を観察するのに便利なコマンドです。
■vmstatコマンド
# vmstat
ここのswap項目のsi(スワップIN)=HDDからスワップしたメモリー量(KB/秒)、so=HDDへスワップアウトしたメモリ量ですので、このSOが常に1以上であれば大抵の場合は慢性的メモリ不足が疑われます。
■df (=disk free)コマンド
# df -m (-mオプションはメガバイト単位で表示します)
/varは各種ログの肥大化、/homeはユーザー増加でディレクトリが、その割当て領域の限界に近づいてきた場合など、HDDの増設などを考える必要があります。また、ディスククオータでユーザーディレクトリの使用制限を加えていない場合は、ユーザーによって/homeディレクトリを使いきってしまう恐れもありますので、以下のコマンドと合わせて常時監視する必要があります。学校などの教育機関では、サーバの本格運用前にディスククオータで各ディレクトリにディスク利用制限を加えておくべきです。
■du (=disk use)コマンド
# du -sm /home/admin(-smオプションはsが総合計、mはMB=メガバイトのこと)
# du -a /home/admin(-aオプションは各ファイルの容量も表示します)
■netstat (オプション() コマンド
# netstat -an
(-aはALL=全て表示、nはDNS変換せずにIPアドレスとサービス名の代わりにそのポート番号で表示されます。ドメインで変換表示させると時間の掛かる場合はこのnオプションを使います)
上の例はネットワークで使用中のポートの状態を表示しています。
TCPプロトコルを使って61.115.3.34のWEBサーバ(ポート80)にIPアドレス***.***.**.**のポート50107・50159・50153が接続していましたが切断信号の再送信待ち状態です。また、同じくTCPプロトコルで61.115.3.36のポート番号1046・1072が22番ポート(SSH)に接続中です。と、いった情報が手に取るように解ります。-cオプションを追加すればリアルタイムで各ソケットの接続状況が観察できます。
各項目の説明
Proto トランスポート層のプロトコルの種類(tcp udp raw)
Recv-Q このソケットに接続していたユーザーに渡されなかったデータのバイト数(受信キューバッファの残バイト数)
Send-Q このソケットに接続していたユーザーに受けとられられなかったデータのバイト数(送信キューバッファの残バイト数)
Local Address ローカルIPアドレス・ホスト名と提供サービス名・ポート番号
Foreign Address リモートIPアドレス・ホスト名と提供サービス名・ポート番号(接続しているユーザー側のこと)
State(接続状態) (代表例)
LISTEN=ポートを開いて接続待ちの状態
ESTABLISHED=接続中
TIME_WAIT=切断信号の再送信待ち
注:ソケット=ホストのIPアドレスとポート番号の組合せのこと
現在のネットワークの通信状況を表示してくれるコマンド(ツール)。
■tcpdumコマンド
# tcpdump dst hostpc-unix.goco.ne.jp and src port 80 and tcp
先のnetstatはポート情報が中心でしたが、このtcpdumpはパケット情報が主です。両方を使うことによって、より詳しいネットワーク情報を把握することができます。
使用例(終了は[Ctrl]+[C])
ホスト名pc-unx.goco.ne.jpのポート80(WEBサーバ)のTCPプロトコルの送受信情報を収集しなさい。
(>が内向き<が外向きのパケットを示しています。)
《セキュリティーに関する補足情報》
よく、インターネット上で「パスワードが盗まれた」、「電子メールを盗み読まれた!」などと耳にしたり、このような事があるので十分注意しましょうなどと言われた経験をお持ちだと思います。しかし現実には自分のメールなど、盗み読まれることなどはありえない!だいたい、どうやってこの広大無限のインターネット上から自分のメールを特定して盗み見れるのか?おいおい、冗談だろ!などと、思ってませんか。
このtcpdumpはオプションを付加することにより、自ネットワーク内はおろかインターネット上のパケット情報を収集し保存することが簡単に出来ます。つまり、貴方の電子メールの内容はもちろん、暗号化されていないパスワードなどの情報も収集対象です。例えば、dst host ****部分をdst host 210.***.***.0/24などとすれば指定ネットワーク内の全パケット情報を収集します。これらを専門とするネットワーク上の犯罪者は、既に貴方のネットワークに目を付けてTCPダンプツールを実行しているかもしれません。ビジネスの場では取引先の担当者がこっそりと貴方の会社のネットワーク内を盗み見しているかもしれません。(セキュリティーの基本中の基本、インターネットと社内のイントラネットネットワークを切り離しておくことの必要性・重要性も考えさせられますね。)テルネット(telnet)の使用や平文でのパスワード送信、重要な案件の未暗号化電子メールでのやり取りは厳禁です。
(ご注意:tcpdump使用には十分ご注意下さい、絶対に貴方のネットワーク以外を対象としてはいけません。)
■whoisコマンド
# whois ホスト名(.comや.net、.orgなど)
# whois -h whois.nic.ad.jp xxx.co.jp
簡単にホスト情報を調べる
電子メールのhoge@xxx.co.jpからIPアドレスを調べるには
DNSのホスト名が例:ns.xxx.co.jpと解るので
p. [ネームサーバ] ns.xxx.co.jp
p. [ネームサーバ] ns2.xxx.co.jp
#whois -h whois.nic.ad.jp ns,xxx.co.jp
Host Information: [ホスト情報]
a. [ホスト名] ns.xxx.co.jp
b. [IPアドレス] 211.***.**.***
IPアドレスが特定されました、早速TCPDUMPツールを使って・・・してはいけません。
今度は、貴方の管理しているサーバに接続しているユーザーに関する情報を収集してみましょう。(不正侵入やその形跡などが解る場合もあります、ひょっとして、今まさに貴方のサーバにクラッカーが侵入し大切なファイルを盗み出し、貴方の会社のWEBページを書き換えている最中かもしれません)
■whoコマンド
# who
今、誰が貴方のサーバにログインしているかを調べる
adminはローカルエリアの端末1番から、その他はインターネット上のIPアドレス***.***.3.36からログインしています。tty=テレタイプ(teletype)の略
■wコマンド
# w
更に詳しく、何をしているのかも調べる
USERは、ログインいている人の名前、FROMはIPアドレスまたはホスト名、JCPUはそのユーザーがCPUを使用した全時間、PCPUは隣のWHATで表示されるプログラムなどが使ったCPU時間。
■lastコマンド
# last
最近ログインした人の一覧を表示させる
過去に不信な人物が出入りしていないかどうか調べるのに使います。Lastコマンドは、/var/log/wtmpファイルを読み出すものです。このログファイルは1ヶ月ごとに新しく更新され、過去1ヶ月分は保存してあります。先月のログファイルを読む場合には、
#last -f /var/log/wtmp.1 | less
長いファイルなので、| less コマンドを追加してカーソルキーの↑↓で上下しながら読みます。終了は[Q]キーを押します。|(パイプ)にmoreコマンドでもよいでしょう。#last -f /var/log/wtmp.1 |more。定期的にこのコマンドを使ってログインユーザーをチェックしましょう。
重要なログについては定期的にチェックするようにしましょう。
主だったログファイルは/var/logディレクトリ内にあります。
これらのログファイルは前述のlessやmoreで開いて読むことが出来ます。
■lessコマンド
# less /var/log/maillog(mailのログ)
[root@dns log]# less /var/log/maillog
Mar 4 21:09:43 dns sendmail[15826]: h24C9gP1015826: from=<****-***@nifty.com>, size=1216, class=0, nrcpts=1, msgid=<200303041209.h24C9WxM026589@mail504.nifty.com>, proto=ESMTP, daemon=MTA, relay=*****.nifty.com [***.**.2.12]
Mar 4 21:09:43 dns sendmail[15827]: h24C9gP1015826: to=<****@goco.ne.jp>, delay=00:00:00, xdelay=00:00:00, mailer=local, pri=31412, dsn=2.0.0, stat=Sent
from=<****-***@nifty.com>は送信者のメールアドレス、relay=mail504.nifty.com [***.**.37.2.12]は送信ホスト名
to=<****@goco.ne.jp> は受信者のメールアドレス、stat=Sentで正常にメールを受信しローカル内のメールボックスに転送をしたことを表しています。
中継拒否の例
Mar 5 01:34:08 dns sendmail[16589]: h24GY5P1016589: ruleset=check_rcpt, arg1=<a.mamoosh@talk21.com>, relay=pool-15
1-198-169-131.nwrk.east.verizon.net [151.198.169.131], reject=550 5.7.1 <a.mamoosh@talk21.com>... Relaying denied
メールサーバが踏み台にされていないか、定期的にこれらのログもチェックしましょう。
# less /var/log/squid/access.log(プロキシサーバのログ)
[root@dns1 squid]# less access.log
1046553335.393 674 192.168.1.254 TCP_MISS/200 391 GET http://toolbar.google.com/version? - DIRECT/216.239.35.124 text/plain
・
・
・
このログは説明の必要もありませんね、見てのとおりで誰がどこのWEBサイトを覗いていたかが記録されています。冒頭の1046553335.393の数字は1970/01/01からの経過時間。ここではユーザーはローカル限定ですから赤字のクライアントにはさほど気を配る必要はありませんが、アクセス先のサイトには要注意です、学校などではアダルトサイトや反社会的サイトなどにアクセスしていないか監視する必要があります。
#less /var/log/httpd/access_log(Apacheのログ)
66.196.65.21 - - [19/Jan/2003:04:22:05 +0900] "GET /robots.txt HTTP/1.0" 200 27 "-" "Mozilla/5.0 (Slurp/si; slurp@inktomi.com; http://www.inktomi.com/slurp.html)"
63.148.99.247 - - [19/Jan/2003:08:48:22 +0900] "GET / HTTP/1.0" 200 10031 "-" "Mozilla/4.0 (compatible; MSIE 5.01;Windows NT 5.0)"
63.148.99.247 - - [19/Jan/2003:08:48:26 +0900] "GET /pc-unix_seminar/index.html HTTP/1.0" 200 21899 "-" "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)"
このログもご覧のとおりで、クライアントのIPアドレス、アクセスした時の日時、どのURLから参照されたか、使用ブラウザなどが記録されています。しかし、このままでは数字とアルファベットの羅列で味気ないのでこれらのデータをグラフィカルに見せてくれるAWSTATSを設定してみましょう。
■受信・送信メールログ
# ls -la /var/spool/mqueue
送信メールログ
# ls -la /var/spool/mail
受信メールログ
|