审计跟踪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 to tal 0.52
显示每一个用户的总计连线时间和所有用户总计连线时间:
$ ac -p
输出:
vivek 87.49
root 7.63
total 95.11
4). 查找用户过去执行的命令
你可以使用lastcomm命令打印出用户过去执行的命令. 你也可以通过用户名, tty名或命令名来搜索以往执行的命令.
比如显示vivek用户过去执行的命令:
$ lastcomm vivek
输出:
CODE:
-
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
输出:
CODE:
-
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
输出:
CODE:
-
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时间, 一个单元的大小为1K
. up2date 命令名
显示每一个用户:
# sa -u
输出:
CODE:
-
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
输出:
CODE:
-
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操作系统.
没有评论▼