70

I When I logged into the machine as root and typed who to see which users are logged in, I found somebody else too logged in as root

devuser   pts/0        2011-11-18 09:55 (xxx.xxx.xxx.xxx)
root      pts/1        2011-11-18 09:56 (xxx.xxx.xxx.xxx)
testuser  pts/2        2011-11-18 14:54 (xxx.xxx.xxx.xxx)
root      pts/3        2011-11-18 14:55 (xxx.xxx.xxx.xxx)

How can I force a root user at pts/3 to logout?

Mithun Sreedharan
  • 1,655
  • 4
  • 17
  • 20
  • 10
    You've got an even bigger issue to resolve. Disable direct root logins, and force your users to use sudo. – Xenoactive Nov 20 '11 at 18:38

3 Answers3

67

You terminate a session by killing its parent process, called the session leader. Find out which process it is with:

ps -dN|grep pts/3
Gaff
  • 18,569
  • 15
  • 57
  • 68
Fabel
  • 1,238
  • 9
  • 17
  • 12
    And then kill that process using `kill -9 ` – Mithun Sreedharan Nov 23 '11 at 05:05
  • 10
    Just `kill ` should be sufficient, right? Please save the `kill -9`s for badly misbehaving processes that don't respond to INT, HUP, or TERM; it's kind of like the difference between shutting down a computer using the OS's menu system vs. pulling the plug on the computer. – TheDudeAbides Jul 25 '18 at 18:59
  • @TheDudeAbides I would try to use -15 for the TERM signal. It works for me. – Torrien Jun 11 '21 at 21:23
39

To kill and logout a user, you can send KILL signal. Type the following command:

# skill -KILL -u vivek

Check these links for more information:

Niranjan Singh
  • 1,893
  • 1
  • 13
  • 20
  • 9
    what if I am logged in as the same user? – Mithun Sreedharan Nov 18 '11 at 10:37
  • these command works for super user.. you must log in as super user.. network operating systems follow this approach for security.. i think those links are also saying same to login as admin.. – Niranjan Singh Nov 18 '11 at 10:44
  • it kicked me out as `sudo su -` too, even though i was root, but i guess i wasn't in the end. going back into the server showed me as the only one. i had 4 instances of myself, i guess I would say. – pjammer Sep 21 '12 at 18:28
  • 5
    @Mithun You can use `-t ` instead of `-u`. – Melebius Jun 03 '14 at 06:42
  • Make sure that the user doesn't have the same UID as the root user or else you'll kick yourself out, too. – Steropes Oct 15 '14 at 00:24
  • @pjammer It's not that you "weren't root after all". Consider what you are doing. You are logging in as user `joe`, this creates a shell process, say it's bash with pid 123. Then you spawn the sudo process which spawns a su process, which spawns a login shell for user root. On that shell you are calling a command that kills all processes belonging to user `joe`, including PID 123 and all it's children: sudo, su, the login shell for root. Once you understand what it is you are doing you'll see it's not possible by definition. Of course, there are alternatives as Melebius pointed out. – GnP Oct 15 '15 at 18:42
  • 5
    The cyberciti link now says "WARNING! These tools are obsolete, unportable and it is here due to historical reasons. Consider using the killall, pkill, and pgrep commands instead as follows." `pkill -KILL -u vivek` works just as well. – EM0 Jul 23 '18 at 12:06
0

Improving a bit Fabel's answer above:

\# *for pid in $(for ptsn in $(w | grep **user_name** | grep pts | awk '{print $2}'); do ps -dN | grep "$ptsn " | awk '{print $1}' ; done); do kill -9 $pid; done*
Pricey
  • 4,632
  • 2
  • 24
  • 32