[技术交流分享]审计跟踪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时间, 一个单元的大小为1K

. 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操作系统.

无兄弟 不编程

时间: 2024-11-09 01:24:21

[技术交流分享]审计跟踪Linux的异常活动的相关文章

[技术交流分享]LInux增加swap分区

以下命令均需在root帐号下操作 dd if=/dev/zero of=/home/swap bs=1024 count=512000 这样就会创建/home/swap这么一个分区文件.文件的大小是512000个block,一般情况下1个block为1K,所以这里空间是512M. 接着再把这个分区变成swap分区. /sbin/mkswap /home/swap 再接着使用这个swap分区.使其成为有效状态. /sbin/swapon /home/swap 现在再用free -m命令查看一下内存

linux性能异常定位之进程级别

[前言] 本文和大家分享:linux系统下常见得性能异常,怎样定位到进程级别.说简单点,就是:linux性能出问题了,我们需要确定哪些进程影响了linux的性能. 本文主要涉及的linux的常见的性能维度:cpu,内存,io,网络 [涉及工具] top:综合,偏cpu,内存 dstat:综合.磁盘 iostat:磁盘io,全局 iotop:磁盘io,精确到进程,(类似工具还有pidstat) iftop:网络.实时刷新(类似工具还有nload,ifstat) nethogs:进程级别的流量 ss

分享在Linux下使用OSGi.NET插件框架快速实现一个分布式服务集群的方法

在这篇文章我分享了如何使用分层与模块化的方法来设计一个分布式服务集群.这个分布式服务集群是基于DynamicProxy.WCF和OSGi.NET插件框架实现的.我将从设计思路.目标和实现三方面来描述. 1 设计思路 首先,我来说明一下设计思路.我们先来看看目前OSGi.NET插件框架的服务.在这里,服务不是远程服务,它是轻量级的服务,由接口和实现类组成,如下图所示.服务契约插件定义了服务接口,服务实现插件向服务总线注册服务,服务调用插件利用服务契约(接口)从服务总线获取实现的服务并调用,服务实现

Linux 日志异常tpvmlpd[4966]: device type not supported

1. 虚拟机vmware下linux message日志异常信息如下: ...... Nov 25 19:33:17 rac1 tpvmlpd[4415]: device type not supportedNov 25 19:33:32 rac1 tpvmlpd[4521]: device type not supportedNov 25 19:33:47 rac1 tpvmlpd[4681]: device type not supportedNov 25 19:34:02 rac1 tpv

分享Kali Linux 2017年第30周镜像文件

分享Kali Linux 2017年第30周镜像文件 Kali Linux官方于7月23日发布2017年的第30周镜像.这次维持了11个镜像文件的规模.默认的Gnome桌面的4个镜像,E17.KDE.LXDE.MATE.XFCE桌面的各一个,手机版的包括ARMEL和ARMHF.有最近要安装Kali Linux系统的,可以考虑下载.因为这样可以节省升级包所花费的时间.下载安装时候,建议64位电脑使用kali-linux-2017-W30-amd64.iso,32位电脑使用kali-linux-20

【分享】Linux(Ubuntu)下如何自己编译JDK

最近在看<深入理解 Java 虚拟机>这本书.里面提到了如何手动编译JDK,于是就试了试. 在编译的过程中,遇到了一些问题.上网一搜,发现了一篇很好的文章,跟大家分享一下:ubuntu 13.04环境编译OpenJDK7 虽然文章里说的编译环境是 13.04 ,但笔者在 14.04 的环境下,参考着文章也能成功编译. [分享]Linux(Ubuntu)下如何自己编译JDK

分享Kali Linux 2017年第31周镜像文件

 分享Kali Linux 2017年第31周镜像文件  Kali Linux官方于7月30日发布2017年的第31周镜像.这次维持了11个镜像文件的规模.默认的Gnome桌面的4个镜像,E17.KDE.LXDE.MATE.XFCE桌面的各一个,手机版的包括ARMEL和ARMHF.有最近要安装Kali Linux系统的,可以考虑下载.因为这样可以节省升级包所花费的时间.下载安装时候,建议64位电脑使用kali-linux-2017-W31-amd64.iso,32位电脑使用kali-linux-

分享Kali Linux 2016.2第46周虚拟机

分享Kali Linux 2016.2第46周虚拟机 该虚拟机使用Kali Linux 2016.2第46周的64位镜像安装.桌面为Gnome模式.该虚拟机配置如下: (1)支持VMWare 9以上的版本.(2)虚拟机Kali系统,内存默认为2GB,单CPU双核,50GB硬盘.(3)已经安装虚拟化增强工具open-vm-tools,请大家不要重复安装.(4)已经安装小企鹅中文输入法.(5)默认账户为root,密码为daxueba.(6)配置的软件源为国内的清华大学源,如果有需要可以删掉,修改为K

分享Kali Linux 2016.2最新镜像201609

分享Kali Linux 2016.2最新镜像20160919 Kali Linux官方继9月9日发布Kali Linux 2016.2的第36周镜像W36后,9月19日发布了Kali Linux 2016.2的第37周镜像W37和第38周镜像W38.由于遵循只发布最新的镜像原则,官方觉得发布第37周镜像W37有点多此一举,所以在下午又删除了.这也造就了寿命最短时间的Kali Linux镜像. 由于删除太快,我只下到了Gnome的32位和64位镜像.有兴趣的,可以收藏一下.此次分享就是W37不完