熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

認識與分析登錄檔

2013-11-13 22:20:06  來源: Oracle 

  什麼是登錄檔干嘛要分析登錄檔
  這部分是最容易被新手所忽略的那就是詳細而確實的紀錄或者是備份系統的登錄檔什麼是登錄檔呢?簡單的說就是記錄系統活動記錄的幾個檔案例如何時何地(來源 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/bootlog記錄開機或者是一些服務啟動的時候所顯示的啟動或關閉訊息
  · /var/log/maillog 或 /var/log/mail/*紀錄郵件存取或往來( sendmail 與 pop )的使用者記錄
  · /var/log/cron這個是用來記錄 crontab 這個例行性服務的內容的!
  · /var/log/httpd /var/log/news /var/log/mysqldlog /var/log/samba /var/log/procmaillog 分別是幾個不同的網路服務的記錄檔啦!
  好了那麼記錄了這些登錄檔之後我要做什麼分析呀!?基本上一個好的系統管理員大概都知道『一部主機負責的服務最好能少盡量少』這是什麼意思呢?也就是說這部主機為郵件主機那麼就專門負責郵件工作不要還搞 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
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.