歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux綜合 >> Linux資訊 >> Linux文化

審計並跟蹤Linux系統的異常活動詳解


一些異常用戶試圖移去系統上的所有活動記錄(比如 ~/.bash_history), 不過我們可以使用專門的工具來監視所有用戶執行的命令。推薦你使用進程記帳來記錄用戶的活動, 你可以通過進程記帳查看每一個用戶執行的命令, 包括CPU時間和內存占用。

Psacct程序提供了幾個進程活動監視工具: ac, lastcomm, accton和sa。

◆ac命令顯示用戶連接時間的統計。

◆lastcomm命令顯示系統執行的命令。

◆accton命令用於打開或關閉進程記帳功能。

◆sa命令統計系統進程記帳的情況。

1). 安裝psacct或acct軟件包

如果你使用RHEL, 使用up2date命令:

# up2date psacct

如果你使用CentOS/Fedora Core Linux, 使用yum命令:

$ sudo apt-get install acct

# apt-get install acct

2). 啟動psacct/acct服務

在Ubuntu/Debian Linux系統上, pacct可以自動啟動。(安裝包會在系統上創建一個/var/account/pacct文件)。但是在Red Hat/Fedora Core/Cent OS, 你需要手動啟動psacct服務。敲入下面兩個命令創建/var/account/pacct文件和啟動pacct服務:

# chkconfig psacct on # /etc/init.d/psacct start

如果你使用Suse Linux, 服務的名稱為acct, 敲入下面的命令:

# chkconfig acct on # /etc/init.d/acct start

現在我們可以了解如何利用這些工具來監視用戶的命令和時間。

3). 顯示用戶連線時間的統計信息

命令可以根據登陸數/退出數在屏幕上打印出用戶的連線時間(單位為小時)。總計時間也可以打印出來。如果你執行沒有任何參數的ac命令, 屏幕將會顯示總計的連線時間:

$ ac

輸出:

total 95.08

顯示每一天的連線統計時間:

$ ac -d

輸出:

Nov 1 total 8.65 Nov 2 total 5.70 Nov 3 total 13.43 Nov 4 total 6.24 Nov 5 total 10.70 Nov 6 total 6.70 Nov 7 total 10.30 ..... .. ... Nov 12 total 3.42 Nov 13 total 4.55 Today total 0.52

顯示每一個用戶的總計連線時間和所有用戶總計連線時間:

$ ac -p

輸出:

vivek 87.49 root 7.63 total 95.11

4). 查找用戶過去執行的命令

你可以使用lastcomm命令打印出用戶過去執行的命令。你也可以通過用戶名, tty名或命令名來搜索以往執行的命令。

比如顯示vivek用戶過去執行的命令:

$ lastcomm vivek

輸出:

userhelper S X vivek pts/0 0.00 secs Mon Nov 13 23:58 userhelper S vivek pts/0 0.00 secs Mon Nov 13 23:45 rpmq vivek pts/0 0.01 secs Mon Nov 13 23:45 rpmq vivek pts/0 0.00 secs Mon Nov 13 23:45 rpmq vivek pts/0 0.01 secs Mon Nov 13 23:45 gcc vivek pts/0 0.00 secs Mon Nov 13 23:45 which vivek pts/0 0.00 secs Mon Nov 13 23:44 bash F vivek pts/0 0.00 secs Mon Nov 13 23:44 ls vivek pts/0 0.00 secs Mon Nov 13 23:43 rm vivek pts/0 0.00 secs Mon Nov 13 23:43 vi vivek pts/0 0.00 secs Mon Nov 13 23:43 ping S vivek pts/0 0.00 secs Mon Nov 13 23:42 ping S vivek pts/0 0.00 secs Mon Nov 13 23:42 ping S vivek pts/0 0.00 secs Mon Nov 13 23:42 cat vivek pts/0 0.00 secs Mon Nov 13 23:42 netstat vivek pts/0 0.07 secs Mon Nov 13 23:42 su S vivek pts/0 0.00 secs Mon Nov 13 23:38

每一行信息都在屏幕上打印出來, 我們以第一行輸出項為例:

userhelper S X vivek pts/0 0.00 secs Mon Nov 13 23:58

分析:

userhelper 是進程的命令名。

S和X是標志信息, 由系統記帳程序管理。每一個標志的含義是:

◆S -- 命令由超級用戶執行。

◆F -- 命令由fork產生, 但是沒有exec(執行)。

◆D -- 命令終止並創建一個core文件。

◆X -- 命令被SIGTERM信號終止。

◆vivek是執行命令的用戶名。

◆prts/0 終端名。

◆0.00 secs -- 進程退出時間。

你可以通過執行下面的命令來搜索進程記帳日志:

$ lastcomm rm $ lastcomm passwd

輸出:

rm S root pts/0 0.00 secs Tue Nov 14 00:39 rm S root pts/0 0.00 secs Tue Nov 14 00:39 rm S root pts/0 0.00 secs Tue Nov 14 00:38 rm S root pts/0 0.00 secs Tue Nov 14 00:38 rm S root pts/0 0.00 secs Tue Nov 14 00:36 rm S root pts/0 0.00 secs Tue Nov 14 00:36 rm S root pts/0 0.00 secs Tue Nov 14 00:35 rm S root pts/0 0.00 secs Tue Nov 14 00:35 rm vivek pts/0 0.00 secs Tue Nov 14 00:30 rm vivek pts/1 0.00 secs Tue Nov 14 00:30 rm vivek pts/1 0.00 secs Tue Nov 14 00:29 rm vivek pts/1 0.00 secs Tue Nov 14 00:29

你可以通過終端名pts/1作為關鍵字來搜索進程記帳日志:

$ lastcomm pts/1

5). 統計記帳信息

你可以使用sa命令打印過去執行命令的統計信息。另外, sa命令保存了一個叫做savacct文件, 文件包含了命令被調用的次數和資源使用的次數。而且sa還提供每一個用戶的統計信息, 這些信息保存在一個叫做usracct的文件當中。

# sa

輸出:

579 222.81re 0.16cp 7220k 4 0.36re 0.12cp 31156k up2date 8 0.02re 0.02cp 16976k rpmq 8 0.01re 0.01cp 2148k netstat 11 0.04re 0.00cp 8463k grep 18 100.71re 0.00cp 11111k ***other* 8 0.00re 0.00cp 14500k troff 5 12.32re 0.00cp 10696k smtpd 2 8.46re 0.00cp 13510k bash 8 9.52re 0.00cp 1018k less

以結果輸出的第一行為例:

4 0.36re 0.12cp 31156k up2date

分析:

◆0.36re "實際時間" 單位為分鐘。

◆0.12cp 系統和用戶時間總數(CPU時間, 單位為分鐘)。

◆31156K 核心使用所占的平均CPU時間, 一個單元的大小為1KB。

◆up2date 命令名。

顯示每一個用戶:

# sa -u

輸出:

root 0.00 cpu 595k mem accton root 0.00 cpu 12488k mem initlog root 0.00 cpu 12488k mem initlog root 0.00 cpu 12482k mem touch root 0.00 cpu 13226k mem psacct root 0.00 cpu 595k mem consoletype root 0.00 cpu 13192k mem psacct * root 0.00 cpu 13226k mem psacct root 0.00 cpu 12492k mem chkconfig postfix 0.02 cpu 10696k mem smtpd vivek 0.00 cpu 19328k mem userhelper vivek 0.00 cpu 13018k mem id vivek 0.00 cpu 13460k mem bash * lighttpd 0.00 cpu 48240k mem php *

上面了顯示了每一個用戶的進程數量和CPU時間數

# sa -m

輸出:

667 231.96re 0.17cp 7471k root 544 51.61re 0.16cp 7174k vivek 103 17.43re 0.01cp 8228k postfix 18 162.92re 0.00cp 7529k lighttpd 2 0.00re 0.00cp 48536k

6). 找出誰在占用CPU

你可以通過查看re, k, cp/cpu(見上面輸出解釋)時間來找出可疑的活動, 或某個用戶/命令占用了所有的CPU時間。如果CPU/Memeory使用數(命令)在不斷增加, 可以說明命令存在問題。

另外上面的所有命令和軟件包也可以在其它的Unix類操作系統平台上運行, 比如Solaris和*BSD操作系統。

Copyright © Linux教程網 All Rights Reserved