Linux 服務器在啓動時須要啓動不少系統服務,它們向本地和網絡用戶提供了Linux的系統功能接口,直接面嚮應用程序和用戶。提供這些服務的程序是由運行在後臺的守護進程來執行的。守護進程是生存期長的一種進程。它們獨立於控制終端而且週期性的執行某種任務或等待處理某些發生的事件。他們經常在系統引導裝入時啓動,在系統關閉時終止。linux系統有不少守護進程,大多數服務器都是用守護進程實現的。同時,守護進程完成許多系統任務,好比,做 業規劃進程crond、打印進程lqd等。有些書籍和資料也把守護進程稱做:「服務」。html
守護進程,也就是指daemon和service。 mysql
二 Linux守護進程的分類linux
根據守護進程的啓動和管理方式,能夠分爲獨立啓動守護進程和超級守護進程兩類sql
獨立啓動(stand_alone):該類進程啓動後就常駐內存,因此會一直佔用系統資源。其最大的優勢就是它會一直啓動,當外界有要求時相應速度較快,像httpd等進程;
超級守護進程:系統啓動時由一個統一的守護進程xinet來負責管理一些進程,當相應請求到來時須要經過xinet的轉接才能夠喚醒被xinet管理的進程。這種進程的優勢時最初只有xinet這一守護進程佔有系統資源,其餘的內部服務並不一直佔有系統資源,只有數據包到來時纔會被xinet管理員來喚醒。而且咱們還能夠經過xinet來對它所管理的進程設置一些訪問權限,至關於多了一層管理機制。shell
若是用兩個比喻來形容兩類守護進程的話通常會用銀行的業務處理窗口來類比:
獨立啓動:銀行裏有一種單服務的窗口,像取錢,存錢等窗口,這些窗口邊上始終會坐着一我的,若是有人來取錢或存錢,能夠直接到相應的窗口去辦理,這個處理單一服務的始終存在的人就是獨立啓動的守護進程;安全
超級守護進程:銀行裏還有一種窗口,提供綜合服務,像匯款,轉帳,提款等業務;這種窗口附近也始終坐着一我的(xinet),她可能不提供具體的服務,提供具體服務的人在裏面閒着聊天啊,喝茶啊,可是當有人來匯款時他會大聲喊一句,小王,有人匯款啦,而後裏面管匯款的小王會立馬跑過來幫忙辦完匯款業務。其餘的人繼續聊天,喝茶。這些負責具體業務的人咱們就稱之爲超級守護進程。固然可能匯款人會有一些規則,可能不能往北京匯款,他就會提前告訴xinet,因此若是有人來匯款想匯往北京的話,管理員就直接告訴他這個咱們這裏辦不到的,因而就根本不會去喊匯款員了,至關於提供了一層管理機制。針對這種窗口還存在多線程和單線程的區別:多線程:將全部用戶的要求都提上來,裏面的人都別閒着了,都一塊兒幹活吧;
單線程:你們都排好隊了,一個一個來,裏面的人同一時間只有一我的在工做。服務器
這裏須要注意的是超級守護進程的管理員xinet也是一個守護進程,只不過它的任務就是傳話,其實這也是一個很具體很艱鉅的任務哦。網絡
固然每一個守護進程都會監聽一個端口(銀行窗口),一些經常使用守護進程的監聽端口是固定的,像httpd監聽80端口, sshd監聽22端口等;咱們能夠將其理解爲責任制,時候等待,有求必應。具體的端口信息能夠經過cat /etc/services來查看。多線程
3、Linux守護進程管理工具併發
Linux提供了三種不一樣的守護進程管理工具:redhat-config-services、ntsysv、chkconfig,能夠根據具體須要靈活運用。
# service iptables status #查看相應服務的狀態,用service須要服務在/etc/init.d/目錄中存在
# netstat -tulp #會列出相應的服務及其監聽的端口號等,若加n參數會列出端口號
#chkconfig --list |grep 服務名 #會列出如今當前服務的各類狀態,包括在不一樣運行級別下的啓狀況,分爲上線兩部分,上部分是獨立啓動的服務,你會看到xinetd也在,下面部分是有inet管理的超級守護進程,沒有運行級別可分的。
四 Linux守護進程的運行方式
1.獨立運行(stand-alone)的守護進程
獨立運行的守護進程由init腳本負責管理,全部獨立運行的守護進程的腳本在/etc/rc.d/init.d/目錄下。系統服務都是獨立運行的守護進程,包括syslogd和cron等。獨立運行的守護進程的工做方式稱作stand-alone,它是UNIX傳統的C/S模式的訪問模式。stand-alone模式的工做原理如圖4-4所示。
工做在stand-alone模式下的網絡服務有xinetd、route、gated,另外還有Web服務器Apache和郵件服務器Sendmail、域名服務器Bind。在Linux系統中經過stand-alone模式啓動的服務由/etc/rc.d/下面對應的運行級別當中的符號連接啓動。
2.xinetd模式運行獨立的守護進程
從守護進程的概念能夠看出,對於系統所要經過的每一種服務,都必須運行一個監聽某個端口鏈接所發生的守護進程,這一般意味着資源浪費。爲了解決這個問題,Linux引進了"網絡守護進程服務程序"的概念。Red Hat Linux 9.0使用的網絡守護進程是xinted(eXtended InterNET daemon)。xinetd可以同時監聽多個指定的端口,在接受用戶請求時,它可以根據用戶請求的端口的不一樣,啓動不一樣的網絡服務進程來處理這些用戶請求。能夠把xinetd看作一個管理啓動服務的管理服務器,它決定把一個客戶請求交給哪一個程序處理,而後啓動相應的守護進程。xinetd無時不在運行並監聽它所管理的全部端口上的服務。當某個要鏈接它管理的某項服務的請求到達時,xinetd就會爲該服務啓動合適的服務器。xinetd模式的工做原理如圖4-5所示。
3. xinetd和stand-alone工做模式相比,系統不想要每個網絡服務進程都監聽其服務端口,運行單個xinetd就能夠同時監聽全部服務端口,這樣就下降了系統開銷,保護系統資源。可是對於訪問量大、常常出現併發訪問的狀況,xinetd則要頻繁啓動相應的網絡服務進程,反而會致使系統性能降低。查看系統爲Linux服務提供哪一種工做模式,能夠在Linux命令行中使用pstree命令,就能看到兩種不一樣模式啓動的網絡服務。通常來講系統中一些負載高的服務,Sendmail、Apache服務是單獨啓動的;而其餘服務類型均可以使用xinetd超級服務器管理。
五 Xinetd
1.什麼是xinetd
xinetd即extended internet daemon,xinetd是新一代的網絡守護進程服務程序,又叫超級Internet服務器。常常用來管理多種輕量級Internet服務。xinetd提供相似於inetd+tcp_wrapper的功能,可是更增強大和安全。
2. xinetd的特點
1) 強大的存取控制功能
— 內置對惡意用戶和藹意用戶的差異待遇設定。
— 使用libwrap支持,其效能更甚於tcpd。
— 能夠限制鏈接的等級,基於主機的鏈接數和基於服務的鏈接數。
— 設置特定的鏈接時間。
— 將某個服務設置到特定的主機以提供服務。
2) 有效防止DoS攻擊
— 能夠限制鏈接的等級。
— 能夠限制一個主機的最大鏈接數,從而防止某個主機獨佔某個服務。
— 能夠限制日誌文件的大小,防止磁盤空間被填滿。
3) 強大的日誌功能
— 能夠爲每個服務就syslog設定日誌等級。
— 若是不使用syslog,也能夠爲每一個服務創建日誌文件。
— 能夠記錄請求的起止時間以決定對方的訪問時間。
— 能夠記錄試圖非法訪問的請求。
4) 轉向功能
能夠將客戶端的請求轉發到另外一臺主機去處理。
5) 支持IPv6
xinetd自xinetd 2.1.8.8pre*起的版本就支持IPv6,能夠經過在./configure腳本中使用with-inet6 capability選項來完成。注意,要使這個生效,核心和網絡必須支持IPv6。固然IPv4仍然被支持。
6) 與客戶端的交互功能
不管客戶端請求是否成功,xinetd都會有提示告知鏈接狀態。
3. Xinetd的缺點
當前,它最大的缺點是對RPC支持的不穩定性,可是能夠啓動protmap,使它與xinetd共存來解決這個問題。
4 使用xinetd啓動守護進程
原則上任何系統服務均可以使用xinetd,然而最適合的應該是那些經常使用的網絡服務,同時,這個服務的請求數目和頻繁程度不會過高。像DNS和Apache就不適合採用這種方式,而像FTP、Telnet、SSH等就適合使用xinetd模式,系統默認使用xinetd的服務能夠分爲以下幾類。
① 標準Internet服務:telnet、ftp。
② 信息服務:finger、netstat、systat。
③ 郵件服務:imap、imaps、pop二、pop三、pops。
④ RPC服務:rquotad、rstatd、rusersd、sprayd、walld。
⑤ BSD服務:comsat、exec、login、ntalk、shell、talk。
⑥ 內部服務:chargen、daytime、echo、servers、services、time。
⑦ 安全服務:irc。
⑧ 其餘服務:name、tftp、uucp。
5. 解讀xinet的配置文件/etc/services, /etc/xinetd.conf和/etc/xinetd.d/*
0)/etc/services
在/etc/services 中設置了xinetd下的service對應的端口,例如:
1) /etc/xinetd.conf
xinetd的配置文件是/etc/xinetd.conf,可是它只包括幾個默認值及/etc/xinetd.d目錄中的配置文件。若是要啓用或禁用某項xinetd服務,編輯位於/etc/xinetd.d目錄中的配置文件。例如,disable屬性被設爲yes,表示該項服務已禁用;disable屬性被設爲no,表示該項服務已啓用。/etc/xinetd.conf有許多選項,下面是RHEL 4.0的/etc/xinetd.conf。
# Simple configuration file for xinetd
# Some defaults, and include /etc/xinetd.d/
defaults
{
instances = 60
log_type = SYSLOG authpriv
log_on_success = HOST PID
log_on_failure = HOST
cps = 25 30
}
includedir /etc/xinetd.d
— instances = 60:表示最大鏈接進程數爲60個。
— log_type = SYSLOG authpriv:表示使用syslog進行服務登記。
— log_on_success= HOST PID:表示設置成功後記錄客戶機的IP地址的進程ID。
— log_on_failure = HOST:表示設置失敗後記錄客戶機的IP地址。
— cps = 25 30:表示每秒25個入站鏈接,若是超過限制,則等待30秒。主要用於對付拒絕服務攻擊。
— includedir /etc/xinetd.d:表示告訴xinetd要包含的文件或目錄是/etc/xinetd.d。
2) /etc/xinetd.d/*
下面以/etc/xinetd.d/中的一個文件(rsync)爲例。
service rsync
{
disable = yes
socket_type = stream
wait = no
user = root
server = /usr/bin/rsync
log_on_failure += USERID
}
下面說明每一行選項的含義。
— disable = yes:表示禁用這個服務。
— socket_type = stream:表示服務的數據包類型爲stream。
— wait = no:表示不需等待,即服務將以多線程的方式運行。
— user = root:表示執行此服務進程的用戶是root。
— server = /usr/bin/rsync:啓動腳本的位置。
— log_on_failure += USERID:表示設置失敗時,UID添加到系統登記表。
5 配置xinetd
1) 格式
/etc/xinetd.conf中的每一項具備下列形式:
service service-name
{
……
}
其中service是必需的關鍵字,且屬性表必須用大括號括起來。每一項都定義了由service-name定義的服務。
service-name是任意的,但一般是標準網絡服務名,也可增長其餘非標準的服務,只要它們能經過網絡請求激活,包括localhost自身發出的網絡請求。有不少可使用的屬性,稍後將描述必需的屬性和屬性的使用規則。
操做符能夠是=、+=或-=。全部屬性可使用=,其做用是分配一個或多個值,某些屬性可使用+=或-=,其做用分別是將其值增長到某個現存的值表中,或將其值從現存值表中刪除。
2) 配置文件
相關的配置文件以下:
/etc/xinetd.conf
/etc/xinetd.d/* //該目錄下的全部文件
/etc/hosts.allow
/etc/hosts.deny
3)/etc/xinetd.conf中的disabled與enabled
前者的參數是禁用的服務列表,後者的參數是啓用的服務列表。他們的共同點是格式相同(屬性名、服務名列表與服務中間用空格分開,例如disabled = in.tftpd in.rexecd),此外,它們都是做用於全局的。若是在disabled列表中被指定,那麼不管包含在列表中的服務是否有配置文件和如何設置,都將被禁用;若是enabled列表被指定,那麼只有列表中的服務纔可啓動,若是enabled沒有被指定,那麼disabled指定的服務以外的全部服務均可以啓動。
4) 注意問題
① 在從新配置的時候,下列的屬性不能被改變:socket_type、wait、protocol、type;
② 若是only_from和no_access屬性沒有被指定(不管在服務項中直接指定仍是經過默認項指定),那麼對該服務的訪問IP將沒有限制;
③ 地址校驗是針對IP地址而不是針對域名地址。
6 xinetd防止拒絕服務攻擊(Denial of Services)的緣由
xinetd能有效地防止拒絕服務攻擊(Denial of Services)的緣由以下。
1) 限制同時運行的進程數
經過設置instances選項設定同時運行的併發進程數:
instances=20
當服務器被請求鏈接的進程數達到20個時,xinetd將中止接受多出部分的鏈接請求。直到請求鏈接數低於設定值爲止。
2) 限制一個IP地址的最大鏈接數
經過限制一個主機的最大鏈接數,從而防止某個主機獨佔某個服務。
per_source=5
這裏每一個IP地址的鏈接數是5個。
3) 限制日誌文件大小,防止磁盤空間被填滿
許多攻擊者知道大多數服務須要寫入日誌。入侵者能夠構造大量的錯誤信息併發送出來,服務器記錄這些錯誤,可能就形成日誌文件很是龐大,甚至會塞滿硬盤。同時會讓管理員面對大量的日誌,而不能發現入侵者真正的入侵途徑。所以,限制日誌文件大小是防範拒絕服務攻擊的一個方法。
log_type FILE.1 /var/log/myservice.log 8388608 15728640
這裏設置的日誌文件FILE.1臨界值爲8MB,到達此值時,syslog文件會出現告警,到達15MB,系統會中止全部使用這個日誌系統的服務。
4) 限制負載
xinetd還可使用限制負載的方法防範拒絕服務攻擊。用一個浮點數做爲負載係數,當負載達到這個數目的時候,該服務將暫停處理後續的鏈接。
max_load = 2.8
上面的設定表示當一項系統負載達到2.8時,全部服務將暫時停止,直到系統負載降低到設定值如下。
說明 要使用這個選項,編譯時應加入「--with-loadavg」,xinetd將處理max-load配置選項,從而在系統負載太重時關閉某些服務進程,來實現防範某些拒絕服務攻擊。
5) 限制全部服務器數目(鏈接速率)
xinetd可使用cps選項設定鏈接速率,下面的例子:
cps = 25 60
上面的設定表示服務器最多啓動25個鏈接,若是達到這個數目將中止啓動新服務60秒。在此期間不接受任何請求。
6) 限制對硬件資源的利用
經過rlimit_as和rlimit_cpu兩個選項能夠有效地限制一種服務對內存、中央處理器的資源佔用:
rlimit_as = 8M
rlimit_cpu=20
上面的設定表示對服務器硬件資源佔用的限制,最多可用內存爲8MB,CPU每秒處理20個進程。
xinetd的一個重要功能是它可以控制從屬服務能夠利用的資源量,經過它的以上設置能夠達到這個目的,有助於防止某個xinetd服務佔用大量資源,從而致使「拒絕服務」狀況的出現。
六 Service命令
Linux的service命令就是查看和控制全部的獨立啓動的守護進程。 這個命令不是在全部的linux發行版本中都有。主要是在redhat系linux中。service此命令位於/sbin/service,用file命令查看此命令會發現它是一個腳本命令。分析腳本可知此命令的做用是去/etc/init.d目錄下尋找相應的服務,進行開啓和關閉等操做。例如service mysqld stop等價於/etc/init.d/mysqld stop。
七 xinetd自己也是一個獨立的守護進程,在/etc/init.d/xinetd。
參考:
http://book.51cto.com/art/200906/127264.htm
http://wordpress.facesoho.com/server/what-is-xinetd.html
http://wbwk2005.blog.51cto.com/2215231/400260
http://hi.baidu.com/neubuffalo/blog/item/3d48148291be90b76d8119e1.html