1. 程式人生 > >Linux超級守護程序——xinetd

Linux超級守護程序——xinetd

Linux 伺服器在啟動時需要啟動很多系統服務,它們向本地和網路使用者提供了Linux的系統功能介面,直接面嚮應用程式和使用者。提供這些服務的程式是由執行在後臺的守護程序來執行的。守護程序是生存期長的一種程序。它們獨立於控制終端並且週期性的執行某種任務或等待處理某些發生的事件。他們常常在系統引導裝入時啟動,在系統關閉時終止。linux系統有很多守護程序,大多數伺服器都是用守護程序實現的。同時,守護程序完成許多系統任務,比如,作 業規劃程序crond、列印程序lqd等。有些書籍和資料也把守護程序稱作:“服務”。

守護程序,也就是指daemon和service。

二 Linux守護程序的分類

根據守護程序的啟動和管理方式,可以分為獨立啟動守護程序和超級守護程序兩類


   獨立啟動(stand_alone):該類程序啟動後就常駐記憶體,所以會一直佔用系統資源。其最大的優點就是它會一直啟動,當外界有要求時相應速度較快,像httpd等程序;
   超級守護程序:系統啟動時由一個統一的守護程序xinet來負責管理一些程序,當相應請求到來時需要通過xinet的轉接才可以喚醒被xinet管理的程序。這種程序的優點時最初只有xinet這一守護程序佔有系統資源,其他的內部服務並不一直佔有系統資源,只有資料包到來時才會被xinet管理員來喚醒。並且我們還可以通過xinet來對它所管理的程序設定一些訪問許可權,相當於多了一層管理機制。


如果用兩個比喻來形容兩類守護程序的話一般會用銀行的業務處理視窗來類比:
   獨立啟動:銀行裡有一種單服務的視窗,像取錢,存錢等視窗,這些視窗邊上始終會坐著一個人,如果有人來取錢或存錢,可以直接到相應的視窗去辦理,這個處理單一服務的始終存在的人就是獨立啟動的守護程序;

   超級守護程序:銀行裡還有一種視窗,提供綜合服務,像匯款,轉賬,提款等業務;這種視窗附近也始終坐著一個人(xinet),她可能不提供具體的服務,提供具體服務的人在裡面閒著聊天啊,喝茶啊,但是當有人來匯款時他會大聲喊一句,小王,有人匯款啦,然後裡面管匯款的小王會立馬跑過來幫忙辦完匯款業務。其他的人繼續聊天,喝茶。這些負責具體業務的人我們就稱之為超級守護程序。當然可能匯款人會有一些規則,可能不能往北京匯款,他就會提早告訴xinet,所以如果有人來匯款想匯往北京的話,管理員就直接告訴他這個我們這裡辦不到的,於是就根本不會去喊匯款員了,相當於提供了一層管理機制。針對這種視窗還存在多執行緒和單執行緒的區別:多執行緒:將所有使用者的要求都提上來,裡面的人都別閒著了,都一起幹活吧;
單執行緒:大家都排好隊了,一個一個來,裡面的人同一時間只有一個人在工作。

這裡需要注意的是超級守護程序的管理員xinet也是一個守護程序,只不過它的任務就是傳話,其實這也是一個很具體很艱鉅的任務哦。

當然每個守護程序都會監聽一個埠(銀行視窗),一些常用守護程序的監聽埠是固定的,像httpd監聽80埠, sshd監聽22埠等;我們可以將其理解為責任制,時候等待,有求必應。具體的埠資訊可以通過cat /etc/services來檢視。

三、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、pop2、pop3、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對應的埠,例如:

$  cat /etc/services | grep rsync
rsync           873/tcp                         # rsync
rsync           873/udp                         # rsync

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。

相關推薦

Linux超級守護程序——xinetd

Linux 伺服器在啟動時需要啟動很多系統服務,它們向本地和網路使用者提供了Linux的系統功能介面,直接面嚮應用程式和使用者。提供這些服務的程式是由執行在後臺的守護程序來執行的。守護程序是生存期長的一種程序。它們獨立於控制終端並且週期性的執行某種任務或等待處理某些發生的事件。他們常常在系統引導裝入時啟動

xinetd超級守護程序的使用

xinetd(eXtended InterNET services daemon) 一、xinetd的功能介紹: xinetd提供類似於inetd+tcp_wrapper的功能,但是更加強大和安全。它能提供以下特色: * 支援對tcp、udp、RPC服務(但是當前對RPC的

linux nohup守護程序

 前端js程式碼 var wsUrl = "ws://www.whl.com:9501"; var websocket = new WebSocket(wsUrl); //例項物件的onopen屬性 websocket.onopen = functi

Linux之————守護程序與crond定時任務

一. 守護程序    守護程序又稱為精靈(Daemon)程序,顧名思義,守護是一直會存在的,它是執行在後臺的一種特殊的程序,獨立於控制終端並且週期性地執行某種任務或等待處理某些發生的事件。比如當Linux系統啟動的時候會啟動一些系統服務程序,因為這些程序沒有控制終端因此不能直

Linux C 守護程序實現後臺執行nohup效果

守護程序(Daemon)是執行在後臺的一種特殊程序。它獨立於控制終端並且週期性地執行某種任務或等待處理某些發生的事件。守護程序是一種很有用的進 程。Linux的大多數伺服器就是用守護程序實現的。比如,Internet伺服器inetd,Web伺服器httpd等。同時,守護

Linux學習——守護程序(daemon)

建立守護程序的步驟: 1)父程序中執行fork後,執行exit退出; 2)在子程序中呼叫setsid;(脫離控制檯) 3)讓根目錄“/”成為子程序的工作目錄; 4)把子程序的umask變為0; 5)關閉任何不需要的檔案描述符。 其中,setsid函式建立一個新會話和一個新程

linux 編寫守護程序例子 (Daemon)

例子如下 #include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <unistd.h>  //fork int Daemon(void)

Linux守護程序以及實現一個守護程序

1、什麼是守護程序 守護程序也稱為精靈程序,是執行在後臺程序的一種特殊程序。它獨立於控制終端並且週期性地執行某種任務或等待處理某些發生的事件。 (1)脫離於控制終端並且在後臺執行 (2)不受使用者登入登出的影響,它們一直在執行著 Linux大多數伺服器就

Linux守護程序的概念

轉:http://blog.51cto.com/linuxzoe/572965在講解xinetd之前,我們先要了解什麼是守護程序。    守護程序,也就是通常說的Daemon程序,是Linux中的後臺服務程序。它是一個生存期較長的程序,通常獨立於控制終端並且週期性地執行某種任

hadoop不能互相訪問和linux防火牆守護程序

前言——作為裝過幾次叢集的菜鳥,對於hadoop叢集的安裝還是比較有心得的:只要配置檔案夠好,叢集配置就非常容易,否則也容易出現莫名其妙的問題!總結了一份3臺機器搭建較完好的叢集的一份配置檔案。 在我將叢集配置檔案,防火牆(自以為)、叢集時間、Java環境變數等等都搞定的情況下,竟然還是出了問題。 現象是訪問

linux守護程序小結

建立守護程序步驟: 建立子程序父程序退出, 讓這個子程序變成孤兒程序, 防止產生殭屍程序 在子程序中建立新會話 setsid函式用於建立一個新的會話,並使得當前程序成為新會話組的組長 setsid函式能夠使程序完全獨立出來,從 而脫離所有其他程序的控制。 改

php 編寫linux守護程序

問題:將一個php程式以linux守護程序(在後臺執行)的方式執行? 解決方法:(見程式碼) // index.php檔案 <?php /*實現守護程序化,當你的PHP程式需要轉為後臺執行時, 只需要呼叫一次封裝好的函式init()即可。 編寫守護程序的一般步驟步驟:

Linux守護程序檢測某個程式是否執行

實現功能: 做的一個嵌入式板子開機會自啟動一個程式,但發現它工作數天後會退出。檢查記憶體使用並沒有洩漏,於是編寫了一個守護程序來不斷檢查程式是否執行,沒執行則執行它,這是一個折衷的辦法。   說明: 需要執行的程式是AlarmInterface,位於目錄/rf/下面。我做了

linux 守護程序與用&結尾的後臺執行程式有什麼區別

預設情況下,程序是在前臺執行的,這時就把shell給佔據了,我們無法進行其它操作。對於那些沒有互動的程序,很多時候,我們希望將其在後臺啟動,可以在啟動引數的時候加一個’&'實現這個目的: [email protected]:~/application/zookeeper

Linux守護程序列表/守護程序

  在linux或者unix作業系統中在系統引導的時候會開啟很多服務,這些服務就叫做守護程序。為了增加靈活性,root可以選擇系統開啟的模式,這些模式叫做執行級別,每一種執行級別以一定的方式配置系統。 守護程序是脫離於終端並且在後臺執行的程序。守護程序脫離於終端是為了避免程序在

Linux 多工程式設計——特殊程序:殭屍程序、孤兒程序守護程序

殭屍程序(Zombie Process) 程序已執行結束,但程序的佔用的資源未被回收,這樣的程序稱為殭屍程序。 在每個程序退出的時候,核心釋放該程序所有的資源、包括開啟的檔案、佔用的記憶體等。 但是仍然為其保留一定的資訊,這些資訊主要主要指程序控制塊的資訊(包括程序號、退出狀態、執行時

Linux 程序】孤兒程序、殭屍程序守護程序

1、孤兒程序: 孤兒程序:一個父程序退出,而它的一個或多個子程序還在執行,那麼那些子程序將成為孤兒程序。孤兒程序將被init程序(程序號為1)所收養,並由init程序對它們完成狀態收集工作。孤兒程序是沒有父程序的程序,孤兒程序這個重任就落到了init程序身上,init程序就好像是一個民政局,專門負責處理孤兒

Linux程式設計】守護程序(daemon)詳解與建立

一、概述   Daemon(守護程序)是執行在後臺的一種特殊程序。它獨立於控制終端並且週期性地執行某種任務或等待處理某些發生的事件。它不需要使用者輸入就能執行而且提供某種服務,不是對整個系統就是對某個使用者程式提供服務。Linux系統的大多數伺服器就是通過守護程序實現的。常見的守護

Linux----網路程式設計(守護程序相關概念及程式設計流程)

一、守護程序的相關定義 守護程序:也稱為精靈程序,執行在後臺的一種特殊程序。守護程序獨立於控制終端並且週期性的執行某種任務或者等待處理髮生的事件。所以守護程序不因為使用者、終端或其他的變化而受影響。 守護程序的特點:  1. 執行週期長                 

[阮一峰]Linux 守護程序的啟動方法

"守護程序"(daemon)就是一直在後臺執行的程序(daemon)。 本文介紹如何將一個 Web 應用,啟動為守護程序。 一、問題的由來 Web應用寫好後,下一件事就是啟動,讓它一直在後臺執行。 這並不容易。舉例來說,下面是一個最簡單的Node應用server.js,只有6行。 var