天天看點

linux日志系統及指令簡介

Linux 中提供了異常日志,并且日志的細節是可配置的。Linux 日志都以明文形式存儲,是以使用者不需要特殊的工具就可以搜尋和閱讀它們。還可以編寫腳本,來掃描這些日志,并基于它們的内容去自動執行某些功能。Linux 日志存儲在 /var/log 目錄中。這裡有幾個由系統維護的日志檔案,但其他服務和程式也可能會把它們的日志放在這裡。大多數日志隻有root賬戶才可以讀,不過修改檔案的通路權限就可以讓其他人可讀。

  <b>RedHat Linux常用的日志檔案</b>

  RedHat Linux常見的日志檔案詳述如下

  /var/log/boot.log

  該檔案記錄了系統在引導過程中發生的事件,就是Linux系統開機自檢過程顯示的資訊。

  /var/log/cron

  該日志檔案記錄crontab守護程序crond所派生的子程序的動作,前面加上使用者、登入時間和PID,以及派生出的程序的動作。CMD的一個動作是cron派生出一個排程程序的常見情況。REPLACE(替換)動作記錄使用者對它的cron檔案的更新,該檔案列出了要周期性執行的任務排程。RELOAD動作在REPLACE動作後不久發生,這意味着cron注意到一個使用者的cron檔案被更新而cron需要把它重新裝入記憶體。該檔案可能會查到一些反常的情況。

  /var/log/maillog

  該日志檔案記錄了每一個發送到系統或從系統發出的電子郵件的活動。它可以用來檢視使用者使用哪個系統發送工具或把資料發送到哪個系統。下面是該日志檔案的片段:

  該日志檔案是許多程序日志檔案的彙總,從該檔案可以看出任何入侵企圖或成功的入侵。如以下幾行:

  該檔案的格式是每一行包含日期、主機名、程式名,後面是包含PID或核心辨別的方括号、一個冒号和一個空格,最後是消息。該檔案有一個不足,就是被記錄的入侵企圖和成功的入侵事件,被淹沒在大量的正常程序的記錄中。但該檔案可以由/etc/syslog檔案進行定制。由/etc/syslog.conf配置檔案決定系統如何寫入/var/messages。有關如何配置/etc/syslog.conf檔案決定系統日志記錄的行為,将在後面詳細叙述。

  /var/log/syslog

  預設RedHat Linux不生成該日志檔案,但可以配置/etc/syslog.conf讓系統生成該日志檔案。它和/etc/log/messages日志檔案不同,它隻記錄警告資訊,常常是系統出問題的資訊,是以更應該關注該檔案。要讓系統生成該日志檔案,在/etc/syslog.conf檔案中加上:*.warning /var/log/syslog   該日志檔案能記錄當使用者登入時login記錄下的錯誤密碼、Sendmail的問題、su指令執行失敗等資訊。下面是一條記錄:

  該日志檔案記錄最近成功登入的事件和最後一次不成功的登入事件,由login生成。在每次使用者登入時被查詢,該檔案是二進制檔案,需要使用lastlog指令檢視,根據UID排序顯示登入名、端口号和上次登入時間。如果某使用者從來沒有登入過,就顯示為"**Never logged in**"。該指令隻能以root權限執行。簡單地輸入lastlog指令後就會看到類似如下的資訊:

  系統賬戶諸如bin、daemon、adm、uucp、mail等決不應該登入,如果發現這些賬戶已經登入,就說明系統可能已經被入侵了。若發現記錄的時間不是使用者上次登入的時間,則說明該使用者的賬戶已經洩密了。

  /var/log/wtmp

  該日志檔案永久記錄每個使用者登入、登出及系統的啟動、停機的事件。是以随着系統正常運作時間的增加,該檔案的大小也會越來越大,增加的速度取決于系統使用者登入的次數。該日志檔案可以用來檢視使用者的登入記錄,last指令就通過通路這個檔案獲得這些資訊,并以反序從後向前顯示使用者的登入記錄,last也能根據使用者、終端 tty或時間顯示相應的記錄。

  指令last有兩個可選參數:

  last -u 使用者名 顯示使用者上次登入的情況。

  last -t 天數 顯示指定天數之前的使用者登入情況。

  /var/run/utmp

  該日志檔案記錄有關目前登入的每個使用者的資訊。是以這個檔案會随着使用者登入和登出系統而不斷變化,它隻保留當時聯機的使用者記錄,不會為使用者保留永久的記錄。系統中需要查詢目前使用者狀态的程式,如 who、w、users、finger等就需要通路這個檔案。該日志檔案并不能包括所有精确的資訊,因為某些突發錯誤會終止使用者登入會話,而系統沒有及時更新 utmp記錄,是以該日志檔案的記錄不是百分之百值得信賴的。

  以上提及的3個檔案(/var/log/wtmp、/var/run/utmp、/var/log/lastlog)是日志子系統的關鍵檔案,都記錄了使用者登入的情況。這些檔案的所有記錄都包含了時間戳。這些檔案是按二進制儲存的,故不能用less、cat之類的指令直接檢視這些檔案,而是需要使用相關指令通過這些檔案而檢視。其中,utmp和wtmp檔案的資料結構是一樣的,而lastlog檔案則使用另外的資料結構,關于它們的具體的資料結構可以使用man指令查詢。

  每次有一個使用者登入時,login程式在檔案lastlog中檢視使用者的UID。如果存在,則把使用者上次登入、登出時間和主機名寫到标準輸出中,然後login程式在lastlog中記錄新的登入時間,打開utmp檔案并插入使用者的utmp記錄。該記錄一直用到使用者登入退出時删除。utmp檔案被各種指令使用,包括who、w、users和finger。

  下一步,login程式打開檔案wtmp附加使用者的utmp記錄。當使用者登入退出時,具有更新時間戳的同一utmp記錄附加到檔案中。wtmp檔案被程式last使用。

  /var/log/xferlog

  該日志檔案記錄FTP會話,可以顯示出使用者向FTP伺服器或從伺服器拷貝了什麼檔案。該檔案會顯示使用者拷貝到伺服器上的用來入侵伺服器的惡意程式,以及該使用者拷貝了哪些檔案供他使用。

  該檔案的格式為:第一個域是日期和時間,第二個域是下載下傳檔案所花費的秒數、遠端系統名稱、檔案大小、本地路徑名、傳輸類型(a:ASCII,b:二進制)、與壓縮相關的标志或tar,或"_"(如果沒有壓縮的話)、傳輸方向(相對于伺服器而言:i代表進,o代表出)、通路模式(a:匿名,g:輸入密碼,r:真實使用者)、使用者名、服務名(通常是ftp)、認證方法(l:RFC931,或0),認證使用者的ID或"*"。下面是該檔案的一條記錄:

   RedHat Linux預設沒有記錄該日志檔案。要啟用該日志檔案,必須在/etc/syslog.conf檔案中添加一行:kern.* /var/log/kernlog 。這樣就啟用了向/var/log/kernlog檔案中記錄所有核心消息的功能。該檔案記錄了系統啟動時加載裝置或使用裝置的情況。一般是正常的操作,但如果記錄了沒有授權的使用者進行的這些操作,就要注意,因為有可能這就是惡意使用者的行為。下面是該檔案的部分内容:

  該日志檔案記錄了X-Window啟動的情況。另外,除了/var/log/外,惡意使用者也可能在别的地方留下痕迹,應該注意以下幾個地方:root和其他賬戶的shell曆史檔案;使用者的各種郵箱,如.sent、mbox,以及存放在/var/spool/mail/ 和 /var/spool/mqueue中的郵箱;臨時檔案/tmp、/usr/tmp、/var/tmp;隐藏的目錄;其他惡意使用者建立的檔案,通常是以"."開頭的具有隐藏屬性的檔案等。

  <b>具體指令</b>

  wtmp和utmp檔案都是二進制檔案,它們不能被諸如tail之類的指令剪貼或合并(使用cat指令)。使用者需要使用who、w、users、last和ac等指令來使用這兩個檔案包含的資訊。

  who指令

  who指令查詢utmp檔案并報告目前登入的每個使用者。who的預設輸出包括使用者名、終端類型、登入日期及遠端主機。例如,鍵入who指令,然後按Enter鍵,将顯示如下内容:

  如果指明了wtmp檔案名,則who指令查詢所有以前的記錄。指令who /var/log/wtmp将報告自從wtmp檔案建立或删改以來的每一次登入。

  w指令

  w指令查詢utmp檔案并顯示目前系統中每個使用者和它所運作的程序資訊。例如,鍵入w指令,然後按Enter鍵,将顯示如下内容:

  users指令

  users指令用單獨的一行列印出目前登入的使用者,每個顯示的使用者名對應一個登入會話。如果一個使用者有不止一個登入會話,那他的使用者名将顯示相同的次數。例如,鍵入users指令,然後按Enter鍵,将顯示如下内容:

  chyang lewis lewis ylou ynguo ynguo

  last指令

  last指令往回搜尋wtmp來顯示自從檔案第一次建立以來登入過的使用者。例如:

  如果指明了使用者,那麼last隻報告該使用者的近期活動,例如,鍵入last ynguo指令,然後按Enter鍵,将顯示如下内容:

  ac指令

  ac指令根據目前的/var/log/wtmp檔案中的登入進入和退出來報告使用者連接配接的時間(小時),如果不使用标志,則報告總的時間。例如,鍵入ac指令,然後按Enter鍵,将顯示如下内容:

  total 5177.47

鍵入ac -d指令,然後按Enter鍵,将顯示每天的總的連接配接時間:

  鍵入ac -p指令,然後按Enter鍵,将顯示每個使用者的總的連接配接時間:

  lastlog指令

  lastlog檔案在每次有使用者登入時被查詢。可以使用lastlog指令檢查某特定使用者上次登入的時間,并格式化輸出上次登入日志/var/log/lastlog的内容。它根據UID排序顯示登入名、端口号(tty)和上次登入時間。如果一個使用者從未登入過,lastlog顯示**Never logged**。注意需要以root身份運作該指令,例如:

另外,可加一些參數,例如,"last -u 102"指令将報告UID為102的使用者;"last -t 7"指令表示限制為上一周的報告。

  <b>程序統計</b>

  UNIX可以跟蹤每個使用者運作的每條指令,如果想知道昨晚弄亂了哪些重要的檔案,程序統計子系統可以告訴你。它還對跟蹤一個侵入者有幫助。與連接配接時間日志不同,程序統計子系統預設不激活,它必須啟動。在Linux系統中啟動程序統計使用accton指令,必須用root身份來運作。accton指令的形式為:accton file,file必須事先存在。先使用touch指令建立pacct檔案:touch /var/log/pacct,然後運作accton:accton /var/log/pacct。一旦accton被激活,就可以使用lastcomm指令監測系統中任何時候執行的指令。若要關閉統計,可以使用不帶任何參數的accton指令。

  lastcomm指令報告以前執行的檔案。不帶參數時,lastcomm指令顯示目前統計檔案生命周期内記錄的所有指令的有關資訊。包括指令名、使用者、tty、指令花費的CPU時間和一個時間戳。如果系統有許多使用者,輸入則可能很長。看下面的例子:

  程序統計的一個問題是pacct檔案可能增長得十分迅速。這時需要互動式地或經過cron機制運作sa指令來保證日志資料在系統控制内。sa指令報告、清理并維護程序統計檔案。它能把/var/log/pacct中的資訊壓縮到摘要檔案/var/log/savacct和/var/log/usracct中。這些摘要包含按指令名和使用者名分類的系統統計資料。在預設情況下sa先讀它們,然後讀pacct檔案,使報告能包含所有的可用資訊。sa的輸出有下面一些标記項。

avio:每次執行的平均I/O操作次數。

cp:使用者和系統時間總和,以分鐘計。

cpu:和cp一樣。

k:核心使用的平均CPU時間,以1k為機關。

k*sec:CPU存儲完整性,以1k-core秒為機關。

re:實時時間,以分鐘計。

s:系統時間,以分鐘計。

tio:I/O操作的總數。

u:使用者時間,以分鐘計。

例如:

使用者還可以根據使用者而不是指令來提供一個摘要報告。例如,鍵入指令"sa -m",将顯示如下内容:

  <b>syslog裝置 </b>

  syslog已被許多日志函數采納,它用在許多保護措施中。任何程式都可以通過syslog 記錄事件。syslog可以記錄系統事件,可以寫到一個檔案或裝置中,或給使用者發送一個資訊。它能記錄本地事件或通過網絡記錄另一個主機上的事件。

  syslog裝置依據兩個重要的檔案:/etc/syslogd(守護程序)和/etc/syslog.conf配置檔案。習慣上,多數syslog資訊被寫到/var/adm或/var/log目錄下的資訊檔案中(messages.*)。一個典型的syslog記錄包括生成程式的名字和一個文本資訊。它還包括一個裝置和一個優先級範圍(但不在日志中出現)。

每個syslog消息被賦予下面的主要裝置之一:

  syslog.conf檔案指明syslogd程式記錄日志的行為,該程式在啟動時查詢配置檔案。該檔案由不同程式或消息分類的單個條目組成,每個占一行。對每類消息提供一個選擇域和一個動作域。這些域由tab符隔開:選擇域指明消息的類型和優先級;動作域指明syslogd接收到一個與選擇标準相比對的消息時所執行的動作。每個選項是由裝置和優先級組成的。當指明一個優先級時,syslogd将記錄一個擁有相同或更高優先級的消息。是以如果指明"crit",那所有标為crit、alert和emerg的消息将被記錄。每行的行動域指明當選擇域選擇了一個給定消息後應該把它發送到哪兒。例如,如果想把所有郵件消息記錄到一個檔案中,如下所示:

  其他裝置也有自己的日志。UUCP和news裝置能産生許多外部消息。它把這些消息存到自己的日志(/var/log/spooler)中并把級别限為"err"或更高。例如:

  當一個緊急消息到來時,可能想讓所有的使用者都得到,也可能想讓自己的日志接收并儲存:

  alert消息應該寫到root和tiger的個人賬号中:

  有時syslogd将産生大量的消息。例如,核心("kernel"裝置)可能很冗長。使用者可能想把核心消息記錄到/dev/console中。下面的例子表明核心日志記錄被注釋掉了:

  使用者可以在一行中指明所有的裝置。下面的例子把info或更進階别的消息送到/var/log/messages,除了mail以外。級别"none"禁止一個裝置:

  在有些情況下,可以把日志送到列印機,這樣網絡入侵者怎麼修改日志就都沒有用了。通常要廣泛記錄日志。syslog裝置是一個攻擊者的顯著目标。一個為其他主機維護日志的系統對于防範伺服器攻擊特别脆弱,是以要特别注意。

有個小指令logger為syslog(3)系統日志檔案提供一個shell指令接口,使使用者能建立日志檔案中的條目。

  用法:logger 

  例如:logger This is a test!

  它将産生一個如下的syslog記錄:Aug 19 22:22:34 tiger: This is a test!

  注意,不要完全相信日志,因為攻擊者很容易修改它的。

  <b>程式日志與其他</b>

  許多程式通過維護日志來反映系統的安全狀态。su指令允許使用者獲得另一個使用者的權限,是以它的安全很重要,它的日志檔案為sulog。同樣的還有sudolog。另外,像Apache有兩個日志:access_log和error_log。還有一些常用到的其他日志工具,我們就不一一闡述了,有興趣的讀者可以參考下邊網址的内容。

Chklastlog:

[url]ftp://coast.cs.purdue.edu/pub/tools/unix/chklastlog/[/url]

chkwtmp:

[url]ftp://coast.cs.purdue.edu/pub/tools/unix/chkwtmp/[/url]

dump_lastlog:

[url]ftp://coast.cs.purdue.edu/pub/tools/unix/dump_lastlog.Z[/url]

spar:

[url]ftp://coast.cs.purdue.edu/pub/tools/unix/TAMU/[/url]

Swatch:

[url]http://www.lomar.org/komar/alek/pres/swatch/cover.html[/url]

Zap:

[url]ftp://caost.cs.purdue.edu/pub/tools/unix/zap.tar.gz[/url]

日志分類方法:

[url]http://csrc.nist.gov/nissc/1998/proceedings/paperD1.pdf[/url]

繼續閱讀