您如何将良性用户踢出您的系统?

xen*_*ide 74 users administration

我之前在谷歌上搜索过这个并注意到了几种方法,但我猜谷歌并不知道所有。那么如何将用户踢出你的 Linux 机器呢?另外,您如何才能看到他们首先登录?和相关的......如果用户登录到 X11 DE(不是我只是好奇的要求),你的方法是否有效?

Mic*_*zek 164

可能有更简单的方法,但我这样做:

  1. 查看谁登录了您的机器——使用whow

    > who  
    mmrozek  tty1         Aug 17 10:03  
    mmrozek  pts/3        Aug 17 10:09 (:pts/2:S.0)
    
    Run Code Online (Sandbox Code Playgroud)
  2. 查找其 TTY 连接到的 shell 的进程 ID:

    > ps t  
    PID   TTY      STAT   TIME COMMAND  
    30737 pts/3    Ss     0:00 zsh
    
    Run Code Online (Sandbox Code Playgroud)
  3. 嘲笑他们即将断开连接(这一步是可选的,但鼓励)

    > echo "HAHAHAHAHAHAHAHA" | write mmrozek pts/3
    
    Run Code Online (Sandbox Code Playgroud)
  4. 杀死相应的进程:

    > kill -9 30737
    
    Run Code Online (Sandbox Code Playgroud)

我刚刚发现,你可以通过给合并步骤1和2who-u标志; PID 是右边的数字:

> who -u
mmrozek  tty1         Aug 17 10:03 09:01        9250
mmrozek  pts/18       Aug 17 10:09 01:46       19467 (:pts/2:S.0)
Run Code Online (Sandbox Code Playgroud)

  • +1 表示“嘲笑他们即将断开连接(此步骤是可选的,但值得鼓励)” (72认同)
  • @Jander 您正在将用户踢出系统;你需要多好? (13认同)
  • `kill -9`,嗯?你真的在这个模式中处于 BOFH 模式。 (10认同)
  • 通常,我会说 [不要鼓励人们滥用 `kill -9`](http://unix.stackexchange.com/q/8916/9537),以及 [从更温和的信号开始](http:// stackoverflow.com/q/690415/855954)代替,但我想在这种情况下它并不重要。我只是发表评论以防人们错过这个笑话。 (6认同)
  • 还有 [slay](http://manpages.debian.net/cgi-bin/man.cgi?query=slay&apropos=0&sektion=0&manpath=Debian+6.0+squeeze&format=html&locale=en) 基本上自动化了整个过程(如果您启用对接模式,甚至可以取笑您的受害者) (5认同)
  • kill 向进程发送信号,-9 表示“kill”信号。您可以使用“man kill”或 http://unixhelp.ed.ac.uk/CGI/man-cgi?kill 查看所有信号的列表 - +1 表示邪恶的笑声 :-) (3认同)

sep*_*p2k 36

正如 Micheal 已经指出的,您可以使用who来找出谁登录了。但是,如果他们有多个进程,则有一种比单独杀死每个进程更方便的方法:您可以使用killall -u username来杀死该用户的所有进程。

  • 警告:如果您将它用于 root 用户,您将终止所有 root 进程,您将需要物理重新启动服务器。 (3认同)

And*_*w B 24

死灵法术!

我很欣赏接受的答案的幽默,但从专业上讲,我不能提倡它。

我所知道的最优雅的方法是向 shell 发送一个 -HUP 来模拟用户挂断。您可以将其发送到用户的空闲 sshd 以模拟他们的连接丢失,这会触发整个 shell 环境(包括子 shell)的清理,或将其发送到特定的嵌套 shell(例如,在断开连接的终端多路复用器中设置的那些阻止你卸载文件系统)如果你想非常精确。

不过write,在启动它们之前使用向终端空闲 pty 发送消息一个有趣的爱好。

  • 为了使这个答案明确,我所做的是:`echo "Hasta la vista, baby" | 写 user_name pty_name && sleep 30 && killall -u user_name -HUP`(睡眠让用户有机会保存和注销,但你可能只对忘记注销的用户使用它) (4认同)

小智 13

注销用户“用户名”:

skill -KILL -u username
Run Code Online (Sandbox Code Playgroud)

man skill

  • 我认为这将杀死该用户的*所有*进程,而不仅仅是他们的shell,但如果这是您想要的,那么这绝对更简单 (3认同)

Mac*_*tka 11

其他有用的命令在pkill这里pkill -u username && pkill -9 -u usernamekillall缺点是在 Solaris IIRC 上它意味着完全不同的东西 - 也pkill有稍微更高级的选项。

  • 在 Solaris 上,关闭脚本使用“killall”来杀死(几乎)服务器上的所有进程。“它做它在罐头上所说的。” (8认同)