Shell脚本:实时监控用户操作

2011年04月14日 Linux服务器 评论 21 条 阅读 20,527 views 次

引言

 

群里面有个朋友提了这样的两个问题,
1、如何看到系统中的用户什么时间对密码进行了修改
2、如何知道某个用户,什么时间登录过系统,什么时间退出系统,在这段时间做了哪些操作。
第一个脚本是写出来了,但是通过history来监控的,可是这个history又不是实时的,只有在用户退出后才记录内容,而且,这个文件用户可以对其手术,所以不太完美。
关于第二个问题,想不到一个可行的办法,就在网上找资料,无意中发现一个好东东——用scritp可以记录用户的操作,相当于录像一样。是不是很适合我们开头的两个问题的解决方案。于是就有了下面的文章。

分析方案

1、我们要监控用户的情况,当然root用户就排除在外了,毕竟这个是我们自己。
2、系统的用户无需监控
3、所监控的用户操作写入一个日志
4、写入系统中的profile
5、测试效果

shell

实施方案

我们要在系统的profile文件中增加下面的内容,
#记录所有用户的操作记录,排除系统中的用户和root用户
if [ $UID -ge 500 ]; then
exec /usr/bin/script -a -f -q /var/log/$USER-$UID-`date +%Y%m%d%H%M`.log
fi

这样,只要有用户登陆到你的系统,那么系统就会自动对其操作进行记录,用户的任何一个操作都记录到了/var/log/用户名-用户ID-时间.log中了。这个记录文件大家可以自己设置。
关于记录的文件内容,可以用下面三种方法来查看
cat yufei-500-201104141312.log
head -n -1 yufei-500-201104141312.log
tail -n +1 yufei-500-201104141312.log

当然我们可以通过|grep来过滤我们想要的内容
注意:查看上面的LOG,不能用vi more less这三个命令来查看,特别是more和less你什么也看不到。vi看到的里面有很多的乱码。

上面的方式存在一个缺点,就是不能记录到交互的内容(实际上是记录了,只是我们看不到),那么我们可以通过script的scriptreplay对操作进行回放,这样,就对用户的操作一览无遗了。
如果要使用scriptreplay的回放功能,需要跟时间结合,所以需要使用-t进行记录时间。
vi /etc/profile
修改为下面的内容:
if [ $UID -ge 500 ]; then
exec /usr/bin/script -t 2>/var/log/$USER-$UID-`date +%Y%m%d%H%M`.date  -a -f -q /var/log/$USER-$UID-`date +%Y%m%d%H%M`.log
fi

这时候就保存了时间和记录文件,我们就可以通过scriptreplay来查看用户的一举一动了。
scriptreplay的格式是
scriptreplay 时间文件 记录文件

scriptreplay yufei-500-201104141336.date yufei-500-201104141336.log

注:
script和scriptreplay都是由util-linux-ng软件包提供的。

延伸阅读

 

通过这个案例,大家是不是有了这样一个想法,就是我可以通过这个script来实时(script -f)写入一个文件,然后让其他用户都来tail -f这个文件,是不是就达到了一个同步教学的目的了!!哈哈,搞开发的,有兴趣的,可以开发个在线教学系统出来了。然后就可以^-^哈哈,你懂的……
当然,我们也可以把他当作Linux系统下的录像工具,用这个工具录像也是一个不错的选择啊!

最后想说一句
Shell脚本:只有想不到,没有做不到!

21 条留言  访客:11 条  博主:10 条

  1. avatar qianlicao353

    这样会导致runlevel 5 卡在这里,起不来的,有什么解决办法没

    • 不是吧,我测试的一切都正常的啊!!

      • avatar qianlicao353

        改成 if [ $UID -ge 500 ] || [ $UID -eq 0 ] 这样的话,图形界面就起不来了,字符界面起的来,我想记录root用户的操作,没找到解决办法……

  2. avatar qianlicao353

    看不懂吗?就是说id为0(root)或者Id大于500(普通帐号)的帐号都进行记录,但是这样写的话,图形界面就会卡在这里,字符没有问题,我的环境是rhel6.1

  3. avatar qianlicao353

    看不懂吗?就是说id为0(root)或者Id大于500(普通帐号)的帐号都进行记录,但是这样写的话,图形界面就会卡在这里,字符没有问题,我的环境是rhel6.1

  4. avatar kimgshe123

    假如有2个人同时用root帐号登录的系统,怎么区分哪些命令是谁执行的呢

  5. 哈囉,您好
    我的環境是 ubuntu 12.04 server
    我按照了您的設定
    但是我卻沒有在 /var/log 中見到任何記錄訊息
    想請教,是否我哪裡做錯了呢?
    user 登入時,也沒有任何的錯誤,彷彿都是正常的狀態

    • 在复制我上面代码的时候,注意看一下符号是不是英文的,因为之前写的博客,没有注意到这方面的问题!
      麻烦检查看一下!

给我留言

Copyright © 羽飞博客 保留所有权利.   Ality主题 皖ICP备14013844号-1

用户登录