zoukankan      html  css  js  c++  java
  • Linux下如何知道是否有人在使坏?

    在 Linux 下查看用户的行为,不仅仅是网管要做的事,也是开发人员所应该具备的基本技能之一。为什么呢?因为有时其他同事在做一些很消耗资源的事情,比如在编译大型程序,可能会导致服务器变得很慢,从而影响我们的正常操作。这个时候,我们就可以通过本文所介绍的方法,揪出那个同事,将他暴打一顿,就可以恢复服务器的正常使用了。

    我是谁?

    「我是谁?我从哪里来?我要去哪里?」哲学经典三大问题。同样,在工作中,有时候我们会经常进行账号切换,有时切着都忘了切到哪个用户了。这时,需要知道当前登录的用户是啥。我们可以用 whoami 来进行查看。

    [alvin@VM_0_16_centos ~]$ whoami
    alvin
    

    目前都有谁登录到系统里?

    一个公司里通常只有少数几台服务器,程序猿们一般都在这几台服务器里工作。我们可以用 who 命令来查看当前登录到服务器的用户有哪一些。

    [alvin@VM_0_16_centos ~]$ who
    alvin    pts/0        2018-12-09 07:25 (116.199.***.***)
    root     pts/1        2018-12-09 11:05 (116.199.***.***)
    alvin    pts/2        2018-12-09 11:05 (116.199.***.***)
    harry    pts/3        2018-12-09 11:06 (116.199.***.***)
    kate     pts/4        2018-12-09 11:08 (116.199.***.***)
    alvin    pts/5        2018-12-09 11:53 (116.199.***.***)
    

    在显示结果里,第一列是用户名;第二列是连接的终端,tty 表示显示器,pts 表示远程连接;第三列是登陆时间。

    这里信息稍微多一些,但如果我们只想知道谁在线要怎么操作?只需用 users 命令来查看即可。

    [alvin@VM_0_16_centos ~]$ users
    alvin alvin alvin harry kate root
    

    那些登录到系统里的人都在干什么?

    知道了谁登录到系统里,我们就可以进一步调查他们在做什么。w 命令用于显示已经登录系统的用户的名称,以及他们正在做的事。该命令所使用的信息来源于/var/run/utmp文件。

    [alvin@VM_0_16_centos ~]$ w
     16:25:54 up 29 days,  6:05,  6 users,  load average: 0.00, 0.01, 0.05
    USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
    alvin    pts/0    116.199.***.**   07:25    2.00s  0.11s  0.00s w
    root     pts/1    116.199.***.**   11:05    5:20m  0.02s  0.02s -bash
    alvin    pts/2    116.199.***.**   11:05    5:20m  0.04s  0.05s sshd: alvin [priv]
    harry    pts/3    116.199.***.**   11:06    4:33m 18.08s 18.06s watch date
    kate     pts/4    116.199.***.**   11:08    4:33m 10.51s 10.48s top
    alvin    pts/5    116.199.***.**   11:53    4:32m  0.02s  0.02s -bash
    

    第一行其实与 uptime 命令出来的结果一样,依次表示:当前时间、系统运行时间、当前系统登录用户数、平均负载。

    从第二行开始构成一个表格,共有8个栏目,分别显示各个用户正在做的事情及该用户所占用的系统资源。

    USER:显示登陆用户帐号名。用户重复登陆,该帐号也会重复出现。
    TTY:用户登陆所用的终端。
    FROM:显示用户在何处登陆系统。
    LOGIN@:是LOGIN AT的意思,表示登陆进入系统的时间。
    IDLE:用户空闲时间,从用户上一次任务结束后,开始记时。
    JCPU:一终端代号来区分,表示在某段时间内,所有与该终端相关的进程任务所耗费的CPU时间。
    PCPU:指WHAT域的任务执行后耗费的CPU时间。
    WHAT:表示当前执行的任务
    

    如果说我们只想查看某个用户当前的行为,我们可以直接在 w 后跟上该用户名:

    [alvin@VM_0_16_centos ~]$ w alvin
     16:34:21 up 29 days,  6:14,  6 users,  load average: 0.00, 0.01, 0.05
    USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
    alvin    pts/0    116.199.***.**   07:25    5.00s  0.12s  0.06s sshd: alvin [priv]
    alvin    pts/2    116.199.***.**   11:05    5:28m  0.04s  0.05s sshd: alvin [priv]
    alvin    pts/5    116.199.***.**   11:53    4:40m  0.02s  0.02s -bash
    

    如何知道当前与过去登录系统的用户的信息?

    有些人比较狡猾,做了坏事拒不承认。但是,在 Linux 里,每个用户的登录信息都会记录起来,这样查找相关人员的责任就有所依据。

    last命令可用于显示特定用户登录系统的历史记录。如果没有指定任何参数,则显示所有用户的历史信息。在默认情况下,这些信息(所显示的信息)将来源于/var/log/wtmp文件。该命令的输出结果包含以下几列信息:

    • 用户名称
    • tty设备号
    • 历史登录时间日期
    • 登出时间日期
    • 总工作时间
    [alvin@VM_0_16_centos ~]$ last
    alvin    pts/5        116.199.***.**   Sun Dec  9 11:53   still logged in
    kate     pts/4        116.199.***.**   Sun Dec  9 11:08   still logged in
    harry    pts/3        116.199.***.**   Sun Dec  9 11:06   still logged in
    alvin    pts/2        116.199.***.**   Sun Dec  9 11:05   still logged in
    root     pts/1        116.199.***.**   Sun Dec  9 11:05   still logged in
    alvin    pts/0        116.199.***.**   Sun Dec  9 07:25   still logged in
    alvin    pts/0        116.199.***.**   Sat Dec  8 20:42 - 23:10  (02:28)
    alvin    pts/0        119.33.***.**    Mon Dec  3 20:50 - 23:51 (1+03:01)
    alvin    pts/0        119.33.***.**    Thu Nov 29 20:20 - 22:45  (02:24)
    alvin    pts/0        223.104.***.**   Thu Nov 29 06:46 - 07:00  (00:14)
    alvin    pts/0        223.104.***.**   Wed Nov 28 20:45 - 22:27  (01:42)
    alvin    pts/1        14.25.***.***    Sun Nov 25 19:50 - 21:09  (01:18)
    alvin    pts/0        119.33.***.**    Sun Nov 25 16:32 - 21:40  (05:07)
    

    如果我们只想看某个人的历史记录,则在last后跟上对应的用户名即可:

    [alvin@VM_0_16_centos ~]$ last alvin
    alvin    pts/5        116.199.***.**   Sun Dec  9 11:53   still logged in
    alvin    pts/2        116.199.***.**   Sun Dec  9 11:05   still logged in
    alvin    pts/0        116.199.***.**   Sun Dec  9 07:25   still logged in
    alvin    pts/0        116.199.***.**   Sat Dec  8 20:42 - 23:10  (02:28)
    alvin    pts/0        119.33.***.**    Mon Dec  3 20:50 - 23:51 (1+03:01)
    alvin    pts/0        119.33.***.**    Thu Nov 29 20:20 - 22:45  (02:24)
    alvin    pts/0        223.104.***.**   Thu Nov 29 06:46 - 07:00  (00:14)
    alvin    pts/0        223.104.***.**   Wed Nov 28 20:45 - 22:27  (01:42)
    

    踢除使坏人员

    通过以上几个命令,我们可以大概知道某些用户的行为。如果我们想要踢除使坏的人员,可以使用 pkill -u 命令。

    pkill -u alvin
    

    但这个命令相当危险,有可能导致系统重启,所以不推荐使用这个命令。比较安全的做法是使用 pkill 命令。

    [alvin@VM_0_16_centos ~]$ sudo pkill -kill -t pts/3
    #harry用户已经被踢除了
    [alvin@VM_0_16_centos ~]$ w
     17:04:37 up 29 days,  6:44,  5 users,  load average: 0.00, 0.01, 0.05
    USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
    alvin    pts/0    116.199.102.65   07:25    5.00s  0.12s  0.00s w
    root     pts/1    116.199.102.65   11:05    5:59m  0.02s  0.02s -bash
    alvin    pts/2    116.199.102.65   11:05    5:59m  0.04s  0.05s sshd: alvin [priv]
    kate     pts/4    116.199.102.65   11:08    5:12m 11.94s 11.91s top
    alvin    pts/5    116.199.102.65   11:53    5:10m  0.02s  0.02s -bash
    

    公众号:良许Linux

    有收获?希望老铁们来个三连击,给更多的人看到这篇文章

  • 相关阅读:
    LeetCode 32. 最长有效括号(Longest Valid Parentheses)
    LeetCode 141. 环形链表(Linked List Cycle)
    LeetCode 160. 相交链表(Intersection of Two Linked Lists)
    LeetCode 112. 路径总和(Path Sum)
    LeetCode 124. 二叉树中的最大路径和(Binary Tree Maximum Path Sum)
    LightGBM新特性总结
    sql service 事务与锁
    C#泛型实例详解
    C# 中的委托和事件(详解)
    C# DateTime日期格式化
  • 原文地址:https://www.cnblogs.com/yychuyu/p/13584720.html
Copyright © 2011-2022 走看看