歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> 把Linux中不聽話的用戶踢出系統

把Linux中不聽話的用戶踢出系統

日期:2017/2/25 10:38:57   编辑:Linux教程
  眾所周知,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這個極端方式。

Copyright © Linux教程網 All Rights Reserved