企業級Linux系統下的進程安全管理方法
在企業級的Linux應用中,進程是整個計算機系統的一個主體,它需要通過一定的安全等級來對客體(包括系統中的文件、數據、設備等)發生作用。進程在一定條件下可以對諸如文件、數據庫等客體進行操作。如果進程用作其他不法用途,將給系統帶來重大危害。在當前形形色色的面向Linux系統的攻擊中,許多網絡黑客都是通過種植“木馬”的辦法來達到破壞計算機系統和入侵的目的,而這些“木馬”程序無一例外的是需要通過進程這一方式在系統中運行才能發揮作用的。
作為服務器中占絕大多數市場份額的Linux系統,要切實保證計算機系統的安全,我們必須對其進程進行安全管理。
Linux進程管理的方法主要包括:(1)確定并綜合分析系統中當前運行進程的狀態及信息,包括內存、CPU、執行用戶身份、進程ID等,以確定其是否合法以及狀態是否正常;(2)事先限制進程所占用的系統資源,如文件系統資源和派生進程數目等,以合理控制進程的運行狀況。下面將對這些手段進行詳細介紹。
一、管理手段一:使用基本命令進行進程查看
傳統的方法可以通過Linux系統的一些基本命令進行Linux系統的進程查看和分析。Linux系統提供了who、w、ps和top等察看進程信息的系統調用,安全工作者可以通過結合使用這些系統調用,清晰地了解進程的運行狀態以及存活情況,從而采取相應的措施,來確保Linux系統的安全。
其中,who命令主要用于查看當前在線上的用戶情況。系統管理員可以使用who命令監視每個登錄的用戶此時此刻的所作所為;w命令也用于顯示登錄到系統的用戶情況,但是與who不同的是,w命令功能更加強大,它不但可以顯示有誰登錄到系統,還可以顯示出這些用戶當前正在進行的工作,w命令是who命令的一個增強版;ps和top命令則是最基本同時也是非常強大的進程查看命令。使用這些命令可以動態和靜態地確定有哪些進程正在運行和運行的狀態、進程是否結束、進程有沒有僵死、哪些進程占用了過多的資源等等。
舉個例子,黑客在入侵系統后通過植入一些系統本沒有的非法進程來留作“后門”,以達到下次使用該系統資源或者利用該系統作為“肉雞”發動拒絕服務等來攻擊其他目標主機的目的,而我們就可以結合上述命令來找出異常進程。
二、管理手段二:使用進程文件系統進行管理
管理手段一中所使用的命令行方式對Linux系統中的進程管理比較粗略和不全面,如果要進行全面地管理,可以借助進程文件系統(即PROC文件系統)來獲取系統中運行進程所占用的內存、CPU、中斷、命令行等情況,以輔助安全管理員進行惡意進程的發現和排查。
PROC文件系統是一個虛擬的文件系統,通過文件系統的接口實現,用于輸出系統的運行狀態。它以文件系統的形式,為操作系統本身和應用進程之間的通信提供了一個界面,使應用程序能夠安全、方便地獲得系統當前的運行狀況和內核的內部數據信息,并可以修改某些系統的配置信息。另外,由于PROC以文件系統的接口實現,因此用戶可以像訪問普通文件一樣對其進行訪問,但它只存在于內存之中,并不存在于真正的物理磁盤當中。所以,當系統重啟和電源關閉的時候,該系統中的數據和信息將全部消失。
表1說明了該文件系統中一些重要的文件和目錄。
表1重要的PROC文件系統文件和目錄
下面舉個簡單的例子,說明安全管理員如何來全面查看系統中一個運行進程的相關信息。
(1)進程的基本信息都會存放在/proc文件系統中,具體位置是在/proc目錄下。通過使用如下命令可以查看系統中運行進程的相關信息,如圖1所示,其中顯示為系統中運行進程的信息所存放的目錄,每個進程對應一個目錄,3193為例子使用的進程的詳細信息所在目錄:
圖1/ls/proc命令顯示結果
(2)切換到3193目錄,以方便詳細的查看進程信息,并列出進程詳細的狀態信息文件,如圖2所示:
圖2進程3193信息所在目錄
(3)在這些文件當中,status這個狀態文件是比較重要的,包含了很多關于進程的有用的信息,用戶可以從這個文件獲得信息,如下所示:
其中,比較重要的字段詳細含義如下:
Name:scientific_comp//進程名
State:R(running)//進程運行狀態
Tgid:3193//進程組ID
Pid:3193//進程ID
PPid:3123//父進程ID
TracerPid:0//跟蹤調試進程ID
Uid:6004600460046004//進程所對應程序的UID
Gid:6004600460046004//進程所對應程序的GID
FDSize:256//進程使用文件句柄大小
Groups:6004//組信息
這樣,安全管理員就可以通過進程名、進程ID、父進程ID、UID、GID等信息來綜合判定系統中進程的合法狀態,以捕捉非法進程,并進行后續處理。
三、管理手段三:限制進程使用的資源
在系統使用過程中,一些用戶編寫的進程可能無意識地創建一些大型的文件或者派生(fork)過多地進程,從而過度消耗系統資源,引起系統的不穩定。同時,一些病毒也可能有派生多個進程的行為出現,如臭名昭著的“震蕩波”病毒。這些都使得我們有必要來限制進程使用的資源,保證系統安全。
為了防止進程或者其子進程創建大型文件,可以使用ulimit命令來進行限制,具體的命令使用ulimit–f后接以K字節為單位指定的最大文件尺寸。圖3舉出了一個具體的例子加以說明。在該例子中,首先采用ulimit命令限制當前shell進程可以創建的文件大小;然后,采用yes命令不斷寫入大量的字符串到test.txt文件中,該文件大小超過了ulimit命令許可的范圍,結果系統提示文件超過了大小,并終止了yes命令的不斷寫入過程。從后面使用ls命令來查看test.txt文件的大小來看,ulimit命令很好地將該文件大小限制在20KB的范圍之內。
圖3ulimit命令使用示意
在實際的使用過程中,用戶可以降低自身的限制值,但是不能增加限制值。并且,只有root用戶才能在/etc/profile文件中增加ulimit選項的設置。因此,圖4中所示的增加自身限制值大小的操作是被禁止的;反之,圖5種所示的root用戶的操作就是允許的(請讀者注意圖4和圖5中使用不同的用戶進行操作)。
圖4不允許非root用戶增加ulimit值
圖5允許root用戶增加ulimit值
另外,值得注意的是:雖然能夠采用ulimit值來限制進程創建文件的大小,但是該機制并不能保證用戶創建多個相同大小的文件。比如,ulimit的限制值是20KB,那么該機制只能限制進程創建的單個文件大小不能超過20KB,而不能限制進程創建10個甚至100個20KB大小的文件。
Ulimit命令還可以用來限制單個用戶(父進程)所能調用的最大子進程個數,以避免某個父進程由于無所限制的創建子進程而造成整個系統崩潰。
圖6給出了一個使用ulimit命令限制子進程無限調用的例子。首先,使用腳本編輯來自動生成進程;然后,使用ulimit命令來限制父進程調用的最大子進程個數為8。最后,可以看到當創建到第9個時,系統報錯并阻斷子進程的再度調用。
圖6使用ulimit限制單個用戶調用的最大進程個數
【編輯推薦】