眾所周知,Linux是一個多用戶的操作系統(tǒng)。如下圖,在同一個時刻內可以有多個用戶同時登陸到Linux系統(tǒng)中,甚至同一個用戶都可以多次同時進行登陸。但是有時候系統(tǒng)管理員也會發(fā)現一些不聽話的用戶。如這些用戶可能在進行一些未經授權的訪問或者占用了太多的資源。此時系統(tǒng)管理員需要把他們剔除出系統(tǒng)。這該怎么做呢?
如現在筆者有一臺Linux的服務器,現在正有兩個用戶連接在操作系統(tǒng)上。(筆者現在是利用同一臺電腦不同的帳戶名進行登陸,故后者顯示的IP地址是相同的。)種種跡象表明,現在Oracle用戶正在進行一些非法的勾當。為了安全考慮,筆者要馬上把這個用戶踢出Linux服務器,中斷其與Linux服務器之間的連接。筆者下面就一步步的跟對大家介紹,該如何實現這個目的。
第一步:利用who命令,找出用戶登錄的終端代號。
如果系統(tǒng)管理員要把某個用戶踢出操作系統(tǒng),首先需要了解這個用戶是通過什么方式等到到這個操作系統(tǒng)的,即要掌握用戶登錄的終端代號。用戶以不同的形式登陸到Linux操作系統(tǒng),其終端代號是不同的。TTY1-TTY6分別代表本機上的1到6號的虛擬主控臺。PTS表示用戶是通過遠程登陸的。如果數字為:0則表示用戶從XWindow登錄系統(tǒng)。如果系統(tǒng)管理員需要知道某個用戶是通過什么方式登陸到Linux操作系統(tǒng)的,則可以通過who命令來查詢。如上面的示意圖中,第二個字段就是用戶登錄操作系統(tǒng)的方式i。這里PTS表示oracle這個用戶是通過遠程登錄的。如可能是通過ssh協議登陸到Linux操作系統(tǒng)的。掌握這個信息是把用戶踢出操作系統(tǒng)的關鍵。
另外如果系統(tǒng)當前登陸的用戶比較多,執(zhí)行who命令列出所有數據會讓系統(tǒng)管理員眼花繚亂。如果系統(tǒng)管理員知道要踢出操作系統(tǒng)的用戶名,則可以使用who 用戶名的方式來顯示某個特定用戶的信息。如果系統(tǒng)管理員不知道用戶的具體名字,而只是模糊的記得這個用戶可能是o開頭的,則還可以利用通配符來實現模糊查詢。另外如果只需要查詢用戶的終端代號信息,還可以在who命令后面加入具體的參數。
有時候可能管理員還需要使用who的一個同胞兄弟w命令。這個命令提供的信息要比who命令詳細一點。特別是其中有一個pcpu與what參數可以給管理員到底需不需要把這個用戶踢出操作系統(tǒng)提供一些參考。What參數反映了用戶正在運行的程序。如果用戶正在執(zhí)行某個程序,則這里會顯示出這個程序的名字;如果正在執(zhí)行一般的文字模式命令,則這里會顯示用戶環(huán)境名稱。Pcpu反映了CPU執(zhí)行程序耗費的時間。這個時間就是執(zhí)行What字段內的程序所消耗的時間。所以這些信息能夠幫助管理員判斷,這個用戶到底是否存做一些非法行為或者在執(zhí)行一些耗費操作系統(tǒng)資源的程序。同時,還可以從個結果中分析一下如果強制把用戶踢出操作系統(tǒng)的話可能會給其帶來什么樣的損失。如果系統(tǒng)管理員鐵了心要把這個用戶踢出去的話,則可以直接利用who命令查找用戶的終端代號即可。反正是兩個命令都可以查詢到用戶的終端代碼。
第二步:利用PS命令,找出程序標示符PID最小的值。
找到某個用戶的終端代號之后,管理員需要使用ps命令找出該終端正在執(zhí)行的程序中,程序標識符PID編號最小的值。因為PID編號最小的值對應的應用程序,就是這個用戶登錄系統(tǒng)時所執(zhí)行的第一個程序。通常情況下這個就是用戶的工作環(huán)境shell。
為此要把用戶踢出Linux操作系統(tǒng)之前,管理員還需要了解shell的主要功能。Shell的功能在于搭起用戶與操作系統(tǒng)間的溝通橋梁,提供基本的操作界面。系統(tǒng)管理員可以通過shell下達各種指令,在系統(tǒng)中進行維護操作,產生彼此間互動的關系。簡單的說shell就是一種人機交換的工具。Shell主要負責用戶和操作系統(tǒng)兩者之間的交互。即shell會把用戶下達的命令解釋給系統(tǒng)去執(zhí)行,并將系統(tǒng)返回的信息再次進行解釋,然后傳遞給用戶讓用戶了解系統(tǒng)內核要反映的內容。Shell對Linux系統(tǒng)很重要,大部分功能都只有依靠shell才能夠完成。如shell可以實現工作控制,可以在前臺與后臺進行切換操作,并且顯示有哪些工作正在后臺執(zhí)行??傊痪湓?,如果沒有shell的話,用戶將無法跟系統(tǒng)內核與系統(tǒng)硬件進行對話。所以管理員之需要強制把這個shell關掉,就可以將這個用戶踢出Linux操作系統(tǒng)。
如果系統(tǒng)管理員要關掉某個進程的話,則可以通過使用kill PID的方式來關閉shell進程。不過前提是系統(tǒng)管理員需要知道這個用戶所采用shell的進程號。要知道這個信息的話,管理員可以采用ps aus | grep pts/0命令來查詢。在返回的接過中,PID編號最小的值就是oracle 用戶當前所采用的SHELL 的PID號。這里ps aux命令會列出系統(tǒng)中正在執(zhí)行的所有程序。如果程序比較多的話,那么看起來就會眼花繚亂,難以一下子找到合適的值。故在這里還需要結合grep命令來使用,可以事半功倍。grep pts/0 這兩個參數就好像是一個過濾器,它會找出oracle用戶(pts/0是第一步找出來的oracle用戶的終端代號,它與系統(tǒng)登陸用戶一一對應)當前所有的運行程序,并且按PID號從小到大進行排序。而因為用戶一登陸操作系統(tǒng),其第一個開啟的程序就是shell。故顯示在最前面的就是oracle用戶所采用shell的pid號。系統(tǒng)管理員找到這個PID號之后,就可以利用kill命令來殺死shell進程了。
第三步:利用kill命令把用戶踢出Linux操作系統(tǒng)。
以上兩步都完成之后,就是萬事俱別,只欠東風了。接下去,系統(tǒng)管理員就可以通過kill命令來把用戶從系統(tǒng)中踢出去。不過這個踢也有好幾種踢法,系統(tǒng)管理員可以先采取比較柔和的方法。如果柔和的方法不管用的話,則采用強制的措施。這么管理起來比較人性化一點。
通常情況下,筆者建議先利用kill 命令加上要刪除的shell程序的pid號。如果用戶的所運行的其他進程不怎么頑固的話,通常可以正常關閉shell程序。這是一種相對溫和的方式,它可以把對用戶oracle正在執(zhí)行的運行的文件所造成的負面影響降低到最低。這個跟Windows操作系統(tǒng)注銷的功能差不多。如過用戶已經打開的文件還沒有保存的話,則系統(tǒng)會保存這些文件的副本等等。故下次這個用戶重新登陸后,不會丟失大量的數據。
不過同Windows系統(tǒng)一樣,有時候注銷個好半天都無法注銷成功。所以kill命令有時候也無法順利刪除某些程序。此時管理員就需要采用其他的一些手段,如在Kill命令中加入一些參數來關閉shell進程。筆者建立當無法通過kill加PID進程號的方式關閉shell環(huán)境的話,那么就可以通過Kill -15的方式來關閉。這會強制刪除shell 進程。這個就好像Windows系統(tǒng)下的重新啟動命令一樣。在遇到操作系統(tǒng)問題時,他比系統(tǒng)注銷要強硬一點。但是他的破壞作用也比較大。故需要謹慎使用。不過話說回來,如果真的要強制把某個用戶踢出系統(tǒng)的話,此時通過以上兩種方式來關閉用戶的shell進程往往不起作用。否則說,很難再短時間內操作成功。
故大部分情況下,系統(tǒng)管理員最好還是需要使用Kill-9命令來刪除shell進程。如系統(tǒng)管理員可以使用kill -9 pid這個命令來強制關閉某個用戶的 shell,從而終端用戶與系統(tǒng)的連接。不過雖然說在大部分情況下系統(tǒng)管理員還是需要采用這個最后的強制措施,不過為了系統(tǒng)的穩(wěn)定性考慮,筆者還是建議先采用第一、二個比較柔和的方式看看。只有在以上兩個方式都不管用的情況下,再采用Kill-9命令。而不要一下子就采用kill -9這個極端方式。
關鍵詞標簽:Linux
相關閱讀
熱門文章 安裝紅帽子RedHat Linux9.0操作系統(tǒng)教程 Tomcat9.0如何安裝_Tomcat9.0環(huán)境變量配置方法 多種操作系統(tǒng)NTP客戶端配置 Linux操作系統(tǒng)修改IP
人氣排行 Linux下獲取CPUID、硬盤序列號與MAC地址 dmidecode命令查看內存型號 linux tc實現ip流量限制 安裝紅帽子RedHat Linux9.0操作系統(tǒng)教程 linux下解壓rar文件 lcx.exe、nc.exe、sc.exe入侵中的使用方法 Ubuntu linux 關機、重啟、注銷 命令 查看linux服務器硬盤IO讀寫負載