文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

如何评估Linux中的用户活动?

2024-12-11 19:55

关注

【51CTO.com快译】

如果您在管理Linux服务器,最好准备好使用用于检查用户活动的多个命令——用户何时登录及登录频率、属于哪些用户组、耗用多少磁盘空间、运行什么命令、占用多少磁盘空间、是否在阅读邮件等。

本文介绍了可以帮助您了解用户有哪些、他们在如何工作的多个命令。

finger

finger是获取用户个人资料的一个便捷命令。它使您可以查看谁已登录或专注于单个用户,以查看上一次登录、他们从何处登录、闲置时间有多久(自运行命令以来有多久)等。在该命令中, 我们查看用户nemo。

 

  1. $ finger nemo  
  2. Login: nemo Name: Nemo Demo  
  3. Directory: /home/nemo Shell: /bin/bash  
  4. On since Fri Jun 19 12:58 (EDT) on pts/1 from 192.168.0.6  
  5. 7 minutes 47 seconds idle  
  6. New mail received Wed Jun 17 18:31 2020 (EDT)  
  7. Unread since Sat Jun 13 18:03 2020 (EDT)  
  8. No Plan. 

 

我们可以看到nemo的全名、主目录和外壳,还可以看到nemo的最新登录和电子邮件活动。仅在/etc/passwd文件中的全名字段中定义了办公室、办公室电话和家庭电话号码,这些信息才包括在内。比如说:

nemo:x:1001:1001:Nemo Demo,11,540-222-2222,540-333-3333:/home/nemo:/bin/bash).

上面的输出还表明nemo没有“计划”,但这只是意味着该用户没有创建.plan文件、并将一些文本放入其中。这并不罕见。

如果没有参数,finger将以如下所示的格式显示当前登录列表。您可以看到他们何时登录、从哪个IP地址登录、使用中的伪终端(比如pts/1)以及闲置了多久。

 

  1. $ finger  
  2. Login Name Tty Idle Login Time Office Office Phone  
  3. nemo Nemo Demo pts/1 1:24 Jun 19 12:58 (192.168.0.6)  
  4. shs Sandra Henry-Stocker pts/0 Jun 19 12:57 (192.168.0.60 

 

w

w命令也以一份格式清晰的列表显示了目前活动的用户,包括闲置时间、用户最近运行了什么命令。它还在最上面一行显示系统已运行了多久,并提供负载平均数字,表明系统有多忙碌。在这里,系统基本上处于闲置状态。

 

  1. $ w  
  2. 14:23:19 up 1 day, 20:24, 2 users, load average: 0.00, 0.00, 0.00  
  3. USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT  
  4. shs pts/0 192.168.0.6 12:57 0.00s 0.14s 0.01s w  
  5. nemo pts/1 192.168.0.6 12:58 1:24m 0.03s 0.03s -bash 

 

id

如果使用id命令,您可以查看用户的数值ID和用户组ID以及该用户是哪些用户组的成员。这些信息从/etc/passwd文件和/etc/group文件获取而来。没有参数的id报告您帐户的信息。

 

  1. $ id  
  2. uid=1000(shs) gid=1000(shs) groups=1000(shs),4(adm),11(admin),24(cdrom),27(sudo),30(dip),46(plugdev),118(lpadmin),128(sambashare),500(devops)  
  3. $ id nemo  
  4. uid=1001(nemo) gid=1001(nemo) groups=1001(nemo),16(fish)  
  5. auth.log 

 

您可以使用grep之类的命令从/var/log/auth.log文件获取信息。为了使用auth.log数据显示最近登录活动,您可以运行这样的命令:

 

  1. $ grep "New session" /var/log/auth.log | awk '{print $1,$2,$3,$11}' | tail -5  
  2. Jun 17 17:22:38 shs.  
  3. Jun 17 17:58:43 gdm.  
  4. Jun 17 18:09:58 shs.  
  5. Jun 19 12:57:36 shs.  
  6. Jun 19 12:58:44 nemo.  

 

last

last命令可能最擅长查看所有用户或某一个用户的最近登录。记住一点:last首先显示最近的活动,因为这是大多数管理员最感兴趣的信息。

 

  1. last | head -5  
  2. nemo pts/1 192.168.0.6 Fri Jun 19 12:58 still logged in  
  3. shs pts/0 192.168.0.6 Fri Jun 19 12:57 still logged in  
  4. shs pts/0 192.168.0.6 Wed Jun 17 18:10 - 18:42 (00:32)  
  5. reboot system boot 5.4.0-37-generic Wed Jun 17 17:58 still running  
  6. shs pts/2 192.168.0.6 Wed Jun 17 17:22 - 17:57 (00:34)  
  7. last nemo | head -5  
  8. nemo pts/1 192.168.0.6 Fri Jun 19 12:58 - 16:21 (03:22)  
  9. nemo pts/2 192.168.0.6 Sat Jun 13 17:49 - 19:05 (01:16)  
  10. nemo pts/1 192.168.0.6 Thu Jun 4 17:33 - 17:44 (00:10)  
  11. nemo pts/1 192.168.0.19 Mon May 11 19:04 - 19:57 (00:52)  
  12. nemo pts/1 192.168.0.19 Tue May 5 12:46 - 17:49 (05:02)  

 

du

如果针对/home中的每个目录运行,du命令会报告每个用户的主目录在使用多少空间,就像这样:

 

  1. $ sudo du -sk /home/*  
  2. 289 /home/dorothy  
  3. 116 /home/dory  
  4. 88 /home/eel  
  5. 28 /home/gino  
  6. 28 /home/jadep  
  7. 12764 /home/nemo  
  8. 732 /home/shark  
  9. 418046 /home/shs  
  10. 108 /home/tadpole 

 

默认情况下,报告的大小以1024字节为单位。

ps和history

针对当前登录的用户,您始终可以使用ps -ef | grep ^nemo之类的命令,查看用户目前在运行哪些命令和进程。想查看以前运行的命令,可以试着查看用户的历史记录文件(比如.bash_history),不过要注意,用户可以设置帐户,以便某些命令不被捕获到历史记录文件中,他们还可以编辑这些文件,如果选择这么做的话。

统计登录次数

如果您想查看自/var/log/wtmp文件上一次翻转以来每个用户登录的次数,可以使用这样的命令:

 

  1. for USER in `ls /home` 
  2. > do  
  3. > cnt=`last $USER | grep ^$USER | wc -l` # count logins  
  4. > echo $USER: $cnt # show login count  
  5. > done 

 

输出会像是这样:

 

  1. dorothy: 0  
  2. dory: 0  
  3. eel: 8  
  4. gino: 0  
  5. jadep: 102  
  6. nemo: 39  
  7. shark: 50  
  8. shs: 105  
  9. tadpole: 0 

 

如果您想要更多的细节,可以创建一个较复杂的脚本,以便添加另外一些信息,比如登录细节和格式。

 

  1. #!/bin/bash  
  2. sepline="===================="  
  3. for USER in `ls /home`  
  4. do  
  5. len=`echo $USER | awk '{print length($0)}'` # get length of username  
  6. echo $USER  
  7. sep="${sepline:1:$len}" # set separator  
  8. echo $sep # print separator  
  9. cnt=`last $USER | grep ^$USER | wc -l` # count logins  
  10. echo logins: $cnt # show login count  
  11. last $USER | grep ^$USER | head -5 # show most recent logins  
  12. echo  
  13. done 

 

上述脚本将显示的数据限制在最近的五次登录,但是您可以轻松改变。以下是一个用户的数据的格式会什么样:

 

  1. shs  
  2. ===  
  3. logins: 105  
  4. shs pts/0 192.168.0.6 Fri Jun 19 12:57 still logged in  
  5. shs pts/0 192.168.0.6 Wed Jun 17 18:10 - 18:42 (00:32)  
  6. shs pts/2 192.168.0.6 Wed Jun 17 17:22 - 17:57 (00:34)  
  7. shs pts/0 192.168.0.25 Wed Jun 17 17:20 - 17:57 (00:36)  
  8. shs pts/1 192.168.0.6 Wed Jun 17 15:19 - 17:57 (02:38) 

 

检查企图使用sudo的情况

如果您想看看用户中有谁企图使用sudo、而他们本无这项权限,可以运行这样的命令:

 

  1. $ grep "NOT in sudoers" /var/log/auth.log | awk '{print $6}'  
  2. nemo 

 

如果您在无权提升权限的情况下试图使用sudo,而系统发出警告信息“用户名不在sudoers文件中。将报告该事件”,您可能会知道这个日志条目是该报告的精髓。除非管理员竭力寻找sudo使用违规,否则它们不会被人注意。

原文How to assess user activity in Linux,作者:Sandra Henry-Stocker

【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】

来源:Linux中国内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯