审计跟踪Linux的用户活动

来源: 作者:lucklily
  

 

 

一些异常用户试图移去系统上的所有活动记录(比如 ~/.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

  输出:

  [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

  [/code]

  每一行信息都在屏幕上打印出来, 我们以第一行输出项为例:

  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

  [/code]

  你可以通过终端名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

  [/code]

  以结果输出的第一行为例:

  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 *

  [/code]

  上面了显示了每一个用户的进程数量和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

  [/code]

 

  6). 找出谁在占用CPU

  你可以通过查看re, k, cp/cpu(见上面输出解释)时间来找出可疑的活动, 或某个用户/命令占用了所有的CPU时间. 如果CPU/Memeory使用数(命令)在不断增加, 可以说明命令存在问题.

  另外上面的所有命令和软件包也可以在其它的Unix类操作系统平台上运行, 比如Solaris和*BSD操作系统.


时间:2010-03-16 23:04 来源: 作者:lucklily 原文链接

好文,顶一下
(1)
100%
文章真差,踩一下
(0)
0%
------分隔线----------------------------


把开源带在你的身边-精美linux小纪念品
无觅相关文章插件,快速提升流量