# 2020-10-05 #「Linux」- 强制用户下线

    科技2022-08-13  83

    内容简介

    本文将介绍如何显示已登录系统的用户,以及如何强制已登录用户下线。

    问题描述

    之前有些开发拿到ROOT帐号。现在,要回收ROOT帐号,修改密码,并强制已登录用户下线。如果不强制下线,他们还可以使用ROOT用户继续操作。

    解决办法

    找到用户登录进程,然后结束这些进程即可。

    #1 查看已登录用户

    查看当前用户

    #!/bin/sh ################################################################################ # 显示当前登录的用户的用户名 ################################################################################ whoami # 没有其他选项 ################################################################################ # 显示当前登录的用户的用户名 ################################################################################ id -un

    上述命令是等价的,都显示了当前登录的用户。

    查询已登录用户

    #!/bin/sh ################################################################################ # 显示系统中登录的用户,及正在执行的动作 ################################################################################ w ################################################################################ # 显示当前登录的用户 ################################################################################ who ################################################################################ # 显示当前登录用户(特殊一些) # 没有其他的选项,功能单一。如果用户具有多个进程,则显示多次用户名。 ################################################################################ users

    #2 结束登录用户

    目前还没有发现直接找到用户登录进程的办法。这里我们只能拿到登录系统的用户的TTY或者PTS值,需要通过这些值来查找出进程。

    准确办法

    具体方法如下:

    #!/bin/sh # 在所有的进程中,查找登录进程 ps -dN | grep -E $(who | awk '{printf "%s|", $2}')AAA # 关于「AAA」:因为在拼接正则表达式的时候结尾多了一个「|」,会导致所有的进程都匹配,所以添加了「AAA」字符串。 # 从这些进程中排除当前登录用户的进程 ps -dN | grep -E $(who | awk '{printf "%s|", $2}')AAA | grep -v $$ # 格式化输出,将进程ID显示在一行 ps -dN | grep -E $(who | awk '{printf "%s|", $2}')AAA | grep -v $$ | awk '{printf "%s ", $1}' # 最后结束所有的用户 kill -KILL $(ps -dN | grep -E $(who | awk '{printf "%s|", $2}')AAA | grep -v $$ | awk '{printf "%s ", $1}')

    注意事项: (1)使用$$获取当前进程。这里存在一个问题:在tmux(或者screen程序)中这是不可行的。

    投机取巧

    其实我们面对一般都是SSH帐号:

    #!/bin/sh # 要死大家一起死: kill -KILL $(ps -auxwww | grep -E 'sshd:' | grep -v 'grep' | awk '{printf "%s ", $2}')

    参考文献

     

    K4NZ / 强制用户下线4 Ways to Identify Who is Logged-In on Your Linux SystemForce logout a userHow to get the process ID (PID) of a shell scriptDid you ever face this situation, a lot of terminal connections to your server?List all connected SSH sessions?

     

    Processed: 0.012, SQL: 8