天天看點

linux log日志解析

linux log日志解析

常見的幾個登入檔案有:

/var/log/secure:記錄登入系統存取資料的檔案,例如 pop3, ssh, telnet, ftp 等都會被記錄;

/var/log/wtmp:記錄登入者的訊息資料,由于本檔案已經被編碼過,是以必須使用 last指令來取出檔案的内容;

/var/log/messages:尤為重要,幾乎發生的錯誤訊息(或是重要資訊)都會被記錄在此;

/var/log/boot.log:記錄開機或者是一些服務啟動的時候,所顯示的啟動或關閉訊息;

/var/log/maillog 或 /var/log/mail/*:紀錄郵件存取或往來( sendmail 與 pop3 )的使用者記錄;

/var/log/cron:記錄 crontab 這個例行性服務的内容的。

登入檔案的紀錄程式之一: syslogd

通常經過 syslog 而記錄下來的資料主要有:

事件發生的日期與時間;

發生此事件的主機名稱;

啟動此事件的服務名稱 (如 samba, xinetd 等) 或函式名稱 (如 libpam ..);

該訊息資料内容

syslogd的daemon配置檔案:/etc/syslog.conf

内容文法是這樣的:

服務名稱[.=!]訊息等級          訊息記錄的檔案名或裝置或主機

# 例如底下:

mail.info                      /var/log/maillog_info

服務名稱:該服務産生的訊息會被紀錄的意思。syslog 認識的服務主要有底下這些:

auth, authpriv:主要與認證有關的機制,例如telnet, login, ssh 等需要認證的服務都是使用此一機制;

cron:例行性指令 cron/at 等産生訊息記錄的地方;

daemon:與各個 daemon 有關的訊息;

kern:核心 (kernel) 産生訊息的地方;

lpr:列印相關的訊息!

mail:隻要與郵件收發有關的訊息紀錄都屬于這個;

news:與新聞群組伺服器有關的東西;

syslog:syslogd 這支程式本身産生的資訊啊!

user, uucp, local0 ~ local7:與 Unix like 機器本身有關的一些訊息。

訊息等級

系統将訊息分為七個主要的等級,依序是由不重要排列到重要訊息等級:

info:僅是一些基本的訊息說明而已;

notice:比 info 還需要被注意到的一些資訊内容;

warning 或 warn:警示訊息,可能有問題,但是還不至于影響到某個 daemon 運作。

err 或 error :一些重大的錯誤訊息,這就要去找原因了。

crit:比 error 還要嚴重的錯誤資訊,crit 是臨界點 (critical) 的縮寫,已經很嚴重了!

alert:警告警告,已經很有問題的等級,比 crit 還要嚴重!

emerg 或 panic:疼痛等級,意指系統已經幾乎要當機的狀态! 很嚴重的錯誤資訊了。

  除了這些有等級的訊息外,還有兩個特殊的等級,那就是 debug(錯誤偵測等級) 與 none (不需登入等級) 兩個,當要作一些錯誤偵測,或者是忽略掉某些服務的資訊時,就用這倆!

在訊息等級之前還有 [.=!] 的連結符号!他代表的意思是:

. :代表比後面還要高的等級(含該等級)都被記錄下來的意思, 例如:mail.info 代表隻要是 mail 的資訊,而且該資訊等級高于 info (含info )時,就會被記錄下來。

.=:代表所需要的等級就是後面接的等級而已!

.!:代表不等于。

日志檔案記錄的檔案名或裝置或主機常見的放置處:

檔案的絕對路徑:通常就是放在 /var/log 裡頭的檔案!

使用者名稱:顯示給使用者!

遠端主機:例如 @test.adsldns.org,要對方主機也能支援才行!

*:代表目前線上的所有人,類似 wall 這個指令的意義!

看看在尚未開啟網絡服務的情況下來自 Fedora Core Release 4 的相關資料

[root@linux ~]# vi /etc/syslog.conf

#kern.*                                    /dev/console

# 隻要是 kernel 産生的訊息,全部都送到 console 去!預設是關閉的。

*.info;mail.none;authpriv.none;cron.none   /var/log/messages

# 在已知各服務的訊息中,不要記錄到這個檔案中,把已知的服務記錄到單獨的日志檔案中去,友善日後查詢,否則messages這個檔案就太混亂了。這個檔案非常重要,所有未知的資訊都會被記錄在這個檔案中,是以有問題,找這個檔案就八九不離十了。

authpriv.*                                 /var/log/secure

# 這個就是經過一些身份确認的行為之後,需要記錄身份的檔案。

mail.*                                     -/var/log/maillog

# 隻要跟 mail 有關的(不論是 pop3 還是 sendmail )都會被紀錄到這個檔案!

cron.*                                     /var/log/cron

#例行性指令相關的。

*.emerg                                    *

# 任何時候發生的警告訊息都會顯示給線上的所有人!那個 * 就是目前線上的所有人。

uucp,news.crit                             /var/log/spooler

# 記錄新聞錯誤高于 crit 的等級的資訊,寫入 spooler 當中!

local7.*                                   /var/log/boot.log

# 将開機的當中的訊息寫入 /var/log/boot.log 中!

  每個版本的 syslog.conf 差異是很大的,是以,每個登入檔案記錄的資料其實不很固定。

例:讓所有的資訊都額外寫入到 /var/log/admin.log!

*.info          /var/log/admin.log  》》如果伺服器硬碟容量夠大,這麼做也不失為一個良策。

[root@linux ~]# /etc/init.d/syslog restart

[root@linux ~]# ll /var/log/admin.log

-rw-------  1 root root 122 Oct 23 22:21 /var/log/admin.log  》》注意權限

分析登入檔案 

dmesg

[root@linux ~]# dmesg | more

  由于系統在開機的過程當中尚未将硬碟 mount 上來,是以無法直接将資料直接讀到 log file 當中去,但是為了除錯上面的友善, 是以在開機的過程當中的訊息還是要記錄下來,這個時候系統就将 ram 開了一個小區塊來儲存這個資料!這個開機記錄檔案就是:/proc/kmsg!

  幾乎所有的核心資訊都可以使用 dmesg 來查閱得到的,例 想要知道開機有沒有捉到網卡,dmesg | grep 'eth' !

last

[root@linux ~]# last -n number

[root@linux ~]# last -f filename

參數:

-n  :last 會讀出這個月的資料,若資料量太大,可使用 -n 來嚴格要求顯示的筆數。例如 20 筆資料: last -n 20 或 last -20 均可。

-f  :last預設讀出 /var/log/wtmp,但是我們可以透過 -f 讀取不同的登入檔案資訊!

例,将上個月的資料讀出,僅讀出5筆資料

[root@linux ~]# last -n 5 -f /var/log/wtmp.1

dmtsai2  pts/2             Mon Oct 24 14:18 - 14:18  (00:00)

dmtsai2  work:0 work       Mon Oct 24 14:18    gone - no logout

dmtsai2  work:0 work       Mon Oct 24 14:18 - 14:18  (00:00)

[root@linux ~]# lastlog

lastlog 隻是讀出 /var/log/lastlog 内的資訊. 他會顯示目前系統上面的所有賬号當中,每個賬号最近一次登入的時間!

Linux系統的LOG日志檔案介紹!

UNIX網管員主要是靠系統的LOG,來獲得入侵的痕迹.當然也有第三方工具記錄入侵系統的 痕迹,UNIX系統存放LOG檔案,普通位置如下:

/usr/adm - 早期版本的UNIX

/var/adm - 新一點的版本使用這個位置

/var/log - 一些版本的Solaris,linux BSD,Free BSD使用這個位置

/etc - 多數UNIX版本把utmp放在這裡,有些也把wtmp放在這裡,syslog.conf在這裡

下面的一些檔案根據你所在的目錄不同而不同:

acct 或 pacct -- 記錄每個使用者使用的指令記錄

access_log -- 主要當伺服器運作NCSA HTTPD時, 記錄什麼站點連接配接過你的伺服器

aculog -- 儲存着你撥出去的MODEMS記錄

lastlog -- 記錄了使用者最近的LOGIN記錄和每個使用者的最初目的地,有時是最後不

成功LOGIN的記錄,當一個使用者登陸到unix系統,注冊程式在lastlog檔案中查找該使用者的uid,如果該程式找到了

該使用者的uid,unix就會顯示最後一次登陸的時間和tty(終端号)

loginlog -- 記錄一些不正常的LOGIN記錄

messages -- 記錄輸出到系統控制台的記錄,另外的資訊由syslog來生成

security -- 記錄一些使用UUCP系統企圖進入限制範圍的事例

sulog -- 記錄使用su指令的記錄.它通常在/var/adm/sulog.如果你在機器上使用了su指令,别忘了清除哦.

utmp -- 記錄目前登入到系統中的所有使用者,這個檔案伴随着使用者進入和離開系統而不斷變化.它還會為系統中的使用者保持很長的曆史記錄,utmp日志通常存放在/var/adm/utmp目錄下.可以用w和who指令檢視,其他指令也可以通路這個檔案.如:finger root就可以.現在的utmp一般都有utmpx檔案作為日志記錄的補充.

utmpx -- UTMP的擴充

wtmp -- 記錄使用者登入和退出事件.它和utmp日志檔案相似,但它随着登陸次數的增加,它會變的越來越大,有些系統的ftp通路也在這個檔案裡記錄,同時它也記錄正常的系統退出時間,可以用ac和last指令通路.

syslog -- 最重要的日志檔案,使用syslogd守護程式來獲得日志資訊,通常情況下通過檢視/etc/syslog.conf.我們可以知道syslog記錄些什麼.預設時,它把大多的消息傳給/var/adm/message.

/dev/log -- 一個UNIX域套接字,接受在本地機器上運作的程序所産生的消息

/dev/klog -- 一個從UNIX核心接受消息的裝置

514端口 -- 一個INTERNET套接字,接受其他機器通過UDP産生的syslog消息。

uucp -- 記錄的UUCP的資訊,可以被本地UUCP活動更新, 也可有遠端站點發起

的動作修改,資訊包括發出和接受的呼叫,發出的請求,發送者, 發

送時間和發送主機

lpd-errs -- 處理列印機故障資訊的日志

ftp日志 -- 執行帶-l選項的ftpd能夠獲得記錄功能

httpd日志 -- HTTPD伺服器在日志中記錄每一個WEB通路記錄

history日志 -- 這個檔案儲存了使用者最近輸入指令的記錄

vold.log -- 記錄使用外接媒介時遇到的錯誤記錄

======================

其他類型的日志檔案-

有些類型的LOG檔案沒有特定的标題,但開始于一個特定的标志, 你可以在前面頭發現如

下的标志,這就一般表示此是個LOG日志檔案,你就可以編輯它了:

xfer -- 表明試圖一個禁止的檔案傳輸.

rexe -- 表明試圖執行一個不允許的指令

還有許多其他其他類型的LOG檔案存在,主要是第三方軟體引起的, 或者甚至他媽的網管

自己有設定了一隻"眼睛"在他的系統上,是以你要對你認為可能是LOG檔案的檔案多一份心眼。

許多管理者喜歡把日志檔案放在同一個目錄中以便管理, 是以你要檢查你發現的LOG檔案所在

的目錄中,是否有其他日志檔案放在這裡,如果有,咯,你知道怎麼做。

另一個你要注意的是有關LOG使用者MAIL的檔案,此檔案名可以多種多樣,或則有時是

syslog檔案的一部分。你要知道syslog記錄那些資訊, 你可以檢視syslog.conf中的資訊此文

件的目錄是在/etc中

一般我們都是檢視syslog.conf檔案來檢視日志的配置情況.例如:cat /etc/syslog.conf

其中sunos作業系統的在/var/log和/var/adm下,還有/usr/adm為/var/adm的的連結.

redhat的在/var/log 和 /var/run下

下面的是sun os5.7中的日志樣本. 此外,各種shell還會記錄使用者使用的指令曆史,它使用使用者主目錄下的檔案來記錄這些指令曆史,通常這個檔案的名字為.sh_history(ksh),.history(csh),或.bash_history(bash)等。

# ls /var/adm

acct    log      messages.1    passwd    sulog   vold.log

aculog   messages   messages.2    sa      utmp   wtmp

lastlog   messages.0  messages.3    spellhist   utmpx   wtmpx

# ls /var/log

authlog      syslog    syslog.1   syslog.3

sysidconfig.log  syslog.0   syslog.2   syslog.4

下面的是redhat9.0中的日志樣本.

boot.log   dmesg       messages.2    secure     uucp

boot.log.1  htmlaccess.log  messages.3    secure.1    wtmp

boot.log.2  httpd       messages.4    secure.2    wtmp.1

boot.log.3  lastlog      netconf.log   secure.3    xferlog

boot.log.4  mailllog      netconf.log.1  secure.4    xferlog.1

cron     maillog      netconf.log.2  sendmail.st   xferlog.2

cron.1    maillog.1     netconf.log.3  spooler     xferlog.3

cron.2    maillog.2     netconf.log.4  spooler.1    xferlog.4

cron.3    maillog.3     news       spooler.2

cron.4    maillog.4     normal.log    spooler.3

daily.log   messages     realtime.log  spooler.4

daily.sh   messages.1     samba      transfer.log

# ls /var/run

atd.pid    gpm.pid    klogd.pid   random-seed    treemenu.cache

crond.pid   identd.pid   netreport   runlevel.dir   utmp

ftp.pids-all inetd.pid   news      syslogd.pid

一般我們要清除的日志有

lastlog

utmp(utmpx)

wtmp(wtmpx)

messages

syslog

sulog

一般把以上說的日志給擦一下,就可以了.

下面我來說說上面這些我們要清除的日志的相關資料和清除方法.更詳細的資料和其他的日志請你檢視相關資料.

上面已經對日志的功能做了簡單陳述,那麼這些日志檔案到底記錄的是什麼呢? follow me

下面是一個例子:

SunOS 5.7

login: gao

Password:

No directory! Logging in with home=/

Last login: Sun Feb 4 22:18:25 from 219.31.36.7

Sun Microsystems Inc. SunOS 5.7 Generic October 1998 $ 

然後注冊程式用新的登陸時間和TTY資訊更新lastlog檔案,而且該程式帶更新utmp wtmp.檔案.

shell記錄:

.sh_history(ksh),.history(csh),或.bash_history(bash)等,是shell執行時的曆史記錄.記錄使用者執行的指令.它一般存在于使用者的主目錄.别忘了去根目錄看看.

1.日志都是一些文本形式的檔案.最笨的方法是用文本編輯器來編輯日志檔案.删除相關的記錄.來達到擦拭腳印和隐藏自己的效果.

比如用vi等,但這樣做是很笨的.太麻煩,工作量太大.

2.用rm -f 來删掉日志.比如rm -f /usr/adm/lastlog

這樣做是很蠢的.更容易被管理者發現有人入侵.但是,相對來說自己還是保護好了. 可以用在一些不太重要的機器上.

3.用>定向符清除.

比如:

cat > /usr/log/lastlog

->這裡輸入你要的寫的東西.最好僞裝得像一些,也可以不輸入哦.

^d ->這裡的^d是按鍵 ctrl + d.

# .

繼續閱讀