[精文推荐] 基于CentOS构建高性能的LAMP平台 [精文推荐] 利用Nginx替代apache实现高性能的Web环境(第二版) [精文推荐] 利用Awstats分析网站日志

[精文推荐] Linux快速入门之命令及课件下载 [精文推荐] LinuxTone命令一句话汇总 [精文推荐] SMTP,POP3命令简介

[精文推荐] Linux下查找漏洞的几种必备工具 [精文推荐] 基于bsd watch监控用户操作记录 [精文推荐] 初次体验:nginx+php+fastcg+xcache+mysql+openx

[精文推荐] 负载均衡完美解决方案---利用LVS+Keepalived 实现高性能高可用负载均衡服务器

欢迎到IT运维专家网提问交流,我们将第一时刻为你解答!同时也希望站内朋友多多分享自己的心得,加强社区互动建设!建立最好的讨论平台!技术源于积累,源于分享!感谢你能分享!

LinuxTone 官方学习交流MSN群: mgroup49073@hotmail.com (欢迎linuxtone站内的朋友加入拒绝闲聊![需要正确回答问题才能加入该群:你是从那个网站得知本群号的?答案:linuxtone ])

返回列表 回复 发帖

基于bsd watch监控用户操作记录

作者: zzxia   http://www.linuxtone.org (IT运维专家网)
欢迎转载,转载请注明出处! http://bbs.linuxtone.org/thread-261-1-1.html

前几日看到bsd下的watch命令,可以用他监控用户的操作记录,感觉非常棒,突发灵感,也闲的无聊,准备利用他监控系统用户什么登陆,登陆后都做了什么,
设想如下:
1,自动监测用户,发现有新用户进来,获取他的tty ,开启watch 去监控
2.用户退出时,监控停止,监控的数据插入数据库
3,通过前台页面,调用watch的监控记录

一,监控端服务器脚本
#cat checklogin.pl
  1. #!/usr/bin/perl
  2. system "killall -9 watch";
  3. open (AA,">/usr/zzxia/log");
  4. @ttl="";
  5. AAA:
  6. @wda=`who`;
  7. for ($i=0;$i<@wda;$i++) {
  8. chomp ($wda[$i]);
  9. @str=split(/\s+/,$wda[$i]);
  10. $datestr=`date '+%Y-%m-%d %T'`;
  11. system "echo 'use userlog;' > /usr/zzxia/$str[1].log1";
  12. system qq ~ echo "INSERT INTO userip6 VALUES('$str[0]','$str[5]','$str[2]-$str[3]-$str[4]','$datestr','">> /usr/zzxia/$str[1].log1~;
  13. chomp ($stty=$str[1]);
  14. print AA "who value $stty\n";
  15. @watchs1=`ps -ax | grep watch | grep -v grep `;
  16. $tta=0;
  17. for ($j=0;$j<@watchs1;$j++){
  18. chomp ($watchs1[$j]);
  19. @watchs=split(/\s+/,$watchs1[$j]);
  20. chomp ($ws=$watchs[5]);
  21. print AA "watch is $ws\n";
  22. if ($stty eq $ws) {
  23. $tta=1;
  24. }
  25. }
  26. if ( $tta==0 ) {
  27. system "/usr/sbin/watch $stty >/usr/zzxia/$stty.log2& ";
  28. $ppid1=`ps -ax | grep $stty | grep -v sshd |grep -v grep `;
  29. @ppid2=split (/\s+/,$ppid1);
  30. chomp ($ppid=$ppid2[0]);
  31. if ($ppid){
  32. print  AA  "ppid is $ppid \n";
  33. push (@ttl,"$stty,$ppid");
  34. }
  35. }
  36. }

  37. @ttl2="";
  38. print AA "ttl is @ttl\n";
  39. for ($l=1;$l<@ttl;$l++) {
  40. @ttls=split(/,/,$ttl[$l]);
  41. chomp ($kpid=$ttls[1]);
  42. chomp ($ktty=$ttls[0]);
  43. $sp=`ps -aux |grep $kpid |grep -v grep`;
  44. if ( !$sp)
  45. {
  46. system "cat /usr/zzxia/$ktty.log1 /usr/zzxia/$ktty.log2>/usr/zzxia/$ktty.log3 ";
  47. system qq~echo "');">>/usr/zzxia/$ktty.log3~;
  48. system "rm /usr/zzxia/$ktty.log1 /usr/zzxia/$ktty.log2 ";
  49. print  AA   "mysql -h 192.168.0.1 -utest -ptest </usr/zzxia/$ktty.log3\n";
  50. `mysql -h 192.168.0.1 -utest -ptest </usr/zzxia/$ktty.log3`;
  51. system "rm /usr/zzxia/$ktty.log3";
  52. }else {
  53. push (@ttl2,"$ktty,$kpid");
  54. }
  55. }
  56. @ttl=@ttl2;
  57. sleep(3);
  58. goto AAA;
复制代码
动行脚本checklogin.pl &  以后台的方式 运行,运行后会在/usr/zzxia/目录下生成以tty开头的临时份件,程序运行状态可查看log文件,

前台界面 可查看附件

[ 本帖最后由 zzxia 于 2008-6-4 14:33 编辑 ]
附件: 您所在的用户组无法下载或查看附件
1

评分次数

  • linuxtone

非常感谢分享这么好的原则作品,做为优秀的系统管理人员应该在日常的生活中尽量去用程序去改善自己的工作负担!本文对系统管理人员编译监控程序提供了一定的思路!期待作者更好的作品,期待linux下也能完成同样的监控工作!大家可以用zzxia 提供的思路编写自己的监控系统,供大家一起学习分享!
LinuxTone.Org IT运维专家(系统服务|集群架构|安全监控|性能优化|程序设计)
最专业的Linux集群架构网,IT运维人员的乐园!  msn:cnseek@msn.com    我是NetSeek!
分享才能进步!帮助他人就是在帮助自己! 共同学习探讨Linux!
怎么样能过web的方式来查看?  好像没有完一样 呵呵  
程序好像还有点问题啊,就是pid不得少于1000  少于1000就运行出错
程序写得比较好的,都去做开发了呀,
是啊  不过运维也有会写程序 的高手啦
学习,顶一下!
呵呵!猪猪,这个你也玩
返回列表
业务合作: gtalk:netseek@linuxtone.org/msn:cnseek@msn.com 本站创建于:2008-5-19