系统记帐主要非为两类 连接记账和进程记账:
主要涉及到的命令:last、lastlog、w、who、ac、sa、lastcomm
1) 连接记帐
连接记帐是跟踪当前用户当前对话、用户登录和退出的活动。在 Linux 系统中使用 utmp (动态用户对话)和 wtmp (登录/退出日志记录)工具来完成这一记帐过程。Wtmp 工具同时维护重新引导和系统状态变化信息。各种程序对这些工具进行刷新和维护,因此无须进行特殊的后台进程或程序。然而,utmp 和 wtmp 输出结果文件必须存在,如果这些文件不存在会关闭连接记帐。与 utmp 和 wtmp 有关的所有数据将分别保存在 /var/run/utmp 和 /var/log/wtmp 中。这些文件归根用户所有。这些文件中的数据是用户不可读的,但也有工具可以转换成可读的形式。
dump-utmp 可以转换连接记帐数据为可读的 ASCII 格式数据。
ac 命令提供了有关用户连接的大概统计,我们可以使用带有标志 d 和 p 的 ac 命令。标志 d 显示了一天的总连接统计,标志 p 显示了每一个用户的连接时间。这种统计信息的方式对了解与探测入侵有关的用户情况及其他活动很有帮助。Last 和 who 是出于安全角度定期使用的最常用命令。
last 命令提供每一个用户的登录时间,退出登录时间,登录位置,重新引导系统及运行级别变化的信息。last -10 表示 last 的最多输出结果为最近的 10 条信息。缺省时 last 将列出在 /var/log/wtmp 中记录的每一连接和运行级别的变化。从安全角度考虑,last 命令提供了迅速查看特定系统连接活动的一种方式。观察每天的输出结果是个好习惯,从中可以捕获异常输入项。Last 命令的 -x 选项可以通知系统运行级别的变化。
who 命令主要作用是报告目前正在登录的用户、登录设备、远程登录主机名或使用的 Xwindows 的 X 显示值、会话闲置时间以及会话是否接受 write 或 talk 信息。
例如: who -iwH 的输出结果:
USER MESG LINE LOGIN-TIME IDLE FROM
Denny - tty1 Feb 18 08:42 old
这就表示用户 Denny 不能接受 write 或 talk 信息,2月18日8:42 从 tty1 登录。该命令的安全值提供了用户连接的大致情况,这也为监视可疑活动提供了条件。 其他的有关命令有 lastlog 命令,该命令报告了有关 /var/log/lastlog 中记录的最后一次登录的数据信息。
Linux连接记账主要涉及文件utmp、wtmp、lastlog、messages
1、有关当前登录用户的信息记录在文件utmp(/var/run/utmp)中;======who命令
2、登录进入和退出纪录在文件utmp中(/var/run/utmp);========w命令
3、最后一次登录文件可以用lastlog命令察看(/var/log/lastlog)=======lastlog命令;
4、记录每个用户的登录次数和持续时间等信息(/var/log/wtmp)=======last命令
5、messages======从syslog中记录信息
注意:wtmp和utmp文件都是二进制文件,他们不能被诸如tail命令剪贴或合并(使用cat命令)。用户
需要使用who、w、users、last和ac来使用这两个文件包含的信息。
例子:
last命令往回搜索wtmp来显示自从文件第一次创建以来登录过的用户
users用单独的一行打印出当前登录的用户,每个显示的用户名对应一个登录会话
w命令查询utmp文件并显示当前系统中每个用户和它所运行的进程信息
who命令查询utmp文件并报告当前登录的每个用户
ac命令根据当前的/var/log/wtmp文件中的登录进入和退出来报告用户连结的时间(小时)
utmp文件,它记录当前登录进系统的各个用户;
lastlog
lastlog 只是读出 /var/log/lastlog 内的信息(二进制)
该日志文件记录最近成功登录的事件和最后一次不成功的登录事件,由login生成。
在每次用户登录时被查询,该文件是二进制文件,需要使用lastlog命令查看,根据UID排序显示登录名、端口号和上次登录时间。
wtmp记录了所有用户以往登录的信息,lastlog记录了他们最后一次登录的信息
包含下列结构的一个二进制记录写入这两个文件中:
struct utmp {
char ut_line[8]; /* tty line: "ttyh0", "ttyd0", "ttyp0", ... */
char ut_name[8]; /* login name */
long ut_time; /* seconds since Epoch */
};
登录时,login程序填写这样一个结构,然后将其写入到utmp文件中,同时也将其添写到wtmp文件中。
注销时,init进程将utmp文件中相应的记录擦除(每个字节都填以0),并将一个新记录添写到wtmp文件中。
wted
wtmp/utmp日志编辑程序。你可以使用这个工具编辑所有wtmp或者utmp类型的文件。
z2
utmp/wtmp/lastlog日志清理工具。可以删除utmp/wtmp/lastlog日志文件中有关某个用户名的所有条目。
2、进程记帐
进程记帐来记录用户的活动, 你可以通过进程记帐查看每一个用户执行的命令, 包括CPU时间和内存占用.
psacct程序提供了几个进程活动监视工具: ac, lastcomm, accton和sa.
ac命令显示用户连接时间的统计.
lastcomm命令显示系统执行的命令.
accton命令用于打开或关闭进程记帐功能.
sa命令统计系统进程记帐的情况.
默认rhel已经安装psacct,但没有启动
查看是否已安装
chkconfig --list | grep psacct
指定启动级别
chkconfig psacct on
启动
/etc/init.d/psacct start
默认启动脚本 /etc/init.d/psacct
里面指定psact文件位置为 ACCTFILE=/var/account/pacct
ac
命令可以根据登陆数/退出数在屏幕上打印出用户的连线时间(单位为小时). 总计时间也可以打印出来.
如果你执行没有任何参数的ac命令, 屏幕将会显示总计的连线时间:
例1、ac
图1 ac
例2、
显示每一天的连线统计时间:
ac -d
图2 ac -d
例3、
显示每一个用户的总计连线时间和所有用户总计连线时间:
ac -p
图3 ac -p
sa
统计记帐信息 sa
你可以使用sa命令打印过去执行命令的统计信息. 另外, sa命令保存了一个叫做savacct文件, 文件包含了命令被调用的次数和资源使用的次数.
而且sa还提供每一个用户的统计信息, 这些信息保存在一个叫做usracct的文件当中.
用法:sa [选项]... [文件]...
主要选项如下。
— -a:打印所有命令的名称(包括那些带有不可打印字符的)。
— -b:将输出按用户和系统时间的总和除以调用次数来进行分类。否则,输出为用户时间和系统时间之和。
— -c:将每个命令使用时间打印为相对于所有命令使用时间的百分比。此外,还有用户、系统和实时。
— -C:将记账文件合并到摘要文件中。如果摘要文件为旧用法,则将它转换为新用法。
— -d:将输出按平均磁盘I/O操作数进行分类。
— -D:将输出按总的磁盘I/O操作数进行分类和打印。
— -f:不要强制进行交互式阈值压缩。此标志必须与-v标志一起使用。
— -I:仅读取原始数据,不读取摘要文件。
— -j:打印每个调用的秒数,而不是每个类别的总的分钟数。
— -k:将输出按平均CPU时间进行分类。
— -K:将输出按CPU存储量整数进行分类和打印。
— -l:将系统时间和用户时间分离,而不是组合它们。
— -m:打印每个用户的进程数和CPU分钟数。
— -n:按调用数对输出进行分类。
— -r:将分类的顺序倒置。
— -s:将记账文件合并到摘要文件中。
— -t:打印每个命令的用时与用户和系统时间和之比。
— -u:暂挂所有其他标志并且打印每个命令的用户数字标识和命令名
与sa命令一起使用的标志改变报告信息的类型。报告可以包含以下字段。
— avio:每次执行的平均I/O操作次数。
— cp:用户和系统时间总和,以分钟计。
— cpu:和cp一样。
— k:内核使用的平均CPU时间,以1k为单位。
— k*sec:CPU存储完整性,以1k-core秒为单位。
— re:实时时间,以分钟计。
— s:系统时间,以分钟计。
— tio:I/O操作的总数。
— u:用户时间,以分钟计。
如果不指定任何标志而运行sa命令,摘要报告将包含每个命令的调用次数,以及re,cpu,avio和k字段。
例1、
sa
图4 sa
calls – 命令的调用次数。
记帐设备收集的信息:
re – 实际使用时间(单位为分钟)。
cpu – 通常简写为 cp,表示用户和系统时间之和(单位为分钟)。
k – 平均 CPU 时间(单元的大小为1K)。
u – 用户 CPU 时间(单位为分钟)。
s – 系统 CPU 时间(单位为分钟)。
command – 调用的命令。
例2、
统计每一个用户的进程数量和CPU时间数
sa -m
图5 sa -m
例3、
统计每一个用户
sa -u
图6 sa -u
lastcomm
查找用户过去执行的命令 lastcomm
你可以使用lastcomm命令打印出用户过去执行的命令. 你也可以通过用户名, tty名或命令名来搜索以往执行的命令
例1、
lastcomm
图7 lastcomm
例2、
通过用户名作为关键字来搜索进程记帐日志
lastcomm peter
图8 lastcomm peter
例3、
通过终端名pts/1作为关键字来搜索进程记帐日志
lastcomm pts/1
图9 lastcomm pts/1
例4、
通过命令来搜索进程记帐日志
lastcomm mkdir
图10 lastcomm mkdir