進程學習:5- 守護進程

4.2.1 守護進程簡介

進程一般分爲交互進程、批處理進程和守護進程(daemons)三類。值得一提的是守護進程總是活躍的,一般在後臺運行,守護進程一般由系統在開機時通過腳本自動激活啓動或由超級管理用戶root來啓動。比如在Fedora或Redhat中,我們可以定義httpd服務器的啓動腳本的運行級別,此文件位於/etc/init.d目錄下,文件名是httpd,/etc/init.d/httpd 就是httpd服務器的守護程序,當把它的運行級別設置爲3和5時,當系統啓動時,它會跟着啓動。

[root@localhost ~]# chkconfig --level 35 httpd on

由於守護進程是一直運行着的,所以它所處的狀態是等待請求處理任務。例如通常大網站的Apache服務器都在運行,等待着用戶來訪問,也就是等待着任務處理。

4.2.2 查看守護進程的方法

Linux服務器在啓動時需要啓動很多系統服務,它們向本地和網絡用戶提供了Linux的系統功能接口,直接面嚮應用程序和用戶。提供這些服務的程序是由運行在後臺的守護進程來執行的。守護進程是生存期長的一種進程。它們獨立於控制終端並且週期性地執行某種任務或等待處理某些發生的事件。它們常常在系統引導裝入時啓動,在系統關閉時終止。Linux系統有很多守護進程,大多數服務器都是用守護進程實現的。同時,守護進程完成許多系統任務,比如,作業規劃進程crond、打印進程lqd等。有些書籍和資料也把守護進程稱爲”服務”。選擇運行哪些守護進程,要根據具體需求決定。查看系統可以提供的守護進程對應的服務,打開一個終端以root權限運行ntsysv命令出現如圖4-3所示界面。

4.2.4 Linux守護進程工作原理和方式

在C/S模式下,服務器監聽(Listen)在一個特定的端口上等待客戶連接。連接成功後服務器和客戶端通過端口進行數據通信。守護進程的工作就是打開一個端口,並且等待(Listen)進入連接。如果客戶端產生一個連接請求,守護進程就創建(Fork)一個子服務器響應這個連接,而主服務器繼續監聽其他的服務請求。

1.獨立運行的守護進程

獨立運行的守護進程由init腳本負責管理,所有獨立運行的守護進程的腳本在/etc/rc.d/init.d/目錄下。系統服務都是獨立運行的守護進程包括:syslogd和cron等。運行獨立的守護進程工作方式稱爲stand-alone。它UNIX傳統的C/S模式的訪問模式。服務器監聽在一個特點的端口上等待客戶端的連接。如果客戶端產生一個連接請求,守護進程就創建一個子服務器響應這個連接,而主服務器繼續監聽。以保持多個子服務器池等待下一個客戶端請求。stand-alone模式工作原理如圖4-4所示。

這裏寫圖片描述

工作在stand-alone模式下的網絡服務有route、gated。另外是大家最熟悉是Web服務器:Apache和郵件服務器Sendmail、域名服務器Bind。因爲這些負載很大服務器上,預先創子服務器,可以通過客戶的服務速度。在Linux系統中通過stand-alone工作模式啓動的服務由/etc/rc.d/下面對應的運行級別當中的符號鏈接啓動。

2.xinetd模式的守護進程

從守護進程的概念可以看出,對於系統所要通過的每一種服務,都必須運行一個監聽某個端口連接所發生的守護進程,這通常意味着資源浪費。爲了解決這個問題,Linux引進了”網絡守護進程服務程序”的概念。Redhat Linux 9以後版本使用的網絡守護進程是xinted(eXtended InterNET daemon)。和stand-alone模式相比,xinted模式也稱Internet Super-Server(超級服務器)。xinetd能夠同時監聽多個指定的端口,在接受用戶請求時,它能夠根據用戶請求的端口不同,啓動不同的網絡服務進程來處理這些用戶請求。可以把xinetd看做一個管理啓動服務的管理服務器,它決定把一個客戶請求交給那個程序處理,然後啓動相應的守護進程。xinetd模式工作原理如圖4-3所示。

這裏寫圖片描述

和stand-alone工作模式相比,系統不想要每一個網絡服務進程都監聽其服務端口。運行單個xinetd就可以同時監聽所有服務端口,這樣就降低了系統開銷,保護了系統資源。但是當訪問量大、經常出現併發訪問時,xinetd想要頻繁啓動對應的網絡服務進程,反而會導致系統性能下降。查看系統爲Linux服務提供哪種模式方法在Linux命令行可以使用pstree命令,可以看到兩種不同方式啓動的網絡服務。一般來說一些負載高的服務如sendmail、Apache服務是單獨啓動的。而其他服務類型都可以使用xinetd超級服務器管理。查看目前運行的守護進程可以使用命令:”pstree”。

3.三種守護進程管理工具

Redhat 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”(如圖4-6所示)。

這裏寫圖片描述

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的工作界面如圖4-3所示。使用上下箭頭來上下查看列表。使用空格鍵來選擇或取消選擇服務,或按”確定”和”取消”按鈕。要在服務列表和”確定”、”取消”按鈕間切換,使用Tab鍵。*標明某服務被設爲啓動。按F1鍵會彈出每項服務的簡短描述。

(3)chkconfig

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

chkconfig --level 345 nfs off

4.合理選擇守護進程規避安全隱患

運行不必要或有漏洞的守護進程會給操作系統帶來安全和性能上的影響。對於系統安全來說,操作系統中的任何一個漏洞,都可能使整個系統受到攻擊。所以,增加系統安全性的最佳辦法就是儘量監視系統的功能。文章開始介紹了重要的守護進程,其中”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是運行新聞組服務的進程,如果用戶不做新聞組服務器,應該關掉。

發佈了51 篇原創文章 · 獲贊 27 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章