FreeBSD
系統日志 系統的日志記錄提供了對系統活動的詳細審計,這些日志用於評估、審查系統的運行環境和各種操作。對於一般情況,日志記錄包括記錄用戶登錄時間、登錄地點、進行什麼操作等內容,如果使用得當,日志記錄能向系統管理員提供有關危害安全的侵害或入侵試圖等非常有用的信息。
BSD提供了詳細的各種日志記錄,以及有關日志的大量工具和實用程序。這些審計記錄通常由程序自動產生,是缺省設置的一部分,能夠幫助Unix管理員來尋找系統中存在的問題,對系統維護十分有用。還有另一些日志記錄,需要管理員進行設置才能生效。大部分日志記錄文件被保存在/var/log目錄中,在這個目錄中除了保存系統生成日志之外,還包括一些應用軟件的日志文件。當然/var目錄下的其他子目錄中也會記錄下一些其他種類的日志記錄文件,這依賴於具體的應用程序的設置。
QUOTE:
$ ls /var/log
adduser maillog.5.gz sendmail.st.1
dmesg.today maillog.6.gz sendmail.st.10
dmesg.yesterday maillog.7.gz sendmail.st.2
httpd-access.log messages sendmail.st.3
httpd-error.log messages.0.gz sendmail.st.4
kerberos.log messages.1.gz sendmail.st.5
lastlog messages.2.gz sendmail.st.6
lpd-errs messages.3.gz sendmail.st.7
maillog messages.4.gz sendmail.st.8
maillog.0.gz messages.5.gz sendmail.st.9
maillog.1.gz news setuid.today
maillog.2.gz ppp.log setuid.yesterday
maillog.3.gz sendmail.st userlog
maillog.4.gz sendmail.st.0 wtmp1) 系統登錄日志 系統會保存每個用戶的登錄記錄,這些信息包括這個用戶的名字、登錄起始結束時間以及從何處登錄入系統的等等。它們被保存到 /var/log/lastlog、/var/log/wtmp和/var/run/utmp文件中,這三個文件以二進制格式保存了這些用戶的登錄數據。
其中 /var/run/utmp文件中保存的是當前系統用戶的登錄記錄,因此這個文件會隨著用戶進入和離開系統而不斷變化,而它也不會為用戶保留很長的記錄,只保留當時聯機的用戶記錄。系統中需要查詢當前用戶狀態的程序,如who、w等就需要訪問這個文件。utmp可能不包括所有精確的信息,某些突發錯誤會終止用戶登錄會話,當沒有及時更新utmp記錄,因此utmp的記錄不是百分之百的可以信賴的。
而 /var/log/wtmp保存了所有的登錄、退出信息,以及系統的啟動、停機記錄,因此隨著系統正常運行時間的增加,它的大小也會越來越大,增加的速度依賴於系統用戶登錄次數。因此可以利用這個日志用來查看用戶的登錄記錄,last命令就通過訪問這個文件來獲得這些信息,並以反序從後向前顯示用戶的登錄記錄,last也能根據用戶、終端tty或時間顯示相應的記錄。ac命令同樣也使用wtmp中的數據產生報告,但它的顯示方式不同。它可以根據用戶(ac -p),或按日期(ap -d)顯示信息,這樣管理員就能獲得一些非常有用的反常信息,如一個平時不太活躍的用戶突然登錄並連接很長時間,就有理由懷疑這個帳戶被竊取了。
注意: X Window由於會同時打開多個終端窗口,因此會使得用戶登錄連接時間迅速增加。
lastlog文件保存的是每個用戶的最後一次登錄信息,包括登錄時間和地點,這個文件一般只有login程序使用,通過用戶的UID,來在lastlog文件中查找相應記錄,然後報告其最後一次登錄時間和終端tty。然後,login程序就使用新的記錄更新這個文件。
這三個文件是使用二進制格式保存的,因此不能直接查看其中的內容,而需要使用相關命令。當然也可以通過程序來訪問這三個文件,這就需要了解它們使用的數據結構。其中 utmp和wtmp使用同樣的數據結構,而lastlog使用另外一個數據結構,可使用man來進行查詢具體結構。如果系統的用戶數量很多,那麼wtmp文件的大小會迅速增加,在系統/var文件系統空間緊張的情況下,就導致這個文件系統被占滿。系統不會主動控制這個文件的大小,因此這需要管理員的干預,需要手工及時清除,或編寫shell腳本定期保存和清除。
系統還可以提供記賬統計的功能,要打開系統的計賬功能,需要使用 accton命令,注意,accton必須跟隨記賬日志文件的名字作參數,而不帶參數的accton將關閉記賬進程。
當打開了記賬功能後,可以使用 lastcomm來檢查在系統中執行的所有命令的信息,包括執行的命令、執行命令的用戶、用戶使用的終端tty,命令完成的時間,執行時間等。從lastcomm的輸出也能幫助管理員檢查可能的入侵行為。
此外可以使用 ac命令來查詢用戶的連接時間的報告,sa命令來查詢用戶消耗的處理器時間的報告。
2) Syslog 日志記錄最初, syslog只是為了sendmail而設計的消息日志工具,由於它提供了一個中心控制點,使得syslog非常好用和易配置,因此當今很多程序都使用syslog來發送它們的記錄信息。syslog是一種強大的日志記錄方式,不但可以將日志保存在本地文件中,還可以根據設置將syslog記錄發送到網絡上的另一台主機中。
支持 syslog方式的系統啟動了syslogd守護進程,這個程序從本地的Unix套接字和監聽在514端口(UDP)上的Internet套接字,來獲得syslog的記錄。本機中進程使用syslog系統調用發送來syslog記錄,然後由syslogd將他們保存到正確的文件或發送到網絡上另一台運行syslogd主機中去。
syslogd的設置文件為/etc/syslog.conf,定義消息對應的相應目標,一條消息可以達到多個目標,也可能被忽略。
QUOTE:
# $Id: syslog.conf,v 1.9 1998/10/14 21:59:55 nate Exp $
#
# Spaces are NOT valid field separators in this file.
# Consult the syslog.conf(5) manpage.
*.err;kern.debug;auth.notice;mail.crit /dev/console
*.notice;kern.debug;lpr.info;mail.crit;news.err /var/log/messages
mail.info /var/log/maillog
lpr.info /var/log/lpd-errs
cron.* /var/cron/log
*.err root
*.notice;news.err root
*.alert root
*.emerg *
!ppp
*.* /var/log/ppp.logsyslog.conf的配置可以分為兩個部分,第一部分用於區分消息的類型,另一個用於設置消息發送的目的地。通常,消息的類型包括消息的產生者,例如kern表示內核產生的消息,auth表示認證系統產生的消息,等等,還包括消息的級別,例如emerg表示非常重要的緊急信息,alert表示系統告警狀態,crit表示關鍵狀態,err表示一般的錯誤信息,warning表示警告信息,notice表示提示信息,但還不是錯誤,info表示一般信息,debug表示調試信息等,因此一個消息的類型可能為:kern.debug、mail.info等,但頁可以使用通配符*進行匹配。
從上面的 syslog.conf的設置可以看出,系統正常運行中的很多重要的信息,如錯誤信息*.err、內核調試信息kern.debuf、認證報告auth.notice等被直接輸出的console中,另外還有一些比較重要的信息被輸出到/var/log/messages文件中,發送郵件的記錄將被保存在/var/log/maillog文件中,打印記錄為/var/log/lpd-errs等,使得管理員可以根據這些文件來查詢相關記錄,進行統計或尋找系統問題。其中使用syslog記錄的messages文件中包括root登錄的信息、用戶多次登錄失敗的嘗試等對系統安全相當重要的信息,因此也是系統遭受攻擊之後,攻擊者會根據syslog.conf中設置試圖清除相關文件中自己的登錄記錄。因此對於安全性要求更高的系統,可以嘗試將syslog發送到另一台計算機上,或者輸出到一些設備文件中,如在打印機上立即打印輸出。
3) 日志管理 newsyslog系統會使用 newsyslog定期檢查syslog輸出的messages文件和maillog文件,將舊數據壓縮保存為備份文件,如messages.1.gz等。這是一項非常重要的功能,否則系統日志將不斷的增長,直至占滿所有磁盤空間。
Newsyslog可以使用兩種方式來管理日志文件,一種是定期管理日志,另一種為按照設置的大小管理日志,然後可以生成多個日志備份文件。它的配置文件為/etc/newsyslog.conf,系統管理員可以根據這裡的已有配置,添加對自己的日志文件的管理。
4) 其他日志除了系統登錄記錄和 syslog記錄之外,其他還有一些應用程序使用自己的記錄方式。
系統每天都會自動檢查系統的安全設置,包括對 SetUID、SetGID的執行文件的檢查,其結果將輸出到/var/log/security.today文件中,管理員可以與/var/log/security.yesterday文件對比,尋找系統安全設置的變化。
如果系統使用 sendmail,那麼sendmail.st文件中以二進制形式保存了sendmail的統計信息。
在系統啟動的時候,就將內核的檢測信息輸出到屏幕上,這些信息可以幫助用戶分析系統中的硬件狀態。一般使用 dmesg命令來查看最後一次啟動時輸出的這個檢測信息。這個信息也被系統保存在/var/log/dmesg.today文件中,系統中同時也存在另一個文件dmesg.yesterday,是上次的啟動檢測信息,對比這兩個文件,就可以了解到系統硬件和內核配置的變化。
lpd-errs記錄了系統中lpd產生的錯誤信息。
此外,各種 shell還會記錄用戶使用的命令歷史,它使用用戶主目錄下的文件來記錄這些命令歷史,通常這個文件的名字為.history(csh),或.bash-history等。