歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> 審計並跟蹤Linux系統的異常活動詳解

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

日期:2017/2/28 17:52:04   编辑: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