Linux日志管理五大命令詳解
原創(chuàng)【51CTO獨家特稿】從Ext到Ext2,從Ext2再到Ext3,乃至以后的Ext4或者更高版本,Linux系統(tǒng)歷來以強大、豐富和完整的日志系統(tǒng)著稱。通過管理日志,可以清晰地了解系統(tǒng)的運行狀況,也能從各種蛛絲馬跡中發(fā)現(xiàn)入侵和快速地阻止入侵。本文是有關(guān)Linux系統(tǒng)全方位管理的第四部分,講述Linux日志管理方面的事項。前面三個部分分別為:文件系統(tǒng)管理,Linux進程管理,以及用戶管理。
本文隸屬于專題:Linux系統(tǒng)全方位管理
日志主要的功能有:審計和監(jiān)測。它還可以實時的監(jiān)測系統(tǒng)狀態(tài),監(jiān)測和追蹤侵入者等等。成功地管理任何系統(tǒng)的關(guān)鍵之一,是要知道系統(tǒng)中正在發(fā)生什么事。Linux中提供了異常日志,并且日志的細節(jié)是可配置的。Linux日志都以明文形式存儲,所以用戶不需要特殊的工具就可以搜索和閱讀它們。還可以編寫腳本,來掃描這些日志,并基于它們的內(nèi)容去自動執(zhí)行某些功能。Linux日志存儲在/var/log目錄中。這里有幾個由系統(tǒng)維護的日志文件,但其他服務(wù)和程序也可能會把它們的日志放在這里。大多數(shù)日志只有root賬戶才可以讀,不過修改文件的訪問權(quán)限就可以讓其他人可讀。在Linux系統(tǒng)中,有四類主要的日志:
◆連接時間日志:由多個程序執(zhí)行,把記錄寫入到/var/log/wtmp和/var/run/utmp,login等程序更新wtmp和utmp文件,使系統(tǒng)管理員能夠跟蹤誰在何時登錄到系統(tǒng)。
◆進程統(tǒng)計:由系統(tǒng)內(nèi)核執(zhí)行。當一個進程終止時,為每個進程往進程統(tǒng)計文件(pacct或acct)中寫一個記錄。進程統(tǒng)計的目的是為系統(tǒng)中的基本服務(wù)提供命令使用統(tǒng)計。
◆錯誤日志:由syslogd(8)守護程序執(zhí)行。各種系統(tǒng)守護進程、用戶程序和內(nèi)核通過syslogd(3)守護程序向文件/var/log/messages報告值得注意的事件。另外有許多UNIX程序創(chuàng)建日志。像HTTP和FTP這樣提供網(wǎng)絡(luò)服務(wù)的服務(wù)器也保持詳細的日志。
◆實用程序日志:許多程序通過維護日志來反映系統(tǒng)的安全狀態(tài)。su命令允許用戶獲得另一個用戶的權(quán)限,所以它的安全很重要,它的文件為sulog。同樣的還有sudolog。另外,諸如Apache等Http的服務(wù)器都有兩個日志:access_log(客戶端訪問日志)以及error_log(服務(wù)出錯日志)。 FTP服務(wù)的日志記錄在xferlog文件當中,Linux下郵件傳送服務(wù)(sendmail)的日志一般存放在maillog文件當中。
utmp、wtmp日志文件是多數(shù)Linux日志子系統(tǒng)的關(guān)鍵,它保存了用戶登錄進入和退出的記錄。有關(guān)當前登錄用戶的信息記錄在文件utmp中;登錄進入和退出記錄在文件wtmp中;數(shù)據(jù)交換、關(guān)機以及重啟的機器信息也都記錄在wtmp文件中。所有的記錄都包含時間戳。時間戳對于日志來說非常重要,因為很多攻擊行為分析都與時間有極大的關(guān)系。這些文件在具有大量用戶的系統(tǒng)中增長十分迅速。例如wtmp文件可以無限增長,除非定期截取。許多系統(tǒng)以一天或者一周為單位把wtmp配置成循環(huán)使用。它通常由cron運行的腳本來修改。這些腳本重新命名并循環(huán)使用wtmp文件。通常,wtmp在第一天結(jié)束后命名為wtmp.1;第二天后wtmp.1變?yōu)閣tmp.2等等,用戶可以根據(jù)實際情況來對這些文件進行命名和配置使用。
utmp文件被各種命令文件使用,包括who、w、users和finger。而wtmp文件被程序last和ac使用。
wtmp和utmp文件都是二進制文件,他們不能被諸如tail命令剪貼或合并(使用cat命令)。用戶需要使用who、w、users、last和ac來使用這兩個文件包含的信息。
#p#
1.who命令
who命令查詢utmp文件并報告當前登錄的每個用戶。Who的缺省輸出包括用戶名、終端類型、登錄日期及遠程主機。使用該命令,系統(tǒng)管理員可以查看當前系統(tǒng)存在哪些不法用戶,從而對其進行審計和處理。例如:運行who命令顯示如下所示:
# who root pts/1 2010-02-22 13:02 (:0.0) root pts/2 2010-02-22 15:57 (:0.0) root pts/3 2010-02-22 15:57 (:0.0)
如果指明了wtmp文件名,則who命令查詢所有以前的記錄。命令who /var/log/wtmp將報告自從wtmp文件創(chuàng)建或刪改以來的每一次登錄。例如:運行該命令如下所示:
# who /var/log/wtmp root :0 2010-01-24 21:47 root pts/1 2010-01-24 21:47 (:0.0) root :0 2010-02-20 19:36 root pts/1 2010-02-20 19:36 (:0.0) root :0 2010-02-21 15:21 root pts/1 2010-02-21 15:56 (:0.0) root pts/2 2010-02-21 16:03 (:0.0) root :0 2010-02-22 13:01 root pts/1 2010-02-22 13:02 (:0.0) root pts/2 2010-02-22 15:57 (:0.0) root pts/3 2010-02-22 15:57 (:0.0)
2.users命令
users用單獨的一行打印出當前登錄的用戶,每個顯示的用戶名對應(yīng)一個登錄會話。如果一個用戶有不止一個登錄會話,那他的用戶名將顯示相同的次數(shù)。運行該命令將如下所示:
# users root root root
3.last命令
last命令往回搜索wtmp來顯示自從文件第一次創(chuàng)建以來登錄過的用戶。系統(tǒng)管理員可以周期性地對這些用戶的登錄情況進行審計和考核,從而發(fā)現(xiàn)起中存在的問題,確定不法用戶,并進行處理。運行該命令,如下所示:
# last root pts/3 :0.0 Mon Feb 22 15:57 still logged in root pts/2 :0.0 Mon Feb 22 15:57 still logged in root pts/1 :0.0 Mon Feb 22 13:02 still logged in root :0 Mon Feb 22 13:01 still logged in reboot system boot 2.6.18-8.el5 Mon Feb 22 12:56 (03:02) root pts/2 :0.0 Sun Feb 21 16:03 - down (02:37) root pts/1 :0.0 Sun Feb 21 15:56 - down (02:45) root :0 Sun Feb 21 15:21 - down (03:20) reboot system boot 2.6.18-8.el5 Sun Feb 21 15:19 (03:22) root pts/1 :0.0 Sat Feb 20 19:36 - down (01:50) root :0 Sat Feb 20 19:36 - down (01:51) reboot system boot 2.6.18-8.el5 Sat Feb 20 19:34 (01:53) root pts/1 :0.0 Sun Jan 24 21:47 - down (00:02) root :0 Sun Jan 24 21:47 - down (00:02) reboot system boot 2.6.18-8.el5 Sun Jan 24 21:45 (00:05) reboot system boot 2.6.18-8.el5 Sun Jan 24 21:41 (00:02) wtmp begins Sun Jan 24 21:41:03 2010
讀者可以看到,使用上述命令顯示的信息太多,區(qū)分度很小。所以,可以通過指明用戶來顯示其登錄信息即可。例如:使用last reoot來顯示reboot的歷史登錄信息,則如下所示:
# last reboot reboot system boot 2.6.18-8.el5 Mon Feb 22 12:56 (03:07) reboot system boot 2.6.18-8.el5 Sun Feb 21 15:19 (03:22) reboot system boot 2.6.18-8.el5 Sat Feb 20 19:34 (01:53) reboot system boot 2.6.18-8.el5 Sun Jan 24 21:45 (00:05) reboot system boot 2.6.18-8.el5 Sun Jan 24 21:41 (00:02) wtmp begins Sun Jan 24 21:41:03 2010
4.a(chǎn)c命令
ac命令根據(jù)當前的/var/log/wtmp文件中的登錄進入和退出來報告用戶連結(jié)的時間(小時),如果不使用標志,則報告總的時間。例如:ac(回車)顯示:total 18.47,如下所示:
# ac total 18.47
另外,可加一些參數(shù),例如,last -u 102將報告UID為102的用戶;last -t 7表示限制上一周的報告。
5.lastlog命令
lastlog文件在每次有用戶登錄時被查詢。可以使用lastlog命令檢查某特定用戶上次登錄的時間,并格式化輸出上次登錄日志/var/log/lastlog的內(nèi)容。它根據(jù)UID排序顯示登錄名、端口號(tty)和上次登錄時間。如果一個用戶從未登錄過,lastlog顯示**Never logged**。注意需要以root身份運行該命令。運行該命令如下所示:
# lastlog 用戶名 端口 來自 最后登陸時間 root **從未登錄過** bin **從未登錄過** daemon **從未登錄過** adm **從未登錄過** lp **從未登錄過** sync **從未登錄過** shutdown **從未登錄過** halt **從未登錄過** mail **從未登錄過** news **從未登錄過** uucp **從未登錄過** operator **從未登錄過** games **從未登錄過** gopher **從未登錄過** ftp **從未登錄過** nobody **從未登錄過** rpm **從未登錄過** dbus **從未登錄過** avahi **從未登錄過** mailnull **從未登錄過** smmsp **從未登錄過** nscd **從未登錄過** vcsa **從未登錄過** haldaemon **從未登錄過** rpc **從未登錄過** rpcuser **從未登錄過** sshd **從未登錄過** pcap **從未登錄過** ntp **從未登錄過** gdm **從未登錄過** apache **從未登錄過** distcache **從未登錄過** postgres **從未登錄過** mysql **從未登錄過** dovecot **從未登錄過** webalizer **從未登錄過** squid **從未登錄過** named **從未登錄過** xfs **從未登錄過** sabayon **從未登錄過** postfix **從未登錄過** amanda **從未登錄過** cyrus **從未登錄過** mailman **從未登錄過** radiusd **從未登錄過** exim **從未登錄過** privoxy **從未登錄過** quagga **從未登錄過** radvd **從未登錄過** ldap **從未登錄過** tomcat **從未登錄過** pegasus **從未登錄過** liyang **從未登錄過** google **從未登錄過**
到此,有關(guān)Linux系統(tǒng)全方位管理的四大方面就介紹完畢。有關(guān)Linux系統(tǒng)管理的更多技巧,可閱讀如下文章: