深入理解Linux作業系統下的守護程式(2)

jss001發表於2009-02-15

二、守護程式工作原理和方式

在 Client/Server模式下。伺服器監聽(Listen)在一個特定的埠上等待客戶連線。連線成功後伺服器和客戶端透過埠進行資料通訊。守護進 程的工作就是開啟一個埠,並且等待(Listen)進入連線。如果客戶端產生一個連線請求,守護程式就建立(Fork)一個子伺服器響應這個連線,而主 伺服器繼續監聽其他的服務請求。

守護程式工作方式:

(1)執行獨立的守護程式

獨 立執行的守護程式由init指令碼負責管理,所有獨立執行的守護程式的指令碼在/etc/rc.d/init.d/目錄下。系統服務都是獨立執行的守護程式包 括:syslogd和cron等。執行獨立的守護程式工作方式稱作:stand-alone。它Unix傳統的C/S模式的訪問模式。伺服器監聽 (Listen)在一個特點的埠上等待客戶端的聯機。如果客戶端產生一個連線請求,守護程式就建立(Fork)一個子伺服器響應這個連線,而主伺服器繼 續監聽。以保持多個子伺服器池等待下一個客戶端請求。工作在stand-alone模式下的網路服務有route、gated。另外是大家最熟悉是Web 伺服器:Apache和郵件伺服器 Sendmail、域名伺服器Bind。因為這些負載很大伺服器上,預先創子伺服器,可以透過客戶的服務速度。在Linux系統中透過stand- alone工作模式啟動的服務由/etc/rc.d/下面對應的執行級別當中的符號連結啟動。

(2)xinetd模式

從 守護程式的概念可以看出,對於系統所要透過的每一種服務,都必須執行一個監聽某個埠連線所發生的守護程式,這通常意味著資源浪費。為了解決這個問 題,Linux引進了“網路守護程式服務程式”的概念。Redhat Linux 9.0使用的網路守護程式是xinted(eXtended InterNET daemon)。和stand-alone模式相比xinted模式也稱 Internet Super-Server(超級伺服器)。xinetd能夠同時監聽多個指定的埠,在接受使用者請求時,他能夠根據使用者請求的埠不同,啟動不同的網路服 務程式來處理這些使用者請求。可以把xinetd看做一個管理啟動服務的管理伺服器,它決定把一個客戶請求交給那個程式處理,然後啟動相應的守護程式。

和 stand-alone工作模式相比,系統不想要每一個網路服務程式都監聽其服務埠。執行單個xinetd就可以同時監聽所有服務埠,這樣就降低了系 統開銷,保護系統資源。但是對於訪問量大、經常出現併發訪問時,xinetd想要頻繁啟動對應的網路服務程式,反而會導致系統效能下降。察看系統為 Linux服務提供那種模式方法在Linux命令列可以使用pstree命令可以看到兩種不同方式啟動的網路服務。一般來說系統一些負載高的服務: sendmail、Apache服務是單獨啟動的。而其他服務型別都可以使用xinetd超級伺服器管理。檢視目前執行的守護程式可以使用命令:

pstree

三、守護程式管理工具

Linux提供了三種不同的守護程式管理工具:redhat-config-services、ntsysv、chkconfig,可以根據具體需要靈活運用。

(1) redhat-config-services

redhat-config-services 是一個一個圖形化應用程式,它顯示了每項服務的描述,以及每項服務是否在引導時啟動(執行級別3、4、 5),並允許你啟動、停止、或重新啟動/etc/rc.d/init.d 中的哪些 SysV 服務,哪些 xinetd 服務。要從桌面啟動服務配置工具,點選皮膚上的「主選單」 => 「系統設定」 => 「伺服器設定」 => 「服務」,或在 shell 提示下,鍵入命令:

redhat-config-services

redhat- config-services列出了 /etc/rc.d/init.d 中的服務和由 xinetd 控制的服務。點選左側列表中的服務名來顯示該服務的簡短描述以及它的服務狀態。如果這個服務不是 xinetd 服務,狀態視窗會顯示該服務目前是否在執行。如果該服務被 xinetd 所控制,狀態視窗會顯示「xinetd 服務」這個短語。要立即啟動、停止、或重新啟動某項服務,從列表中選擇該項服務,然後點選工具欄上的相應按鈕(或從「行動」拉下選單中選擇行動)。如果該 服務是一個 xinetd 服務,行動按鈕會被禁用,因為它們不能被單個地啟動或停止。 如果你透過選擇或取消選擇服務名旁的複選箱來啟用或禁用了 xinetd 服務,你必須從拉下選單中選擇「檔案」 => 「儲存改變」來重新啟動 xinetd,並立即啟用或禁用你所改變的 xinetd 服務。xinetd 還被配置成自動記憶設定。你可以同時啟用或禁用多個 xinetd 服務,在結束後再儲存改變。

(2)ntsysv

ntsysv 工具為啟用或停運服務提供了簡單的介面。你可以使用 ntsysv 來啟動或關閉由 xinetd 管理的服務。你還可以使用 ntsysv 來配置執行級別。按照預設設定,只有當前執行級別會被配置。要配置不同的執行級別,使用 --level 選項來指定一個或多個執行級別。譬如,命令 ntsysv --level 345 配置執行級別3、4、和5。 ntsysv 的工作介面見圖1。使用上下箭頭來上下檢視列表。使用空格鍵來選擇或取消選擇服務,或用來“按”「確定」和「取消」按鈕。要在服務列表和「確定」、「取 消」按鈕中切換,使用 [Tab]鍵。* 標明某服務被設為啟動。[F1] 鍵會彈出每項服務的簡短描述。

(3)chkconfig

chkconfig 命令也可以用來啟用和解除服務。chkconfig --list 命令顯示系統服務列表,以及這些服務在執行級別0到6中已被啟動(on)還是停止(off)。chkconfig 還能用來設定某一服務在某一指定的執行級別內被啟動還是被停運。譬如,要在執行級別3、4、5中停運 nfs 服務,使用下面的命令:

chkconfig --level 345 nfs off

四、合理選擇守護程式規避安全隱患

運 行不必要或有漏洞的守護程式會給作業系統帶來安全和效能上的影響。對於系統安全來說,如果作業系統中的任何一個漏洞,都可能使整個系統受到攻擊。所以,增 加系統安全的最佳辦法就是儘量監視系統的功能。文章開始介紹了重要的守護程式,其中“crond、syslog、keytable、xinetd、 kudzu、iptables”等是需要執行的,echo、echo-udp、daytime、daytime-udp、chargen、chargen -udp主要是做除錯用,普通使用者基本用不到,可以關閉。

r字開頭的守護進 程:rsh、rstatd、rsync、rusersd、rwalld這些命令都是Berkley遠端命令,因為都以字母r開頭,故稱 r*命令。主要使用來使一臺計算機上的某個使用者以相同的帳戶遠端執行另一臺計算機的一個程式。但是,r命令已經被證實存在安全風險。對於確實需要的守護進 程,應該儘量選用最新的版本程式,並增加其安全防範。

另外我們還要合理選擇守護程式例如innd是執行新聞組服務的程式,如果使用者不做Usenet伺服器,應該關掉。

總結:

基於開放原始碼的Linux給使用者提供了這樣一個平臺:可以根據自己的軟、硬體環境,定製自己的Linux守護程式。因此,根據每個使用者不同的應用範圍定製應用環境,可以將Linux系統的安全和效能提升到新的高度。

[@more@]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/18921899/viewspace-1017367/,如需轉載,請註明出處,否則將追究法律責任。

相關文章