在應急響應時有時會遇到系統被植入后門,添加啟動項等操作,如果不清楚啟動項的話,可能會被黑客植入一些開機啟動項,無法徹底清除后門程序,所以在這梳理下啟動項的東西
1.操作系統接管硬件以后,首先讀入 /boot 目錄下的內核文件
2.內核文件加載以后,就開始運行第一個程序 /sbin/init,它的作用是初始化系統環境。由於init是第一個運行的程序,它的進程編號(pid)就是1。其他所有進程都從它衍生,都是它的子進程。
3.許多程序需要開機啟動。它們在Windows叫做"服務"(service),在Linux就叫做"守護進程"(daemon)。
init進程的一大任務,就是去運行這些開機啟動的程序。但是,不同的場合需要啟動不同的程序,比如用作服務器時,需要啟動Apache,用作桌面就不需要。Linux允許為不同的場合,分配不同的開機啟動程序,這就叫做"運行級別"(runlevel)。也就是說,啟動時根據"運行級別",確定要運行哪些程序。
Linux預置七種運行級別(0-6)。一般來說,0是關機,1是單用戶模式(也就是維護模式),6是重啟
init進程首先讀取文件 /etc/inittab,它是運行級別的設置文件。如果你打開它,可以看到第一行是這樣的:
inittab文件中的值都是如下格式:
id:runlevel:action:process
id:
id是指入口標識符,他是個字符串,對於getty、mingetty等,需求id和tty的編號相同,否則getty將不能正常工作。
runlevel:
指定runlevel的級別。能指定多個runlevel級別,也能不為runlevel字段指定特定的值。
運行級別決定了系統啟動的絕大部分行為和目的。這個級別從0到6,具有不同的功能。不同的運行級定義如下:
# 0 - 停機(千萬別把initdefault設置為0,否則系統永遠無法啟動)
# 1 - 單用戶模式
# 2 - 多用戶,沒有 NFS
# 3 - 完全多用戶模式(標准的運行級)
# 4 - 系統保留的
# 5 - X11 (x window)
# 6 - 重新啟動
action:
定義了該進程應該運行在何種狀態下,其中action常用的種類有:
wait:切換至某級別運行一次process
respawn:此process終止的話,就重新啟動之 initdefault:設置默認運行級別的,process省略
sysinit:設定系統初始化方式,此處一般指定為:/etc/rc.d/rc.sysinit
process:包含init執行的進程
那么,看inittab的配置,系統運行級別為3,運行級別3有些什么程序呢,系統怎么知道每個級別應該加載哪些程序呢?......回答是每個運行級別在/etc目錄下面,都有一個對應的子目錄,指定要加載的程序。
每個級別都會在在對應的目錄下有對應的啟動文件
上述文件名都是"字母S+兩位數字+程序名"的形式。字母S表示Start,也就是啟動的意思(啟動腳本的運行參數為start),如果這個位置是字母K,就代表Kill(關閉) 后面的兩位數字表示處理順序,數字越小越早處理。
而且我們注意到,上述的文件都是軟鏈文件,真實文件都存放在 /etc/int.d/目錄下面,系統啟動的時候都會加載該目錄下的文件
我們以iptables舉例,對應的軟鏈文件為S08iptables,現在我們用chkconfig改變下啟動狀態
當我們執行 chkconfig --level 3 iptables off 后,iptables狀態變為以K打頭的文件,也就是系統啟動后是要關閉的(在level3運行級別下)
上述說明針對的都是Centos5及以前的版本,在Centos6下不太一樣,在上圖1中,我們看到系統給出的說明中,系統在/etc/inittab中定義完運行級別后,其他的都不生效,而系統的初始化操作都在 /etc/init/*.conf文件中完成,例如系統初始化,是在/etc/init/rc.conf完成,我們查看下該文件
該文件執行了 exec /etc/rc.d/rc $RUNLEVEL命令,我們來看一下/etc/rc.d/rc這個腳本做了什么,腳本較長,簡單理解就是
遍歷 /etc/rc$RUNLEVEL.d/目錄下的腳本文件,以K開頭的就關閉,以S開頭的就啟動,和上面所說的過程是一樣的
綜上,我們在應急的時候需要排查的啟動項有:
/etc/rc.d/rc
/etc/rc
/etc/rc.local
/etc/rc.d/rc.local
/etc/rc.d/rc
/etc/init/*.conf
/etc/rc$runlevel.d/ 該目錄下都是鏈接的可執行文件,也可以自己添加可執行程序
以上目錄都是重點排查的啟動項目
另外一個添加啟動項的地方在 /etc/profile里面,還有 /etc/profile.d/目錄下以sh結尾的文件