Linux日誌

gaopengtttt發表於2009-01-04
Linux系統日誌

日誌對於安全來說,非常重要,他記錄了系統每天發生的各種各樣的事情,你可以透過他來檢查錯誤發生的原因,或者受到攻擊時攻擊者留下的痕跡。日誌主要的功能有:審計和監測。他還可以實時的監測系統狀態,監測和追蹤侵入者等等。

  在Linux系統中,有三個主要的日誌子系統:

  連線時間日誌--由多個程式執行,把紀錄寫入到/var/log/wtmp和/var/run/utmp,login等程式更新wtmp和utmp檔案,使系統管理員能夠跟蹤誰在何時登入到系統。

  程式統計--由系統核心執行。當一個程式終止時,為每個程式往程式統計檔案(pacct或acct)中寫一個紀錄。程式統計的目的是為系統中的基本服務提供命令使用統計。

  錯誤日誌--由syslogd(8)執行。各種系統守護程式、使用者程式和核心透過syslog(3)向檔案/var/log/messages報告值得注意的事件。另外有許多UNIX程式建立日誌。像HTTP和FTP這樣提供網路服務的伺服器也保持詳細的日誌。

  常用的日誌檔案如下:

    access-log   紀錄HTTP/web的傳輸
    acct/pacct   紀錄使用者命令
    aculog     紀錄MODEM的活動
    btmp      紀錄失敗的紀錄
    lastlog     紀錄最近幾次成功登入的事件和最後一次不成功的登入
    messages    從syslog中記錄資訊(有的連結到syslog檔案)
    sudolog     紀錄使用sudo發出的命令
    sulog      紀錄使用su命令的使用
    syslog     從syslog中記錄資訊(通常連結到messages檔案)
    utmp      紀錄當前登入的每個使用者
    wtmp      一個使用者每次登入進入和退出時間的永久紀錄
    xferlog     紀錄FTP會話

  utmp、wtmp和lastlog日誌檔案是多數重用UNIX日誌子系統的關鍵--保持使用者登入進入和退出的紀錄。有關當前登入使用者的資訊記錄在檔案utmp中;登入進入和退出紀錄在檔案wtmp中;最後一次登入檔案可以用lastlog命令察看。資料交換、關機和重起也記錄在wtmp檔案中。所有的紀錄都包含時間戳。這些檔案(lastlog通常不大)在具有大量使用者的系統中增長十分迅速。例如wtmp檔案可以無限增長,除非定期擷取。許多系統以一天或者一週為單位把wtmp配置成迴圈使用。它通常由cron執行的指令碼來修改。這些指令碼重新命名並迴圈使用wtmp檔案。通常,wtmp在第一天結束後命名為wtmp.1;第二天後wtmp.1變為wtmp.2等等,直到wtmp.7。

  每次有一個使用者登入時,login程式在檔案lastlog中察看使用者的UID。如果找到了,則把使用者上次登入、退出時間和主機名寫到標準輸出中,然後login程式在lastlog中紀錄新的登入時間。在新的lastlog紀錄寫入後,utmp檔案開啟並插入使用者的utmp紀錄。該紀錄一直用到使用者登入退出時刪除。utmp檔案被各

種命令檔案使用,包括who、w、users和finger。

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

  具體命令

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

  who:who命令查詢utmp檔案並報告當前登入的每個使用者。Who的預設輸出包括使用者名稱、終端型別、登入日期及遠端主機。例如:who(回車)顯示

  chyang    pts/0 Aug     18 15:06
  ynguo     pts/2 Aug     18 15:32
  ynguo     pts/3 Aug     18 13:55
  lewis     pts/4 Aug     18 13:35
  ynguo     pts/7 Aug     18 14:12
  ylou     pts/8 Aug     18 14:15

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

  w:w命令查詢utmp檔案並顯示當前系統中每個使用者和它所執行的程式資訊。例如:w(回車)顯示:3:36pm up 1 day, 22:34, 6 users, load average: 0.23, 0.29, 0.27。

USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
chyang pts/0 202.38.68.242 3:06pm 2:04 0.08s 0.04s -bash
ynguo pts/2 202.38.79.47 3:32pm 0.00s 0.14s 0.05 w
lewis pts/3 202.38.64.233 1:55pm 30:39 0.27s 0.22s -bash
lewis pts/4 202.38.64.233 1:35pm 6.00s 4.03s 0.01s sh /home/users/
ynguo pts/7 simba.nic.ustc.e 2:12pm 0.00s 0.47s 0.24s telnet mail
ylou pts/8 202.38.64.235 2:15pm 1:09m 0.10s 0.04s -bash

  users:users用單獨的一行列印出當前登入的使用者,每個顯示的使用者名稱對應一個登入會話。如果一個使用者有不止一個登入會話,那他的使用者名稱將顯示相同的次數。例如:users(回車)顯示:chyang lewis lewis ylou ynguo ynguo

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

  chyang pts/9  202.38.68.242 Tue Aug 1 08:34 - 11:23 (02:49)
  cfan  pts/6  202.38.64.224 Tue Aug 1 08:33 - 08:48 (00:14)
  chyang pts/4  202.38.68.242 Tue Aug 1 08:32 - 12:13 (03:40)
  lewis pts/3   202.38.64.233 Tue Aug 1 08:06 - 11:09 (03:03)
  lewis pts/2   202.38.64.233 Tue Aug 1 07:56 - 11:09 (03:12)

  如果指明瞭使用者,那麼last只報告該使用者的近期活動,例如:last ynguo(回車)顯示:

  ynguo  pts/4 simba.nic.ustc.e Fri Aug 4 16:50 - 08:20 (15:30)
  

ynguo  pts/4 simba.nic.ustc.e Thu Aug 3 23:55 - 04:40 (04:44)
  ynguo  pts/11 simba.nic.ustc.e Thu Aug 3 20:45 - 22:02 (01:16)
  ynguo  pts/0 simba.nic.ustc.e Thu Aug 3 03:17 - 05:42 (02:25)
  ynguo  pts/0 simba.nic.ustc.e Wed Aug 2 01:04 - 03:16 1+02:12)
  ynguo  pts/0 simba.nic.ustc.e Wed Aug 2 00:43 - 00:54 (00:11)
  ynguo  pts/9 simba.nic.ustc.e Thu Aug 1 20:30 - 21:26 (00:55)

  ac:ac命令根據當前的/var/log/wtmp檔案中的登入進入和退出來報告使用者連結的時間(小時),如果不使用標誌,則報告總的時間。例如:ac(回車)顯示:total 5177.47

    ac -d(回車)顯示每天的總的連結時間
    Aug 12 total 261.87
    Aug 13 total 351.39
    Aug 14 total 396.09
    Aug 15 total 462.63
    Aug 16 total 270.45
    Aug 17 total 104.29
    Today total 179.02
    ac -p (回車)顯示每個使用者的總的連線時間
    ynguo 193.23
    yucao 3.35
    rong 133.40
    hdai 10.52
    zjzhu 52.87
    zqzhou 13.14
    liangliu 24.34
    total 5178.24

  lastlog:lastlog檔案在每次有使用者登入時被查詢。可以使用lastlog命令來檢查某特定使用者上次登入的時間,並格式化輸出上次登入日誌/var/log/lastlog的內容。它根據UID排序顯示登入名、埠號(tty)和上次登入時間。如果一個使用者從未登入過,lastlog顯示"**Never logged**。注意需要以root執行該命令,例如:

  rong    5   202.38.64.187   Fri Aug 18 15:57:01 +0800 2000
  dbb  **Never logged in**
  xinchen **Never logged in**
  pb9511   **Never logged in**
  xchen   0  202.38.64.190 Sun Aug 13 10:01:22 +0800 2000

  另外,可一加一些引數,例如,last -u 102將報告UID為102的使用者;last -t 7表示限制上一週的報告。

  程式統計

  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時間和一個時間戳。如果系統有許多使用者,輸入則可能很長。下面的例子:

  crond    

F  root   ??   0.00 secs Sun Aug 20 00:16
  promisc_check.s S  root   ??   0.04 secs Sun Aug 20 00:16
  promisc_check    root   ??   0.01 secs Sun Aug 20 00:16
  grep        root   ??   0.02 secs Sun Aug 20 00:16
  tail        root   ??   0.01 secs Sun Aug 20 00:16
  sh         root   ??   0.01 secs Sun Aug 20 00:15
  ping      S  root   ??   0.01 secs Sun Aug 20 00:15
  ping6.pl    F root   ??   0.01 secs Sun Aug 20 00:15
  sh      root   ??   0.01 secs Sun Aug 20 00:15
  ping      S  root   ??   0.02 secs Sun Aug 20 00:15
  ping6.pl    F  root   ??   0.02 secs Sun Aug 20 00:15
  sh         root   ??   0.02 secs Sun Aug 20 00:15
  ping S root   ?? 0.00 secs Sun Aug 20 00:15
  ping6.pl F root   ?? 0.01 secs Sun Aug 20 00:15
  sh root   ?? 0.01 secs Sun Aug 20 00:15
  ping S root   ?? 0.01 secs Sun Aug 20 00:15
  sh root   ?? 0.02 secs Sun Aug 20 00:15
  ping S root   ?? 1.34 secs Sun Aug 20 00:15
  locate root   ttyp0 1.34 secs Sun Aug 20 00:15
  accton S root   ttyp0 0.00 secs Sun Aug 20 00:15

  程式統計的一個問題是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--使用者時間,以分鐘計
    例如:
    842   173.26re    4.30cp 0avio 358k
    2   10.98re     4.06cp 0avio 299k find
    9   24.80re     0.05cp 0avio 291k ***other
    105   30.44re     0.03cp 0avio 302k ping
    104   30.55re     0.03cp 0avio 394k sh
    162   0.11re     0.03cp 0avio 413k security.sh*
    154   0.03re     0.02cp 0avio 273k ls
    56   31.61re     0.02cp 0avio 823k ping6.pl*
    2   3.23re     0.02cp 0avio 822k ping6.pl
    35   0.02re     0.01cp 0avio 257k md5sum
    97   0.02re     0.01cp 0avio 263k initlog
    12 0.19re 0.01cp 0avio 399k promisc_check.s
    15 0.09re 0.00cp 0avio 288k grep
    11 0.08re 0.00cp 0avio 332k awk

  使用者還可以根據使用者而不是命令來提供一個摘要報告。例如sa -m顯示如下:

        885   173.28re    4.31cp 0avk
    root  879   173.23re    

4.31cp 0avk
    alias 3   0.05re     0.00cp 0avk
    qmailp 3   0.01re     0.00cp 0avk

  Syslog裝置

  Syslog已被許多日誌函式採納,它用在許多保護措施中--任何程式都可以透過syslog 紀錄事件。Syslog可以紀錄系統事件,可以寫到一個檔案或裝置中,或給使用者傳送一個資訊。它能紀錄本地事件或透過網路紀錄另一個主機上的事件。

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

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

    LOG_AUTH--認證系統:login、su、getty等
    LOG_AUTHPRIV--同LOG_AUTH,但只登入到所選擇的單個使用者可讀的檔案中
    LOG_CRON--cron守護程式
    LOG_DAEMON--其他系統守護程式,如routed
    LOG_FTP--檔案傳輸協議:ftpd、tftpd
    LOG_KERN--核心產生的訊息
    LOG_LPR--系統印表機緩衝池:lpr、lpd
    LOG_MAIL--電子郵件系統
    LOG_NEWS--網路新聞系統
    LOG_SYSLOG--由syslogd(8)產生的內部訊息
    LOG_USER--隨機使用者程式產生的訊息
    LOG_UUCP--UUCP子系統
    LOG_LOCAL0~LOG_LOCAL7--為本地使用保留
    Syslog為每個事件賦予幾個不同的優先順序:
    LOG_EMERG--緊急情況
    LOG_ALERT--應該被立即改正的問題,如系統資料庫破壞
    LOG_CRIT--重要情況,如硬碟錯誤
    LOG_ERR--錯誤
    LOG_WARNING--警告資訊
    LOG_NOTICE--不是錯誤情況,但是可能需要處理
    LOG_INFO--情報資訊
    LOG_DEBUG--包含情報的資訊,通常旨在除錯一個程式時使用

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

  #Log all the mail messages in one place
    mail.* /var/log/maillog   

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

# Save mail and news errors of level err and higher in aspecial file.
    uucp,news.crit /var/log/spooler

  當一個緊急訊息到來時,可能想讓所有的使用者都得到。也可能想讓自己的日誌接收並儲存。

    #Everybody gets emergency messages, plus log them on anther machine
    *.emerg *
    *.emerg @linuxaid.com.cn

  alert訊息應該寫到root和tiger的個人賬號中:

    #Root and Tiger get alert and higher messages
    *.alert root,tiger

  有時syslogd將產生大量的訊息。例如核心("kern"裝置)可能很冗長。使用者可能想把核心訊息紀錄到/dev/console中。下面的例子表明核心日誌紀錄被註釋掉了:

    #Log all kernel messages to the console
    #Logging much else clutters up the screen
    #kern.* /dev/console

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

    #Log anything(except mail)of level info or higher
    #Don't log private authentication messages!
    *.info:mail.none;autHPriv.none /var/log/messages

  在有些情況下,可以把日誌送到印表機,這樣網路入侵者怎麼修改日誌都沒有用了。通常要廣泛紀錄日誌。Syslog裝置是一個攻擊者的顯著目標。一個為其他主機維護日誌的系統對於防範伺服器攻擊特別脆弱,因此要特別注意。

  有個小命令logger為syslog(3)系統日誌檔案提供一個shell命令介面,使使用者能建立日誌檔案中的條目。用法:logger 例如:logger This is a test!

  它將產生一個如下的syslog紀錄:Aug 19 22:22:34 tiger: This is a test!

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

  程式日誌

  許多程式透過維護日誌來反映系統的安全狀態。su命令允許使用者獲得另一個使用者的許可權,所以它的安全很重要,它的檔案為sulog。同樣的還有sudolog。另外,想Apache有兩個日誌:access_log和error_log。

內容來自:

 

 

Linux日誌的作用在於,當系統被入侵或者出現故障的時候,可以透過對日誌進行分析定位並找出原因。另一方面,有時候日誌過多會使分割槽爆滿。如果日誌沒有單獨的/var分割槽,而且是在/根區下,有可能導致系統異常。

Linux的日誌,是由syslogdklogd這兩個程式來管理的。後者是針對kernellog程式。前者記錄其他應用程式的log。

可以透過/etc/init.d/syslog 來啟動和關閉這兩個程式。

syslogd的配置檔案是/etc/syslog.conf。它決定了記錄什麼樣的資訊,儲存到哪個檔案裡面。

它分成兩部分:

一是日誌的內容和級別。

日誌的內容:

auth pam_pwdb 報告的認證活動。

authpriv 包括特權資訊如使用者名稱在內的認證活動

cron cron at 有關的資訊。

daemon inetd 守護程式有關的資訊。

kern 核心資訊,首先透過 klogd 傳遞。

lpr 與列印服務有關的資訊。

mail 與電子郵件有關的資訊

mark syslog 內部功能用於生成時間戳

news 來自新聞伺服器的資訊

syslog syslog 生成的資訊

user 由使用者程式生成的資訊

uucp uucp 生成的資訊

local0----local7 與自定義程式使用,例如使用 local5 做為 ssh 功能

* 萬用字元代表除了 mark 以外的所有功能

記錄的級別:

emerg panic 該系統不可用

alert 需要立即被修改的條件

crit 阻止某些工具或子系統功能實現的錯誤條件

err 阻止工具或某些子系統部分功能實現的錯誤條件

warning 預警資訊

notice 具有重要性的普通條件

info 提供資訊的訊息

debug 不包含函式條件或問題的其他資訊

none 沒有重要級別

* 所有級別,除了none

二是日誌記錄在哪裡。

可以是本地的檔案,終端,遠端的某臺伺服器。通常都是在/var/log 目錄下的檔案中。

舉個例子,就Redhat9來說

$ cat /etc/syslog.conf

# Log anything (except mail) of level info or higher.

# Don't log private authentication messages!

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

它的意思是:messages記錄所有的info級別以上的日誌,除了mailauthprivcorn的日誌。

更詳細的格式請使用“info syslog.conf”檢視。

另外一個配置檔案是/etc/sysconfig/syslog。這個是配置syslogdklogd選項的檔案。

比如syslogd -r表示接受遠端伺服器的日誌記錄。這樣syslogd會監聽從514埠進來的UDP包。

記錄的日誌預設在/var/log資料夾下面。當然也可以在/etc/syslog.conf裡面修改。

另外一個值得注意的是日誌管理的logrotate程式。配置檔案是/etc/logrotate.conf

這個程式是對日誌進行迴圈歸檔rotate,壓縮compress以及郵寄mail

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7728585/viewspace-526473/,如需轉載,請註明出處,否則將追究法律責任。

相關文章