3. 進程統計 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 4. 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! 注意不要完全相信日志,因為攻擊者很容易修改它的。 5. 程序日志 許多程序通過維護日志來反映系統的安全狀態。su命令允許用戶獲得另一個用戶的權限,所以它的安全很重要,它的文件為sulog。同樣的還有sudolog。另外,想Apache有兩個日志:Access_log和error_log。