什麼是登錄檔
干嘛要分析登錄檔
這部分是最容易被新手所忽略的
那就是詳細而確實的紀錄或者是備份系統的登錄檔
什麼是登錄檔呢?簡單的說
就是記錄系統活動記錄的幾個檔案
例如
何時
何地(來源 IP )
何人( login name )
做了什麼動作
另外就是系統在什麼時候做了什麼樣的行為時
發生了什麼樣的事件等等
要知道的是
我們的 Linux 主機在背景之下
有相當多的 daemons 在工作著
那麼這些工作中的程序總是會有一些訊息顯示
這些顯示的訊息就是給記錄在登錄檔當中啦
也就是說
記錄這些系統的重要訊息
就是登錄檔所進行的紀錄工作的內容了
而由於這些記錄的工作內容對於系統的資訊太詳細了
若被取得將可能影響到系統的安全性
因此
通常這些登錄檔只有 root 可以進行視察的功能!
那麼為何要記錄與解析登錄檔呢?這是由於記錄檔有幾個重要的功能
· 解決系統的錯誤
這個對於系統管理員來說是很重要的資訊
例如
開機的過程當中偵測到的硬體訊息資料會記錄到記憶體當中
由於這些偵測的資訊可以提供我們了解硬體資訊
所以如果你的系統發生問題時
可以下達 dmesg 看看硬體的偵測有沒有發生錯誤呢!另外
如果系統資源被耗盡
核心活動發生錯誤等等事件發生的時候
則系統登錄檔亦會將錯誤的訊息記錄在登錄檔中(通常是 /var/log/messages )
這些都可以藉以取得錯誤發生時的資訊
並加以克服問題!!
· 解決網路服務的問題
在安裝或設定新服務的套件時
最常使用到這個功能了!例如在安裝啟動 sendmail 時
如果 sendmail 無法提供服務的時候
那麼無法提供服務的問題則會被紀錄到登錄檔當中去
則只要分析登錄檔就可以了解問題點
並藉以解決問題啦!( 所以我們常說『天助自助者』是真的啦!察看(
)螢幕上面的錯誤訊息與(
)登錄檔的錯誤資訊
幾乎可以解決大部分的 Linux 問題! )
· 記錄登錄資訊
這個東西相當的重要!例如
有天您的 apache 這個 WWW 服務掛了
你怎麼知道何時掛掉的?而最後登入者是誰?!這都可以藉由分析 apache 的登錄檔來取得資訊
此外
萬一有一天您的系統被入侵
並且被利用來攻擊他人的主機
這個時候對方的主機查出是您的 Linux 在進行攻擊的行為
這個時候你要如何告知對方您的主機是由於被入侵所導致的問題
並且協助對方繼續往來源追查呢?!呵呵!此時登錄檔可是相當重要的呢!
因此
一個有經驗的主機管理員
會隨時隨地查閱一下自己的登錄檔
以隨時掌握系統的最新脈動!那麼見的幾個登錄檔有哪些呢?一般而言
有下面幾個
· /var/log/secure
記錄登入系統存取資料的檔案
例如 pop
ssh
telnet
ftp 等都會記錄在此檔案中
· /var/log/wtmp
記錄登入者的訊息資料
由於本檔案已經被編碼過
所以必須使用 last 這個指令來取出檔案的內容
· /var/log/messages
這個檔案相當的重要
幾乎系統發生的錯誤訊息(或者是重要的資訊)都會記錄在這個檔案中
· /var/log/boot
log
記錄開機或者是一些服務啟動的時候
所顯示的啟動或關閉訊息
· /var/log/maillog 或 /var/log/mail/*
紀錄郵件存取或往來( sendmail 與 pop
)的使用者記錄
· /var/log/cron
這個是用來記錄 crontab 這個例行性服務的內容的!
· /var/log/httpd
/var/log/news
/var/log/mysqld
log
/var/log/samba
/var/log/procmail
log
分別是幾個不同的網路服務的記錄檔啦!
好了
那麼記錄了這些登錄檔之後
我要做什麼分析呀!?基本上
一個好的系統管理員大概都知道『一部主機負責的服務最好能少盡量少』
這是什麼意思呢?也就是說
這部主機為郵件主機那麼就專門負責郵件工作
不要還搞 WWW 服務!這樣有幾個好處
除了系統的安全性較佳之外(因為開的 port 變少了!)
記錄檔的解析也會比較簡單!因為我們的 /var/log/secure 記錄的登入者資訊就會比較有一致性!那麼我們就可以查詢一下每日登入的使用者帳號啦與錯誤訊息啦等等的!(當然啰
如果你的頻寬夠
經驗豐富的話
那麼一部主機上面安裝所有的網路服務也是可以的啦!)基本上
檢查/var/log/messages
/var/log/secure這些個檔案也就相當夠了!因為系統發生的錯誤或者是警告訊息通常都會寫入這個檔案中
但是
如果我手邊有數十部主機怎麼辦?我要不要一部一部去察看 log file 呢?呵呵!那樣察看會死人ㄋㄟ?因此
我們底下也使用一個簡易的登錄檔來分析 Red Hat 或 Mandrake 這兩種 Linux distribution 的登錄檔吧!
Linux 登錄檔的規劃
syslogd
logrotate
在系統的登錄檔系統當中
大多以一支常駐程式來進行寫入這些訊息的這個工作
那就是 syslogd 這支程式啦!另外
由於登錄檔如果一直長大的話
那麼這些登錄檔的寫入動作將會很沒有效率
這是因為檔案太大時
ASCII 格式碼的資料檔案寫入比較麻煩的緣故!那麼怎麼進行登錄檔資料的備份工作呢?呵呵!那就使用 logrotate 吧!將資料進行輪轉( rotate )?什麼是輪轉?!(我ㄌㄟ台語不輪轉呦!?)其實也可以稱為輪替啦!基本上
就是將舊的 log 檔案更改名稱
然後建立一個空的 log 檔案
如此一來
新的 log 檔案將從零開始記錄
然後只要將舊的 log 檔案留下一陣子
嗯!那就可以達到將登錄檔『輪轉』的目的啦!此外
如果舊的紀錄(大概要保存幾個月吧!)保存了一段時間沒有問題
那麼就可以讓系統自動的將他砍掉
免得占掉很多寶貴的硬碟空間說!(舉個例子來說
我的 WWW 網站一個月的登錄檔
所占掉的硬碟空間大小
大概就有
GB 這麼多
而且都是純文字檔
很可怕吧!)
所以說
基本上
針對 log 檔案來設計的服務有這兩支
o syslogd
進行系統或者是網路服務的登錄檔記錄工作
o logrotate
將舊的資料更名
並且建立新的登錄檔
以保持登錄檔的『新鮮』
並視設定將最舊的登錄檔刪除
所以
接著下來我們來談一談怎麼樣規劃這兩支程式呢?!就由 syslogd 這支程式先談起吧!畢竟得先有登錄檔
才可以進行 logrotate 呀!您說是吧!?
o syslogd
我們在Linux裡面預設就已經使用了syslogd這支程式來記錄系統的登入資料
不相信的話
你可以使用ps來查詢一下
[root @test root]# ps
aux|grep syslog root
? S Oct
:
syslogd
m
root
pts/
S
:
:
grep syslog
o
看到syslog這個服務名稱了吧?!呵呵!所以知道他已經在背景底下工作啰!syslog 這支程式可以提供『系統登入資訊記錄』及『Kernel錯誤或警示資訊記錄』等功能
此外
他還提供了『本地端與遠端電腦的登錄資訊記錄』功能
所以
可以將遠端的主機登入資訊同時記錄在本地端呢!很不錯的功能吧!!此外
目前正規使用的系統服務中
大都預設支援以 syslog 這一個服務來記錄他的登錄檔案資料
例如apache
samba
sendmail 等等
而通常syslog提供的記錄參數主要有
§ 事件發生時間
§ 主機名稱
§ 啟動此事件的服務名稱(例如 httpd
samba
)
§ 訊息資料內容
等等這些資訊
當然
這些資訊的詳細度是可以修改的
此外
這些資訊可以作為系統除錯之用呢!我們先來看一下/var/log/secure的內容顯示些什麼呢?
[root @test root]# vi /var/log/secure Nov
:
:
test xinetd[
]: START: telnet pid=
from=
Nov
:
:
test xinetd[
]: FAIL: telnet address from=
Nov
:
:
test sshd[
]: Accepted password for test from
port
ssh
Nov
:
:
test sshd(pam_unix)[
]: session opened for user test by (uid=
) Nov
:
:
test su(pam_unix)[
]: authentication failure; logname=test uid=
euid=
tty= ruser=test rhost= user=root Nov
:
:
test su(pam_unix)[
]: session opened for user root by test(uid=
)
在上面的表格中
可以看到每筆記錄的主要內容是
<日期與時間><主機名稱><服務名稱><顯示訊息>
以第一筆資料來看
<日期是 Nov 4 的 16:28:35 時候>
在<主機 test 當中>
<那個 xinetd 服務的內容有資料啦>
<該程序的 PID 為 7831,顯示的訊息,說的是telnet這個由xinetd啟動的服務有人登入,登入者的IP是192.168.1.11>
這樣夠詳細了吧!還有很多的資訊值得看的呢!尤其是/var/log/messages的內容
然後
不要忘記了
在最後一筆資料中
還記錄了可以使用su的使用者的uid為
帳號名稱為test
那麼如果這個資料被人家奪走了
呵呵!未來外面的cracker將可能試圖以test這個帳號來猜測你的密碼
並加以破解
嗯!真的很重要吧!所以這些資料很多都不能外流呢!
好了
再來看到我們要如何來設定 syslogd 呢?!剛剛說到 syslog 可以記錄我們系統中的幾乎所有的預設的系統工作
那麼萬一我的網路服務是自行設定的呢?!例如以 Tarball 安裝好的服務套件
OK!我們可以藉由修改 syslog 的參數檔來達到這個目的
那麼預設的 syslog 參數檔放在哪裡呢?!
§ /etc/nf
其實預設的 syslogd 程式的參數檔案就是 /etc/nf 這個檔案內容啦!這個檔案的內容可以規定『什麼服務需要被記錄
該服務被紀錄的訊息等級如何?』
基本上
可以使用底下的句子語法來說明
服務名稱
訊息等級 存放或顯示地點
§ 服務名稱
例如 mail
http
news
cron
at 等等的服務名稱
§ 訊息等級
總共分成下列幾種等級
§ info
提示一些訊息資料
§ notice
注意!需要比較留意的訊息
§ waring
From:http://tw.wingwit.com/Article/program/Oracle/201311/18801.html