linux log查看(轉載)

其實,可以說成是監控系統的記錄,系統一舉一動基本會記錄下來。這樣由於信息非常全面很重要,通常只有 root 可以進行視察!通過登錄文件(日誌文件)可以根據屏幕上面的錯誤訊息與再配合登錄文件的錯誤信息,幾乎就可以解決大部分的 Linux 問題! 所以日誌文件異常重要,作爲一個合格的linux 系統工程師,日誌文件是必要熟練掌握的部分。

centos 配置在/etc/cron.daily/logrotate 

常見的幾個登錄文件有:

/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 這個例行性服務的內容的。

/var/log/httpd, /var/log/news, /var/log/mysqld.log, /var/log/samba, /var/log/procmail.log:分別是幾個不同的網絡服務的記錄文件!

登錄文件的紀錄程序之一: 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 裏頭的文件!

打印機或其它:例如 /dev/lp0 這個打印機裝置  (即使被***可以刪除掉日誌文件,但是最終刪除不了打印出來的日誌信息)

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

遠程主機:例如 @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!

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

*.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  》》注意權限

一臺主機管理多臺主機登錄文件

# 1. 先取得 port number 的信息!

[root@linux ~]# grep 514 /etc/services

syslog          514/udp   》》syslog的固定端口

# 注意,/etc/services 裏面必須要存在這一行才行,否則自行手寫!

# 2. 修改 syslogd 的啓動配置文件

[root@linux ~]# vi /etc/sysconfig/syslog

#SYSLOGD_OPTIONS="-m 0"  改成底下這樣子

SYSLOGD_OPTIONS="-m 0 -r"

# 3. 重新啓動與觀察 syslogd !

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

[root@linux ~]# netstat -tlunp

Proto Recv-Q Send-Q Local Address Foreign Address State  PID/Program name

udp   0      0      0.0.0.0:514   0.0.0.0:*              24314/syslogd

  Linux 主機已經可以接收來自其它主機的登錄信息了!client 端的設定就簡單了!只要指定某個信息傳送到這部主機即可!比如,登錄文件主機 IP 爲 192.168.1.100 ,而 client 端希望所有的數據都送給主機,可以在 /etc/syslog.conf 裏面新增這樣的一行:

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

*.*       @192.168.1.100

  未來主機上面的登錄文件當中,每一行的主機名稱就會顯示來自不同主機的信息了。

登錄文件服務程序之二,輪滾 (logrotate):

  所謂的 logrotate ,就是將舊的 log 文件更名,然後建立一個空的 log 文件,如此一來,新的 log 文件將從零開始記錄,然後只要將舊的 log 文件留下一段時間! 舊的紀錄 保存了一段時間沒有問題,那麼就可以讓系統自動的將他刪掉,否則佔用硬盤空間。如圖比如規定了message 日誌文件輪滾3次:

最初的日誌文件   message

輪滾一次後       message  message1

輪滾二次後       message  message1 message2

輪滾三次後       message  message1 message2 message3  》》刪除(如果再次輪滾,message3就會被刪除,而message2就會變成message3,且系統會新建立一個message)

注意,相同顏色的mssage表示的是一個內容的文件,只不過每次輪滾他的名字後面會改一次數字。

logrotate 的配置文件

/etc/logrotate.conf

/etc/logrotate.d/

注意! logrotate.conf 纔是主要的參數文件,logrotate.d 是一個目錄, 該目錄裏面的所有文件都會被主動的讀入/etc/logrotate.conf 當中來進行!另外,在 /etc/logrotate.d/ 裏面的文件中,如果沒有規定到的一些細部設定,則以/etc/logrotate.conf 的規定來指定爲默認值!

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

# 底下是 "logrotate 的預設值,如果個別的文件設定了其它的參數,那麼將以個別的文件設定爲主,若該文件沒有設定到的參數,則以這個檔案的內容爲默認值!

Weekly   》》預設每個禮拜對登錄文件進行一次 rotate 的工作

rotate 4   》》保留四個登錄文件!

create   》》是否建立新的登錄文件來記錄!

#compress  》》 rotate 之後的登錄文件,是否壓縮,通常是不要壓縮啦,壓縮登錄文件擴展名會變成 messages.1.gz !系統負載不大,且日誌比較大,可以考慮壓縮。

include /etc/logrotate.d  》》將底下這個目錄中的所有文件都讀進來執行 rotate 的工作!

/var/log/wtmp {

    monthly

    create 0664 root utmp

    rotate 1

}

。。。省略。。。

# 在 logrotate.conf 文件當中,只有這個數據是在記載如何對登錄文件進行輪替的!這個登錄文件記載的就是使用 login 登入系統時的使用者狀態,last就是讀自 /var/log/wtmp 當中記錄的數據!整個段落的意義是:

# 1. 每個月進行一次 log rotate 的工作;

# 2. 將文件的權限設定爲 664 ,且擁有者爲 root ,羣組爲 utmp;

# 3. 僅保存前一個月的 rotate 備份!可以修改大一點

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

/var/log/messages  /var/log/secure  /var/log/maillog  /var/log/spooler

/var/log/boot.log  /var/log/cron {

    sharedscripts

    postrotate

        /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true

    endscript

}

  設定的項目與前面提到的相同,並且可加入輪替前 (pre) 與後 (post) 的一些特殊執行的指令! 這個設定需與 sharedscripts .... endscript 設定合用才行;

prerotate:啓動 logrotate 之前進行的指令,例如修改登錄文件的屬性等動作;

postrotate:做完logrotate 之後啓動的指令,例如重新啓動 (kill -1 或 kill -HUP) 某個服務!

  這一段設定值說明的是:『 /var/log 目錄內的 messages, secure, mailog, spooler, boot.log 及 cron 這六個文件,每個禮拜進行一次輪替,且保留四個登錄檔,此外, 在輪替進行完畢之後,執行 syslog 的重新啓動』因爲沒有提到該設定項目,所以就用 /etc/logrotate.conf 內的默認值來作用

解決 charrt+a與lorotate矛盾的方法:

  矛盾處:a屬性會讓文件只能添加數據,不能修改文件名,不能刪除(防止日誌文件被***,被惡意刪除),而 lorotate需要修改文件的文件名。

  解決辦法就是利用 prerotate 與 postrotate 來進行登錄文件輪替前、後所需要作的動作!可以這樣修改一下這個文件!

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

/var/log/messages /var/log/secure /var/log/maillog /var/log/spooler

/var/log/boot.log /var/log/cron {

    sharedscripts

    prerotate

        /usr/bin/chattr -a /var/log/messages

    endscript

    sharedscripts

    postrotate

        /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true

        /usr/bin/chattr +a /var/log/messages

    endscript

}

特別留意,/bin/kill -HUP ...這一行的目的在於將系統的 syslogd重新以其參數( syslog.conf )的資料讀入一次!也可以想成是 reload 的意思! 由於建立了一個新的空的紀錄文件,如果不執行此一行來重新啓動服務, 那麼記錄的時候將會發生錯誤! 另外注意顏色字體部分格式,需要配套書寫。

實際測試 logrotate 的動作

[root@linux ~]# logrotate [-vf] logfile

參數:

-v  :啓動顯示模式,會顯示 logrotate 運作的過程喔!

-f  :不論是否符合設定文件的數據,強制每個登錄文件都進行 rotate 的動作!

例:強制進行 logrotate 的動作

[root@linux ~]# logrotate -vf /etc/logrotate.conf

# 此命令屬於企業危險命令,因爲舊的日誌對企業安全有很大作用,如果強行輪滾,造成提前刪除舊日誌文件,可能會有麻煩,所以不要亂用!預設的 logrotate 的執行時間就是放在 /etc/cron.daily/logrotate 裏面的!由於logrotate 的工作已經加入crontab 裏了!所以現在每天系統都會自動的查看 logrotate !

案例:建立了 /var/log/admin.log,想要加上 +a屬性,要求:

登錄文件輪替一個月進行一次;

該登錄文件若大於 10MB 時,則主動進行輪替,不需要考慮一個月的期限;

保存五個備份文件;

備份文件不要壓縮

[root@linux ~]# chattr +a /var/log/admin.log

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

-----a------- /var/log/admin.log

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

mv: cannot move '/var/log/admin.log' to '/var/log/admin.log.1':permission deny

[root@linux ~]# vi /etc/logrotate.d/admin

# This configuration is from lonogo 2009/6/26

/var/log/admin.log {

        monthly

        size=10M

        rotate 5

        nocompress

        sharedscripts

        prerotate

                /usr/bin/chattr -a /var/log/admin.log

        endscript

        sharedscripts

        postrotate

                /usr/bin/killall -HUP syslogd

                /usr/bin/chattr +a /var/log/admin.log

        endscript

}

[root@linux ~]# logrotate -v /etc/logrotate.conf

。。省略。。

[root@linux ~]# logrotate -vf /etc/logrotate.d/admin    》》強行滾一下

....省略....

[root@linux ~]# lsattr /var/log/admin.log*   》》看看滾後的文件的權限變化了

-----a------- /var/log/admin.log

------------- /var/log/admin.log.1

注意, /etc/syslog.conf 與 /etc/logrotate.d/* 通常是配合使用,目錄下的.d目錄下的文件未提及的設置,會參考助.conf配置文件的設置。

分析登錄文件

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)

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

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中的日誌樣本.

# ls /var/log

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.

# .

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章