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