一些异常用户试图移去系统上的所有活动记录(比如 ~/.bash_history), 不过我们可以使用专门的工具来监视所有用户执行的命令。推荐你使用进程记帐来记录用户的活动, 你可以通过进程记帐查看每一个用户执行的命令, 包括CPU时间和内存占用。 Psacct程序提供了几个进程活动监视工具: ac, lastcomm, accton和sa。 ◆ac命令显示用户连接时间的统计。 ◆lastcomm命令显示系统执行的命令。 ◆accton命令用于打开或关闭进程记帐功能。 ◆sa命令统计系统进程记帐的情况。 1). 安装psacct或acct软件包 如果你使用RHEL, 使用up2date命令:
如果你使用CentOS/Fedora Core Linux, 使用yum命令:
| $ sudo 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命令, 屏幕将会显示总计的连线时间:
输出:
显示每一天的连线统计时间:
输出:
| Nov 1 total 8.65Nov 2 total 5.70Nov 3 total 13.43Nov 4 total 6.24Nov 5 total 10.70Nov 6 total 6.70Nov 7 total 10.30..........Nov 12 total 3.42Nov 13 total 4.55Today total 0.52 |
显示每一个用户的总计连线时间和所有用户总计连线时间:
输出:
| vivek 87.49root 7.63total 95.11 |
4). 查找用户过去执行的命令 你可以使用lastcomm命令打印出用户过去执行的命令。你也可以通过用户名, tty名或命令名来搜索以往执行的命令。 比如显示vivek用户过去执行的命令:
输出:
| userhelperS X vivekpts/00.00 secs Mon Nov 13 23:58userhelperS vivekpts/00.00 secs Mon Nov 13 23:45rpmqvivekpts/00.01 secs Mon Nov 13 23:45rpmqvivekpts/00.00 secs Mon Nov 13 23:45rpmqvivekpts/00.01 secs Mon Nov 13 23:45gcc vivekpts/00.00 secs Mon Nov 13 23:45which vivekpts/00.00 secs Mon Nov 13 23:44bash Fvivekpts/00.00 secs Mon Nov 13 23:44lsvivekpts/00.00 secs Mon Nov 13 23:43rmvivekpts/00.00 secs Mon Nov 13 23:43vivivekpts/00.00 secs Mon Nov 13 23:43pingS vivekpts/00.00 secs Mon Nov 13 23:42pingS vivekpts/00.00 secs Mon Nov 13 23:42pingS vivekpts/00.00 secs Mon Nov 13 23:42cat vivekpts/00.00 secs Mon Nov 13 23:42netstat vivekpts/00.07 secs Mon Nov 13 23:42suS vivekpts/00.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 |
输出:
| rmS root pts/00.00 secs Tue Nov 14 00:39rmS root pts/00.00 secs Tue Nov 14 00:39rmS root pts/00.00 secs Tue Nov 14 00:38rmS root pts/00.00 secs Tue Nov 14 00:38rmS root pts/00.00 secs Tue Nov 14 00:36rmS root pts/00.00 secs Tue Nov 14 00:36rmS root pts/00.00 secs Tue Nov 14 00:35rmS root pts/00.00 secs Tue Nov 14 00:35rmvivekpts/00.00 secs Tue Nov 14 00:30rmvivekpts/10.00 secs Tue Nov 14 00:30rmvivekpts/10.00 secs Tue Nov 14 00:29rmvivekpts/10.00 secs Tue Nov 14 00:29 |
你可???通过终端名pts/1作为关键字来搜索进程记帐日志:
5). 统计记帐信息 你可以使用sa命令打印过去执行命令的统计信息。另外, sa命令保存了一个叫做savacct文件, 文件包含了命令被调用的次数和资源使用的次数。而且sa还提供每一个用户的统计信息, 这些信息保存在一个叫做usracct的文件当中。
输出:
| 579 222.81re 0.16cp 7220k 4 0.36re 0.12cp31156k up2date 8 0.02re 0.02cp16976k rpmq 8 0.01re 0.01cp 2148k netstat11 0.04re 0.00cp 8463k grep18 100.71re 0.00cp11111k ***other* 8 0.00re 0.00cp14500k troff 512.32re 0.00cp10696k smtpd 2 8.46re 0.00cp13510k bash 8 9.52re 0.00cp 1018k less |
以结果输出的第一行为例:
| 4 0.36re 0.12cp 31156k up2date |
分析: ◆0.36re "实际时间" 单位为分钟。 ◆0.12cp 系统和用户时间总数(CPU时间, 单位为分钟)。 ◆31156K 核心使用所占的平均CPU时间, 一个单元的大小为1KB。 ◆up2date 命令名。 显示每一个用户:
输出:
| root 0.00 cpu595k mem acctonroot 0.00 cpu12488k mem initlogroot 0.00 cpu12488k mem initlogroot 0.00 cpu12482k mem touchroot 0.00 cpu13226k mem psacctroot 0.00 cpu595k mem consoletyperoot 0.00 cpu13192k mem psacct *root 0.00 cpu13226k mem psacctroot 0.00 cpu12492k mem chkconfigpostfix0.02 cpu10696k mem smtpdvivek0.00 cpu19328k mem userhelpervivek0.00 cpu13018k mem idvivek0.00 cpu13460k mem bash *lighttpd 0.00 cpu48240k mem php* |
上面了显示了每一个用户的进程数量和CPU时间数
输出:
| 667 231.96re 0.17cp 7471kroot54451.61re 0.16cp 7174kvivek 10317.43re 0.01cp 8228kpostfix 18 162.92re 0.00cp 7529klighttpd2 0.00re 0.00cp48536k |
6). 找出谁在占用CPU 你可以通过查看re, k, cp/cpu(见上面输出解释)时间来找出可疑的活动, 或某个用户/命令占用了所有的CPU时间。如果CPU/Memeory使用数(命令)在不断增加, 可以说明命令存在问题。 另外上面的所有命令和软件包也可以在其它的Unix类操作系统平台上运行, 比如Solaris和*BSD操作系统。Linux操作系统日志管理的技巧介绍使用PHP脚本修改Linux或Unix系统口令相关资讯 本文评论 查看全部评论 (0)