我們主要講一下Linux環(huán)境中的系統(tǒng)記帳和系統(tǒng)日志管理以及怎么用一些工具更加方便有效的管理日志信息。
當(dāng)我們用上面的方法進(jìn)行了 Linux 服務(wù)器的安裝和一些基本的設(shè)置后,我們的服務(wù)器應(yīng)該說來是比較安全的堕阔。但是總是還會(huì)有黑客可以通過各種方法利用系統(tǒng)管理員的疏忽侵入我們的系統(tǒng)老赤。他們的一舉一動(dòng)都會(huì)記錄到系統(tǒng)的日志之中,盡管他們可能可以改變這些日志信息硼被,甚至用自己的程序替換掉我們系統(tǒng)本身的命令程序,但是通過日志我們總還是能找到一些蛛絲馬跡寿弱。下面我們主要講一下 Linux 環(huán)境中的系統(tǒng)記帳和系統(tǒng)日志管理以及怎么用一些工具更加方便有效的管理日志信息犯眠。
1 系統(tǒng)記帳
最初開發(fā)的系統(tǒng)記帳用于跟蹤用戶資源消費(fèi)情況,從用戶帳號(hào)中提取費(fèi)用為目地的≈⒏铮現(xiàn)在我們可以把它用于安全目的筐咧,給我們提供有關(guān)在系統(tǒng)中發(fā)生的各種活動(dòng)的有價(jià)值信息。
系統(tǒng)記帳主要非為兩類:
1) 連接記帳
連接記帳是跟蹤當(dāng)前用戶當(dāng)前對(duì)話噪矛、用戶登錄和退出的活動(dòng)量蕊。在 Linux 系統(tǒng)中使用 utmp (動(dòng)態(tài)用戶對(duì)話)和 wtmp (登錄/退出日志記錄)工具來完成這一記帳過程。Wtmp 工具同時(shí)維護(hù)重新引導(dǎo)和系統(tǒng)狀態(tài)變化信息摩疑。各種程序?qū)@些工具進(jìn)行刷新和維護(hù)危融,因此無須進(jìn)行特殊的后臺(tái)進(jìn)程或程序。然而雷袋,utmp 和 wtmp 輸出結(jié)果文件必須存在,如果這些文件不存在會(huì)關(guān)閉連接記帳辞居。與 utmp 和 wtmp 有關(guān)的所有數(shù)據(jù)將分別保存在 /var/run/utmp 和 /var/log/wtmp 中楷怒。這些文件歸根用戶所有。這些文件中的數(shù)據(jù)是用戶不可讀的瓦灶,但也有工具可以轉(zhuǎn)換成可讀的形式蒂誉。
dump-utmp 可以轉(zhuǎn)換連接記帳數(shù)據(jù)為可讀的 ASCII 格式數(shù)據(jù)扰路。
ac 命令提供了有關(guān)用戶連接的大概統(tǒng)計(jì),我們可以使用帶有標(biāo)志 d 和 p 的 ac 命令。標(biāo)志 d 顯示了一天的總連接統(tǒng)計(jì)怒炸,標(biāo)志 p 顯示了每一個(gè)用戶的連接時(shí)間。這種統(tǒng)計(jì)信息的方式對(duì)了解與探測(cè)入侵有關(guān)的用戶情況及其他活動(dòng)很有幫助狼牺。Last 和 who 是出于安全角度定期使用的最常用命令峰档。
last 命令提供每一個(gè)用戶的登錄時(shí)間,退出登錄時(shí)間撮胧,登錄位置桨踪,重新引導(dǎo)系統(tǒng)及運(yùn)行級(jí)別變化的信息。last -10 表示 last 的最多輸出結(jié)果為最近的 10 條信息芹啥。缺省時(shí) last 將列出在 /var/log/wtmp 中記錄的每一連接和運(yùn)行級(jí)別的變化锻离。從安全角度考慮,last 命令提供了迅速查看特定系統(tǒng)連接活動(dòng)的一種方式墓怀。觀察每天的輸出結(jié)果是個(gè)好習(xí)慣汽纠,從中可以捕獲異常輸入項(xiàng)。Last 命令的 -x 選項(xiàng)可以通知系統(tǒng)運(yùn)行級(jí)別的變化傀履。
who 命令主要作用是報(bào)告目前正在登錄的用戶虱朵、登錄設(shè)備、遠(yuǎn)程登錄主機(jī)名或使用的 Xwindows 的 X 顯示值、會(huì)話閑置時(shí)間以及會(huì)話是否接受 write 或 talk 信息卧秘。
例如: who -iwH 的輸出結(jié)果:
USER? ? MESG? ? LINE? LOGIN-TIME? ? ? IDLE? ? FROM
Denny? ? ? -? ? tty1? Feb 18 08:42? ? old
這就表示用戶 Denny 不能接受 write 或 talk 信息呢袱,2月18日8:42 從 tty1 登錄。該命令的安全值提供了用戶連接的大致情況翅敌,這也為監(jiān)視可疑活動(dòng)提供了條件羞福。 其他的有關(guān)命令有 lastlog 命令,該命令報(bào)告了有關(guān) /var/log/lastlog 中記錄的最后一次登錄的數(shù)據(jù)信息蚯涮。
2) 進(jìn)程記帳
進(jìn)程記帳是對(duì)進(jìn)程活動(dòng)的記錄治专。原數(shù)據(jù)保存在 /var/log/pacct 文件中,其許可權(quán)限為 600遭顶。該文件的存在是進(jìn)程記帳有效的保障张峰。與連接記帳不同,進(jìn)程記帳必須處于打開狀態(tài)棒旗,使用下面的命令設(shè)置打開狀態(tài).
#? ? accton? /var/log/pacct
可以使用自選文件代替 /var/log/pacct喘批,但必須記住這一文件并且設(shè)置適當(dāng)?shù)脑S可權(quán)限。必須在每次引導(dǎo)的時(shí)候執(zhí)行該命令铣揉,可以在 /etc/rc.d/rc.local 中輸入以下腳本:
#? initiate? process account
if? [ -x? /sbin/accton? ]
then
/sbin/accton? /var/log/pacct
echo? "process? accounting? initiated"
fi
一旦在系統(tǒng)中配置進(jìn)程記帳后饶深,將使用 3 個(gè)命令解釋在 /var/log/pacct 中的非用戶可讀的原數(shù)據(jù)。這些命令分別為 dump-acct逛拱,該命令與 dump-utmp 完全相似敌厘,sa 命令用于統(tǒng)計(jì)系統(tǒng)進(jìn)程記帳的大致情況,最后一個(gè)是 lastcomm 命令列出了系統(tǒng)執(zhí)行的命令朽合。
1 sa 命令
與 ac 命令一樣俱两,sa 是一個(gè)統(tǒng)計(jì)命令。該命令可以獲得每個(gè)用戶或每個(gè)命令的進(jìn)程使用的大致情況曹步,并且提供了系統(tǒng)資源的消費(fèi)信息宪彩。在很大程度上,sa 又是一個(gè)記帳命令箭窜,對(duì)于識(shí)別特殊用戶毯焕,特別是已知特殊用戶使用的可疑命令十分有用。另外磺樱,由于信息量很大,需要處理腳本或程序篩選這些信息纳猫。
可以用這樣的命令單獨(dú)限制用戶:
#? ? 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
輸出結(jié)果從左到右依次為:用戶名、CPU 使用時(shí)間秒數(shù)竹捉、命令(最多為 16 個(gè)字符)芜辕。
2 lastcomm 命令
與 sa 命令不同,lastcomm 命令提供每一個(gè)命令的輸出結(jié)果块差,同時(shí)打印出與執(zhí)行每個(gè)命令有關(guān)的時(shí)間印戳侵续。就這一點(diǎn)而說倔丈,lastcomm 比 sa 更有安全性。
lastcomm 命令使用命令名状蜗,用戶名或終端名作為變量需五。該命令可以查詢進(jìn)程記帳數(shù)據(jù)庫。下面顯示 lastcomm joe 的輸出結(jié)果轧坎,每行表示命令的執(zhí)行情況宏邮,從左到右為:用戶、設(shè)備缸血、使用的 cpu 時(shí)間秒數(shù)蜜氨、執(zhí)行命令的日期和時(shí)間。
#? 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
如果系統(tǒng)被入侵捎泻,請(qǐng)不要相信在 lastlog飒炎、utmp、wtmp笆豁、pacct 中記錄的信息郎汪,但也不要忽略,因?yàn)檫@些信息可能被修改過了渔呵。另外有可能有人替換了who程序來掩人耳目怒竿。
通常,在已經(jīng)識(shí)別某些可疑活動(dòng)后扩氢,進(jìn)程記帳可以有效的發(fā)揮作用。使用 lastcomm 可以隔絕用戶活動(dòng)或在特定時(shí)間執(zhí)行命令爷辱。但是使用該命令必須設(shè)置為打開狀態(tài)录豺。
基本上,/var/log/pacct,/var/run/utmp, /var/log/pacct是動(dòng)態(tài)數(shù)據(jù)庫文件饭弓。其中/var/log/pacct和/var/log/wtmp文件隨著輸入項(xiàng)的增加和修改而增加双饥。問題在于這些文件處于動(dòng)態(tài)增加狀態(tài),因此到一定程度就會(huì)變的很大弟断。
我們可以通過一個(gè)叫 logrotate 的程序來解決上面這個(gè)問題咏花,該程序讀 /etc/logrotate.conf 配置文件,該配置文件告訴 logrotate 所要讀 /etc/logrotate.d 目錄中的文件阀趴』韬玻可以通過它來設(shè)定日志文件的循環(huán)時(shí)間。
回頁首
2 系統(tǒng)日志
在 Linux 下使用各種日志文件刘急,有些用于某些特殊用途棚菊,例如:/var/log/xferlog 用于記錄文件傳輸協(xié)議 FTP 的信息。其他日志文件叔汁,例如 /var/log/messages 文件通常包含許多系統(tǒng)和內(nèi)核工具的輸入項(xiàng)统求。這些日志文件為系統(tǒng)的安全狀態(tài)提供了信息检碗。
我們主要講解兩個(gè)日志守護(hù)程序---syslog和klogd------并且簡(jiǎn)要敘述了由Linux操作系統(tǒng)生成的其他其他日志文件。目的是提供基本的配置情況码邻。
2.1 syslog系統(tǒng)日志工具
大部分的 Linux 系統(tǒng)中都要使用 syslog 工具折剃,它是相當(dāng)靈活的,能使系統(tǒng)根據(jù)不同的日志輸入項(xiàng)采取不同的活動(dòng)像屋。下面將詳細(xì)討論syslog 的工作機(jī)制以及在配置文件 /etc/syslog.conf 中的配置怕犁,還將論述利用 syslog 靈活性和功能性進(jìn)行工作的各種方法。
1) 概述
非常簡(jiǎn)單开睡,syslog 工具由一個(gè)守護(hù)程序組成因苹。它能接受訪問系統(tǒng)的日志信息并且根據(jù) /etc/syslog.conf 配置文件中的指令處理這些信息。程序篇恒,守護(hù)進(jìn)程和內(nèi)核提供了訪問系統(tǒng)的日志信息扶檐。因此,任何希望生成日志信息的程序都可以向 syslog 接口呼叫生成該信息胁艰。
通常款筑,syslog 接受來自系統(tǒng)的各種功能的信息,每個(gè)信息都包括重要級(jí)腾么。/etc/syslog.conf 文件通知 syslogd 如何根據(jù)設(shè)備和信息重要級(jí)別來報(bào)告信息奈梳。
2) etc/syslog.conf
/etc/syslog.conf 文件使用下面的形式
facility.level? ? action
空白行和以#開頭的行可以忽略。Facility.level 字段也被稱做 seletor解虱。應(yīng)該使用一次或多次 tab 鍵分隔 facility 和 action攘须。大部分 Linux 使用這些空格為分隔符。現(xiàn)在分析一下 /etc/syslog.conf 中的三個(gè)要素殴泰。
facility 指定 syslog 功能于宙,主要包括以下這些:
auth? 由 pam_pwdb 報(bào)告的認(rèn)證活動(dòng)。
authpriv 包括特權(quán)信息如用戶名在內(nèi)的認(rèn)證活動(dòng)
cron? 與 cron 和 at 有關(guān)的信息悍汛。
daemon 與 inetd 守護(hù)進(jìn)程有關(guān)的信息捞魁。
kern? 內(nèi)核信息,首先通過 klogd 傳遞离咐。
lpr? 與打印服務(wù)有關(guān)的信息谱俭。
mail? 與電子郵件有關(guān)的信息
mark? syslog 內(nèi)部功能用于生成時(shí)間戳
news? 來自新聞服務(wù)器的信息
syslog? 由 syslog 生成的信息
user? 由用戶程序生成的信息
uucp? 由 uucp 生成的信息
local0----local7? 與自定義程序使用,例如使用 local5 做為 ssh 功能
*? 通配符代表除了 mark 以外的所有功能
與每個(gè)功能對(duì)應(yīng)的優(yōu)先級(jí)是按一定順序排列的宵蛀,emerg 是最高級(jí)昆著,其次是 alert,依次類推糖埋。缺省時(shí)宣吱,在 /etc/syslog.conf 記錄中指定的級(jí)別為該級(jí)別和更高級(jí)別。如果希望使用確定的級(jí)別可以使用兩個(gè)運(yùn)算符號(hào)瞳别!(不等)和=征候。
user.=info
表示告知 syslog 接受所有在 info 級(jí)別上的 user 功能信息杭攻。
syslog 級(jí)別如下:
emerg 或 panic? 該系統(tǒng)不可用
alert? ? ? ? ? ? 需要立即被修改的條件
crit? ? ? ? ? ? 阻止某些工具或子系統(tǒng)功能實(shí)現(xiàn)的錯(cuò)誤條件
err? ? ? ? ? ? 阻止工具或某些子系統(tǒng)部分功能實(shí)現(xiàn)的錯(cuò)誤條件
warning? ? ? ? 預(yù)警信息
notice? ? ? ? ? 具有重要性的普通條件
info? ? ? ? ? ? 提供信息的消息
debug? ? ? ? ? 不包含函數(shù)條件或問題的其他信息
none? ? ? ? ? ? 沒有重要級(jí),通常用于排錯(cuò)
*? ? ? ? ? ? ? 所有級(jí)別疤坝,除了none
action字段所表示的活動(dòng)具有許多靈活性兆解,特別是,可以使用名稱管道的作用是可以使 syslogd 生成后處理信息跑揉。
syslog 主要支持以下活動(dòng)
file? ? 指定文件的絕對(duì)路徑
terminal 或 print? ? 完全的串行或并行設(shè)備標(biāo)志符
@host? 遠(yuǎn)程的日志服務(wù)器
username? 發(fā)送信息到使用 write 的指定用戶中
named pipe? 指定使用 mkfifo 命令來創(chuàng)建的 FIFO 文件的絕對(duì)路徑锅睛。
3) 調(diào)用 syslogd 守護(hù)程序
syslog 守護(hù)程序是由 /etc/rc.d/init.d/syslog 腳本在運(yùn)行級(jí)2下被調(diào)用的,缺省不使用選項(xiàng)历谍。但有兩個(gè)選項(xiàng) -r 和 -h 很有用现拒。
如果將要使用一個(gè)日志服務(wù)器,必須調(diào)用 syslogd -r望侈。缺省情況下 syslog 不接受來自遠(yuǎn)程系統(tǒng)的信息印蔬。當(dāng)指定 -r 選項(xiàng),syslogd 將會(huì)監(jiān)聽從 514 端口上進(jìn)來的 UDP 包脱衙。
如果還希望日志服務(wù)器能傳送日志信息侥猬,可以使用 -h 標(biāo)志。缺省時(shí)捐韩,syslogd 將忽略使其從一個(gè)遠(yuǎn)程系統(tǒng)傳送日志信息到另一個(gè)系統(tǒng)的/etc/syslog.conf 輸入項(xiàng)退唠。
4) klogd 守護(hù)進(jìn)程
klogd 守護(hù)進(jìn)程獲得并記錄 Linux 內(nèi)核信息。通常荤胁,syslogd 會(huì)記錄 klogd 傳來的所有信息瞧预,然而,如果調(diào)用帶有 -f filename 變量的 klogd 時(shí)仅政,klogd 就在 filename 中記錄所有信息松蒜,而不是傳給 syslogd。當(dāng)指定另外一個(gè)文件進(jìn)行日志記錄時(shí)已旧,klogd 就向該文件中寫入所有級(jí)別或優(yōu)先權(quán)。Klogd 中沒有和 /etc/syslog.conf 類似的配置文件召娜。使用 klogd 而避免使用 syslogd 的好處在于可以查找大量錯(cuò)誤运褪。如果有人入侵了內(nèi)核,使用 klogd 可以修改錯(cuò)誤玖瘸。
5) 其他日志
在 /var/log 和不同版本的系統(tǒng)中以及自己配置的應(yīng)用程序中都可以找到其他日志文件秸讹。當(dāng)然,/etc/syslog.conf 列出了由 syslogd 管理的所有日志文件名和位置雅倒。其他日志由其他應(yīng)用程序管理璃诀。例如在 Redhat6.2 中,apache server 生成 /var/log/htmlaccess.log 文件記錄客戶訪問蔑匣,生成 /var/log/httpd/error.log 文件在 syslog 以外查找錯(cuò)誤劣欢。
cron 工具維護(hù)的信息日志文件 /var/log/cron棕诵。當(dāng) Linuxconf 工具記錄系統(tǒng)重新配置信息時(shí),將生成日志文件如 /var/log/nerconf.log凿将。samba 在 /var/log/samba 中維護(hù)其日志信息校套。
另外由于 syslogd 在系統(tǒng)非常繁忙時(shí),可能會(huì)丟失信息牧抵,所以笛匙,可以用 cyclog 替換 syslog。