分類: LINUX
轉載
我們主要講一下Linux環境中的系統記帳和系統日志管理以及怎麼用一些工具更加方便有效的管理日志信息。
當我們用上面的方法進行了 Linux 服務器的安裝和一些基本的設置後,我們的服務器應該說來是比較安全的。但是總是還會有黑客可以通過各種方法利用系統管理員的疏忽侵入我們的系統。他們的一舉一動都會記錄到系統的日志之中,盡管他們可能可以改變這些日志信息,甚至用自己的程序替換掉我們系統本身的命令程序,但是通過日志我們總還是能找到一些蛛絲馬跡。下面我們主要講一下 Linux 環境中的系統記帳和系統日志管理以及怎麼用一些工具更加方便有效的管理日志信息。
1 系統記帳
最初開發的系統記帳用於跟蹤用戶資源消費情況,從用戶帳號中提取費用為目地的。現在我們可以把它用於安全目的,給我們提供有關在系統中發生的各種活動的有價值信息。
系統記帳主要非為兩類:
1) 連接記帳
連接記帳是跟蹤當前用戶當前對話、用戶登錄和退出的活動。在 Linux 系統中使用 utmp (動態用戶對話)和 wtmp (登錄/退出日志記錄)工具來完成這一記帳過程。Wtmp 工具同時維護重新引導和系統狀態變化信息。各種程序對這些工具進行刷新和維護,因此無須進行特殊的後台進程或程序。然而,utmp 和 wtmp 輸出結果文件必須存在,如果這些文件不存在會關閉連接記帳。與 utmp 和 wtmp 有關的所有數據將分別保存在 /var/run/utmp 和 /var/log/wtmp 中。這些文件歸根用戶所有。這些文件中的數據是用戶不可讀的,但也有工具可以轉換成可讀的形式。
dump-utmp 可以轉換連接記帳數據為可讀的 ASCII 格式數據。
ac 命令提供了有關用戶連接的大概統計,我們可以使用帶有標志 d 和 p 的 ac 命令。標志 d 顯示了一天的總連接統計,標志 p 顯示了每一個用戶的連接時間。這種統計信息的方式對了解與探測入侵有關的用戶情況及其他活動很有幫助。Last 和 who 是出於安全角度定期使用的最常用命令。
last 命令提供每一個用戶的登錄時間,退出登錄時間,登錄位置,重新引導系統及運行級別變化的信息。last -10 表示 last 的最多輸出結果為最近的 10 條信息。缺省時 last 將列出在 /var/log/wtmp 中記錄的每一連接和運行級別的變化。從安全角度考慮,last 命令提供了迅速查看特定系統連接活動的一種方式。觀察每天的輸出結果是個好習慣,從中可以捕獲異常輸入項。Last 命令的 -x 選項可以通知系統運行級別的變化。
who 命令主要作用是報告目前正在登錄的用戶、登錄設備、遠程登錄主機名或使用的 Xwindows 的 X 顯示值、會話閒置時間以及會話是否接受 write 或 talk 信息。
例如: who -iwH 的輸出結果:
USER MESG LINE LOGIN-TIME IDLE FROM Denny - tty1 Feb 18 08:42 old
這就表示用戶 Denny 不能接受 write 或 talk 信息,2月18日8:42 從 tty1 登錄。該命令的安全值提供了用戶連接的大致情況,這也為監視可疑活動提供了條件。 其他的有關命令有 lastlog 命令,該命令報告了有關 /var/log/lastlog 中記錄的最後一次登錄的數據信息。
2) 進程記帳
進程記帳是對進程活動的記錄。原數據保存在 /var/log/pacct 文件中,其許可權限為 600。該文件的存在是進程記帳有效的保障。與連接記帳不同,進程記帳必須處於打開狀態,使用下面的命令設置打開狀態.
# accton /var/log/pacct
可以使用自選文件代替 /var/log/pacct,但必須記住這一文件並且設置適當的許可權限。必須在每次引導的時候執行該命令,可以在 /etc/rc.d/rc.local 中輸入以下腳本:
# initiate process account if [ -x /sbin/accton ] then /sbin/accton /var/log/pacct echo "process accounting initiated" fi
一旦在系統中配置進程記帳後,將使用 3 個命令解釋在 /var/log/pacct 中的非用戶可讀的原數據。這些命令分別為 dump-acct,該命令與 dump-utmp 完全相似,sa 命令用於統計系統進程記帳的大致情況,最後一個是 lastcomm 命令列出了系統執行的命令。
1 sa 命令
與 ac 命令一樣,sa 是一個統計命令。該命令可以獲得每個用戶或每個命令的進程使用的大致情況,並且提供了系統資源的消費信息。在很大程度上,sa 又是一個記帳命令,對於識別特殊用戶,特別是已知特殊用戶使用的可疑命令十分有用。另外,由於信息量很大,需要處理腳本或程序篩選這些信息。
可以用這樣的命令單獨限制用戶:
# sa -u |grep joe joe 0.00 cpu bash joe 0.00 cpu ls joe 0.01 cpu ls joe 0.01 cpu lastcomm joe 0.01 cpu tcpdump joe 0.01 cpu reboot
輸出結果從左到右依次為:用戶名、CPU 使用時間秒數、命令(最多為 16 個字符)。
2 lastcomm 命令
與 sa 命令不同,lastcomm 命令提供每一個命令的輸出結果,同時打印出與執行每個命令有關的時間印戳。就這一點而說,lastcomm 比 sa 更有安全性。
lastcomm 命令使用命令名,用戶名或終端名作為變量。該命令可以查詢進程記帳數據庫。下面顯示 lastcomm joe 的輸出結果,每行表示命令的執行情況,從左到右為:用戶、設備、使用的 cpu 時間秒數、執行命令的日期和時間。
# lastcomm joe reboot joe ttyp1 0.01 secs Fri Feb 26 18:40 tcpdump joe ttyp1 0.01 secs Fri Feb 26 18:39 lastcomm joe ttyp1 0.01 secs Fri Feb 26 18:32 ls joe ttyp1 0.01 secs Fri Feb 26 18:30 ls joe ttyp1 0.00 secs Fri Feb 26 18:28 bash joe ttyp1 0.00 secs Fri Feb 26 18:25
如果系統被入侵,請不要相信在 lastlog、utmp、wtmp、pacct 中記錄的信息,但也不要忽略,因為這些信息可能被修改過了。另外有可能有人替換了who程序來掩人耳目。
通常,在已經識別某些可疑活動後,進程記帳可以有效的發揮作用。使用 lastcomm 可以隔絕用戶活動或在特定時間執行命令。但是使用該命令必須設置為打開狀態。
基本上,/var/log/pacct,/var/run/utmp, /var/log/pacct是動態數據庫文件。其中/var/log/pacct和/var/log/wtmp文件隨著輸入項的增加和修改而增加。問題在於這些文件處於動態增加狀態,因此到一定程度就會變的很大。
我們可以通過一個叫 logrotate 的程序來解決上面這個問題,該程序讀 /etc/logrotate.conf 配置文件,該配置文件告訴 logrotate 所要讀 /etc/logrotate.d 目錄中的文件。可以通過它來設定日志文件的循環時間。
2 系統日志
在 Linux 下使用各種日志文件,有些用於某些特殊用途,例如:/var/log/xferlog 用於記錄文件傳輸協議 FTP 的信息。其他日志文件,例如 /var/log/messages 文件通常包含許多系統和內核工具的輸入項。這些日志文件為系統的安全狀態提供了信息。
我們主要講解兩個日志守護程序---syslog和klogd------並且簡要敘述了由Linux操作系統生成的其他其他日志文件。目的是提供基本的配置情況。
2.1 syslog系統日志工具
大部分的 Linux 系統中都要使用 syslog 工具,它是相當靈活的,能使系統根據不同的日志輸入項采取不同的活動。下面將詳細討論syslog 的工作機制以及在配置文件 /etc/syslog.conf 中的配置,還將論述利用 syslog 靈活性和功能性進行工作的各種方法。
1) 概述
非常簡單,syslog 工具由一個守護程序組成。它能接受訪問系統的日志信息並且根據 /etc/syslog.conf 配置文件中的指令處理這些信息。程序,守護進程和內核提供了訪問系統的日志信息。因此,任何希望生成日志信息的程序都可以向 syslog 接口呼叫生成該信息。
通常,syslog 接受來自系統的各種功能的信息,每個信息都包括重要級。/etc/syslog.conf 文件通知 syslogd 如何根據設備和信息重要級別來報告信息。
2) etc/syslog.conf
/etc/syslog.conf 文件使用下面的形式
facility.level action
空白行和以#開頭的行可以忽略。Facility.level 字段也被稱做 seletor。應該使用一次或多次 tab 鍵分隔 facility 和 action。大部分 Linux 使用這些空格為分隔符。現在分析一下 /etc/syslog.conf 中的三個要素。
facility 指定 syslog 功能,主要包括以下這些:
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 是最高級,其次是 alert,依次類推。缺省時,在 /etc/syslog.conf 記錄中指定的級別為該級別和更高級別。如果希望使用確定的級別可以使用兩個運算符號!(不等)和=。
user.=info
表示告知 syslog 接受所有在 info 級別上的 user 功能信息。
syslog 級別如下:
emerg 或 panic 該系統不可用 alert 需要立即被修改的條件 crit 阻止某些工具或子系統功能實現的錯誤條件 err 阻止工具或某些子系統部分功能實現的錯誤條件 warning 預警信息 notice 具有重要性的普通條件 info 提供信息的消息 debug 不包含函數條件或問題的其他信息 none 沒有重要級,通常用於排錯 * 所有級別,除了none
action字段所表示的活動具有許多靈活性,特別是,可以使用名稱管道的作用是可以使 syslogd 生成後處理信息。
syslog 主要支持以下活動
file 指定文件的絕對路徑 terminal 或 print 完全的串行或並行設備標志符 @host 遠程的日志服務器 username 發送信息到使用 write 的指定用戶中 named pipe 指定使用 mkfifo 命令來創建的 FIFO 文件的絕對路徑。
3) 調用 syslogd 守護程序
syslog 守護程序是由 /etc/rc.d/init.d/syslog 腳本在運行級2下被調用的,缺省不使用選項。但有兩個選項 -r 和 -h 很有用。
如果將要使用一個日志服務器,必須調用 syslogd -r。缺省情況下 syslog 不接受來自遠程系統的信息。當指定 -r 選項,syslogd 將會監聽從 514 端口上進來的 UDP 包。
如果還希望日志服務器能傳送日志信息,可以使用 -h 標志。缺省時,syslogd 將忽略使其從一個遠程系統傳送日志信息到另一個系統的/etc/syslog.conf 輸入項。
4) klogd 守護進程
klogd 守護進程獲得並記錄 Linux 內核信息。通常,syslogd 會記錄 klogd 傳來的所有信息,然而,如果調用帶有 -f filename 變量的 klogd 時,klogd 就在 filename 中記錄所有信息,而不是傳給 syslogd。當指定另外一個文件進行日志記錄時,klogd 就向該文件中寫入所有級別或優先權。Klogd 中沒有和 /etc/syslog.conf 類似的配置文件。使用 klogd 而避免使用 syslogd 的好處在於可以查找大量錯誤。如果有人入侵了內核,使用 klogd 可以修改錯誤。
5) 其他日志
在 /var/log 和不同版本的系統中以及自己配置的應用程序中都可以找到其他日志文件。當然,/etc/syslog.conf 列出了由 syslogd 管理的所有日志文件名和位置。其他日志由其他應用程序管理。例如在 Redhat6.2 中,apache server 生成 /var/log/htmlaccess.log 文件記錄客戶訪問,生成 /var/log/httpd/error.log 文件在 syslog 以外查找錯誤。
cron 工具維護的信息日志文件 /var/log/cron。當 Linuxconf 工具記錄系統重新配置信息時,將生成日志文件如 /var/log/nerconf.log。samba 在 /var/log/samba 中維護其日志信息。
另外由於 syslogd 在系統非常繁忙時,可能會丟失信息,所以,可以用 cyclog 替換 syslog。