`
cloudeagle_bupt
  • 浏览: 533859 次
文章分类
社区版块
存档分类
最新评论

Linux系统下查看已经登录用户并踢出的方法

 
阅读更多

转自:http://www.cnblogs.com/my-blog/archive/2009/02/01/1381947.html

LINUX是个多用户系统,一旦连接到网络中,它可以同时为多个登录用户提供服务。系统管理员可以随时了解系统中有那些用户,用户都在进行什么操作。

查看用户的操作

系统管理员若想知道某一时刻用户的行为,只需要输入命令W 即可,在SHELL终端中输入如下命令:

[ROOT@LOCALHOST ROOT] # W
                        2:31PM UP 11 DAY ,21:18 4 USERS, LODE AVERAGE : 0.12, 0.09 , 0.08
                        USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
                        ROOT TTY1 - 09:21AM 3:23 0.13S 0.08S -BASH
                        GEORGE TTY2 - 09:40AM 18:00S 0.12S 0.00S TELNET
                        HELLO TTY6 - 11:12AM 34.00S 0.06S 0.O6S BASH
                        MARRY PTS/1 192.0.3.1102:40PM 5.20S 0.09S 0.03S FTP

可以看到执行W命令及显示结果。

命令信息含义

上述显示的信息分别表示如下:

第一行显示系统的汇总信息,字段分别表示系统当前时间、系统运行时间、登陆哟内用户总数及系统平均负载信息。对于上述势力中的几个显示数据意义为:

2:13PM 表示执行W的时间是在下午2点31分。

11DAYS,81:18 表示系统运行11天零21小时18分。

4 USERS 表示当前系统登陆用户总数为4。

LOAD AVERAGE 与后面的数字一起表示系统在过去1,5,10分钟内的负载程度,数值越小,系统负载越轻。

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

USER:显示登陆用户帐号名。用户重复登陆,该帐号也会重复出现。

TTY:用户登陆所用的终端。

FROM:显示用户在何处登陆系统。

LOGIN@:是LOGIN AT的意思,表示登陆进入系统的时间。

IDLE:用户空闲时间,从用户上一次任务结束后,开会记时。

JCPU:一终端代号来区分,表示在摸段时间内,所有与该终端相关的进程任务所耗费的CPU时间。

PCPU:指WHAT域的任务执行后耗费的CPU时间。

WHAT:表示当前执行的任务。

查看某用户

当登陆系统用户很多的时候,可以在W后面加上某个用户名,则会查看该用户执行任务的情况。

〔root@localost root〕#w heiio2:31pm up 11 days,21:18
                        4 users, load average : 0.00, 0.00, 0.00
                        USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
                        Hello tty6 11:12am 34.00s 0.06s 0.06s bash

默认情况下,系统会显示上述所有的信息,如果只关心某一方面,可以只使用相关的选项。

查看登陆用户

同样,系统管理员若想知道某一时刻登陆的用户,可以使用系统提供的WEB命令,该命令可以查看当前登陆到系统的用户及其他信息:

[ROOT@LOCAL ROOT]#who
                        root tty1 - 09:21am
                        reorge tty2 - 09:40am
                        hello tty6 - 11:12am
                        marry pts/1 :0 02:40pm

可以看出上述信息与W命令非常相似。如果想让列表更详细一些,可以加上选项-HIT等,就可以得到该用户是否愿意接受其他用户信息(-T)还可以显示空闲时间(-I)及标题栏(-H)。如果某各用户愿意接受信息,会在MESG栏中显示一个“+”,这是还可以使用命令MESG给用户发从信息。

查看登陆用户历史

系统管理员若想知道系统中用户登陆的历史行为,还可以察看用户曾经登陆到系统。使用LAST命令可以查询曾经登陆用户的信息:

ROOT TTY1 09:21AM MON FRI 10 11:15 STILL LOGGED IN
                        GEORGE TYY2 09:40AM MON FRI 11 11:18 -DOWN
                        HELLO TTY6 11:12AM MON FRI 12 9:47 -DOWN
                        MARRY PTS/1 192.0.3.11 02:40PM FRI 17 12:56 -DOWN
                        ……
                        WTMP BEGINS FRI DEC 5 12:53:55 2003

使用LAST 命令时,列出的文件内容会非常多,根本看不清楚。此时可以使用前面介绍的管理方式来观看,例如/LAST/ LESS,则可以查看前后内容。同查看用户情况一样,想查看那某个用户的登陆情况,也可以在LAST命令后加上用户名,则系统只会显示该用户登陆系统情况。

[root@localhost root]# last george
                        george tty2 - 09:40am mon fri 11 11.18 -down
                        ………….
                        Wtem begins fri dec 5 12:53;55 2003

执行last命令其实是显示/var/log/目录下的wtmp文件内容。Wtmp文件是以二进制格式进行存储的,如

果直接使用文本编辑器查看,查看的会是一堆乱码。

上述转自:http://tech.ccidnet.com/art/302/20061121/956303_1.html

自注:Linux踢出已登录用户的方法

# pkill -KILL -t pts/0 (pts/0为w指令看到的用户终端号)


$ who //显示当前登陆用户
13:15:06 up 1:25, 2 users, load average: 0.01, 0.01, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
jjony pts/0 xxx.xxx.xxx.xxx 00:10 0.00s 0.03s 0.01s w
root pts/1 xxx.xxx.xxx.xxx 00:20 1:25 0.34s 0.34s -bash

pkill -KILL -t pts/0 可将jjony强制踢出



众所周知,Linux是一个多用户的操作系统。如下图,在同一个时刻内可以有多个用户同时登陆到Linux系统中,甚至同一个用户都可以多次同时进行登陆。但是有时候系统管理员也会发现一些不听话的用户。如这些用户可能在进行一些未经授权的访问或者占用了太多的资源。此时系统管理员需要把他们剔除出系统。这该怎么做呢?如现在笔者有一台Linux的服务器,现在正有两个用户连接在操作系统上。(笔者现在是利用同一台电脑不同的帐户名进行登陆,故后者显示的IP地址是相同的。)种种迹象表明,现在Oracle用户正在进行一些非法的勾当。为了安全考虑,笔者要马上把这个用户踢出Linux服务器,中断其与Linux服务器之间的连接。笔者下面就一步步的跟对大家介绍,该如何实现这个目的。

  第一步:利用who命令,找出用户登录的终端代号。

  如果系统管理员要把某个用户踢出操作系统,首先需要了解这个用户是通过什么方式等到到这个操作系统的,即要掌握用户登录的终端代号。用户以不同的形式登陆到Linux操作系统,其终端代号是不同的。TTY1-TTY6分别代表本机上的1到6号的虚拟主控台。PTS表示用户是通过远程登陆的。如果数字为:0则表示用户从XWindow登录系统。如果系统管理员需要知道某个用户是通过什么方式登陆到Linux操作系统的,则可以通过who命令来查询。如上面的示意图中,第二个字段就是用户登录操作系统的方式i。这里PTS表示oracle这个用户是通过远程登录的。如可能是通过ssh协议登陆到 Linux操作系统的。掌握这个信息是把用户踢出操作系统的关键。

  另外如果系统当前登陆的用户比较多,执行who命令列出所有数据会让系统管理员眼花缭乱。如果系统管理员知道要踢出操作系统的用户名,则可以使用who 用户名的方式来显示某个特定用户的信息。如果系统管理员不知道用户的具体名字,而只是模糊的记得这个用户可能是o开头的,则还可以利用通配符来实现模糊查询。另外如果只需要查询用户的终端代号信息,还可以在who命令后面加入具体的参数。

  有时候可能管理员还需要使用who的一个同胞兄弟 w命令。这个命令提供的信息要比who命令详细一点。特别是其中有一个pcpu与what参数可以给管理员到底需不需要把这个用户踢出操作系统提供一些参考。What参数反映了用户正在运行的程序。如果用户正在执行某个程序,则这里会显示出这个程序的名字;如果正在执行一般的文字模式命令,则这里会显示用户环境名称。Pcpu反映了CPU执行程序耗费的时间。这个时间就是执行What字段内的程序所消耗的时间。所以这些信息能够帮助管理员判断,这个用户到底是否存做一些非法行为或者在执行一些耗费操作系统资源的程序。同时,还可以从个结果中分析一下如果强制把用户踢出操作系统的话可能会给其带来什么样的损失。如果系统管理员铁了心要把这个用户踢出去的话,则可以直接利用who命令查找用户的终端代号即可。反正是两个命令都可以查询到用户的终端代码。第二步:利用PS命令,找出程序标示符PID最小的值。

  找到某个用户的终端代号之后,管理员需要使用ps命令找出该终端正在执行的程序中,程序标识符PID编号最小的值。因为PID编号最小的值对应的应用程序,就是这个用户登录系统时所执行的第一个程序。通常情况下这个就是用户的工作环境shell。

  为此要把用户踢出Linux操作系统之前,管理员还需要了解shell的主要功能。Shell的功能在于搭起用户与操作系统间的沟通桥梁,提供基本的操作界面。系统管理员可以通过shell下达各种指令,在系统中进行维护操作,产生彼此间互动的关系。简单的说shell就是一种人机交换的工具。Shell主要负责用户和操作系统两者之间的交互。即shell会把用户下达的命令解释给系统去执行,并将系统返回的信息再次进行解释,然后传递给用户让用户了解系统内核要反映的内容。Shell对Linux系统很重要,大部分功能都只有依靠shell才能够完成。如shell可以实现工作控制,可以在前台与后台进行切换操作,并且显示有哪些工作正在后台执行。总之一句话,如果没有shell的话,用户将无法跟系统内核与系统硬件进行对话。所以管理员之需要强制把这个shell关掉,就可以将这个用户踢出Linux操作系统。

如果系统管理员要关掉某个进程的话,则可以通过使用kill PID的方式来关闭shell进程。不过前提是系统管理员需要知道这个用户所采用shell的进程号。要知道这个信息的话,管理员可以采用ps aus | grep pts/0命令来查询。在返回的接过中,PID编号最小的值就是oracle 用户当前所采用的SHELL 的PID号。这里ps aux命令会列出系统中正在执行的所有程序。如果程序比较多的话,那么看起来就会眼花缭乱,难以一下子找到合适的值。故在这里还需要结合grep命令来使用,可以事半功倍。grep pts/0 这两个参数就好像是一个过滤器,它会找出oracle用户(pts/0是第一步找出来的oracle用户的终端代号,它与系统登陆用户一一对应)当前所有的运行程序,并且按PID号从小到大进行排序。而因为用户一登陆操作系统,其第一个开启的程序就是shell。故显示在最前面的就是oracle用户所采用shell的pid号。系统管理员找到这个PID号之后,就可以利用kill命令来杀死shell进程了。第三步:利用kill命令把用户踢出Linux操作系统。

  以上两步都完成之后,就是万事俱别,只欠东风了。接下去,系统管理员就可以通过kill命令来把用户从系统中踢出去。不过这个踢也有好几种踢法,系统管理员可以先采取比较柔和的方法。如果柔和的方法不管用的话,则采用强制的措施。这么管理起来比较人性化一点。

  通常情况下,笔者建议先利用kill 命令加上要删除的shell程序的pid号。如果用户的所运行的其他进程不怎么顽固的话,通常可以正常关闭shell程序。这是一种相对温和的方式,它可以把对用户oracle正在执行的运行的文件所造成的负面影响降低到最低。这个跟Windows操作系统注销的功能差不多。如过用户已经打开的文件还没有保存的话,则系统会保存这些文件的副本等等。故下次这个用户重新登陆后,不会丢失大量的数据。

  不过同Windows系统一样,有时候注销个好半天都无法注销成功。所以kill命令有时候也无法顺利删除某些程序。此时管理员就需要采用其他的一些手段,如在Kill命令中加入一些参数来关闭shell进程。笔者建立当无法通过kill加PID进程号的方式关闭shell环境的话,那么就可以通过Kill -15的方式来关闭。这会强制删除shell 进程。这个就好像Windows系统下的重新启动命令一样。在遇到操作系统问题时,他比系统注销要强硬一点。但是他的破坏作用也比较大。故需要谨慎使用。不过话说回来,如果真的要强制把某个用户踢出系统的话,此时通过以上两种方式来关闭用户的shell进程往往不起作用。否则说,很难再短时间内操作成功。

  故大部分情况下,系统管理员最好还是需要使用Kill-9命令来删除shell进程。如系统管理员可以使用kill -9 pid这个命令来强制关闭某个用户的 shell,从而终端用户与系统的连接。不过虽然说在大部分情况下系统管理员还是需要采用这个最后的强制措施,不过为了系统的稳定性考虑,笔者还是建议先采用第一、二个比较柔和的方式看看。只有在以上两个方式都不管用的情况下,再采用Kill-9命令。而不要一下子就采用kill -9这个极端方式。


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics