天天看點

linux 守護程序獨立模式和xinetd超級管理模式

本帖最後由 lyhabc 于 2016-01-29 13:51 編輯

一般使用stand alone /etc/init.d/

非常少用xinetd /etc/xinetd.d/

Linux守護程序的運作方式

1.獨立運作(stand-alone)的守護程序

獨立運作的守護程序由init腳本負責管理,所有獨立運作的守護程序的腳本在/etc/rc.d/init.d/目錄下。系統服務都是獨立運作的守護程序,包括syslogd和crond等。獨立運作的守護程序的工作方式稱做stand-alone,它是UNIX傳統的C/S模式的通路模式。stand-alone模式的工作原理如圖4-4所示。

linux 守護程式獨立模式和xinetd超級管理模式

工作在stand-alone模式下的網絡服務有xinetd、route、gated,另外還有Web伺服器Apache和郵件伺服器Sendmail、DNS域名伺服器Bind。在Linux系統中通過stand-alone模式啟動的服務由/etc/rc.d/下面對應的運作級别當中的符号連結啟動。

linux 守護程式獨立模式和xinetd超級管理模式

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超級伺服器super daemon管理。

複制代碼

# pstree

init─┬─abrtd

     ├─acpid

     ├─atd

     ├─auditd───{auditd}

     ├─automount───4*[{automount}]

     ├─certmonger

     ├─console-kit-dae───63*[{console-kit-da}]

     ├─cupsd

     ├─dbus-daemon

     ├─fail2ban-server───2*[{fail2ban-serve}]

     ├─hald─┬─hald-runner─┬─hald-addon-acpi

     │      │             └─hald-addon-inpu

     │      └─{hald}

     ├─irqbalance

     ├─login───bash

     ├─master─┬─pickup

     │        └─qmgr

     ├─mcelog

     ├─5*[mingetty]

     ├─nginx───nginx

     ├─rpc.statd

     ├─rpcbind

     ├─rsyslogd───3*[{rsyslogd}]

     ├─sshd───sshd───bash───pstree  #ssh登入之後,進入bash,如果進行了多次su,那麼會顯示bash-bash-pstree

     └─udevd───2*[udevd]

五 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支援的不穩定性,但是可以啟動portmap,使它與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指令就是檢視和控制所有的獨立(stand-alone)啟動的守護程序。 這個指令不是在所有的linux發行版本中都有。主要是在redhat系linux中。service此指令位于/sbin/service,用file指令檢視此指令會發現它是一個腳本指令。

分析腳本可知此指令的作用是去/etc/init.d目錄下尋找相應的服務,進行開啟和關閉等操作。例如service mysqld stop等價于/etc/init.d/mysqld stop。

七 xinetd本身也是一個獨立(stand-alone)的守護程序,在/etc/init.d/xinetd

八 安裝好centos之後,預設沒有安裝xinetd

需要安裝

yum安裝

yum install -y xinetd

編譯安裝

<a href="http://blog.chinaunix.net/uid-20690190-id-1894445.html" target="_blank">http://blog.chinaunix.net/uid-20690190-id-1894445.html</a>

[root@localhost local]# tar -zxvf xinetd-2.3.14.tar.gz

[root@localhost local]# cd xinetd-2.3.14

[root@localhost xinetd-2.3.14]# ./configure

[root@localhost xinetd-2.3.14]# make

[root@localhost xinetd-2.3.14]# make install

==========================================

配置xinetd

[root@localhost xinetd-2.3.14]# cp /etc/xinetd.conf /etc/xinetd.conf.bak

[root@localhost xinetd-2.3.14]# sed -e 's/etc/sbin/g' xinetd/sample.conf &gt; /etc/xinetd.conf

添加運作級符号連結

[root@localhost xinetd-2.3.14]# chmod 754 /etc/rc.d/init.d/xinetd &amp;&amp;

ln -s  /etc/rc.d/init.d/xinetd /etc/rc.d/rc0.d/K49xinetd &amp;&amp;

ln -s  /etc/rc.d/init.d/xinetd /etc/rc.d/rc1.d/K49xinetd &amp;&amp;

ln -s  /etc/rc.d/init.d/xinetd /etc/rc.d/rc2.d/K49xinetd &amp;&amp;

ln -s  /etc/rc.d/init.d/xinetd /etc/rc.d/rc3.d/S23xinetd &amp;&amp;

ln -s  /etc/rc.d/init.d/xinetd /etc/rc.d/rc4.d/S23xinetd &amp;&amp;

ln -s  /etc/rc.d/init.d/xinetd /etc/rc.d/rc5.d/S23xinetd &amp;&amp;

ln -s  /etc/rc.d/init.d/xinetd /etc/rc.d/rc6.d/K49xinetd

========================================================

啟動腳本運作xinetd

[root@localhost mnt]# /etc/rc.d/init.d/xinetd start

惎鍔?xinetd锛?[60G[  纭?畾  ]

touch: cannot touch `/mnt/lockdev/xinetd': No such file or directory

============================================

建立該目錄在次啟動正常

[root@localhost mnt]# mkdir -p /mnt/lockdev

鍚?姩 xinetd锛?[root@localhost mnt]# netstat -antp

Active Internet connections (servers and established)

Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name  

tcp        0      0 0.0.0.0:32769               0.0.0.0:*                   LISTEN      1452/rpc.statd     

tcp        0      0 0.0.0.0:37                  0.0.0.0:*                   LISTEN      6300/xinetd        

tcp        0      0 0.0.0.0:7                   0.0.0.0:*                   LISTEN      6300/xinetd        

tcp        0      0 0.0.0.0:13                  0.0.0.0:*                   LISTEN      6300/xinetd

===================================================

配置指令解釋

cp /etc/xinetd.conf /etc/xinetd.conf.bak : 儲存目前的xinetd.conf檔案。

sed -e 's/etc/sbin/g' xinetd/sample.config &gt; /etc/xinetd.conf:確定所有的守護程序的路徑是/usr/sbin而不是預設的/usr/etc。

ln -s /etc/rc.d/init.d/xinetd /etc/rc.d/rc3.d/S300xinetd, etc. :建立指向xinetd啟動腳本的運作級連結,用于在機器啟動和關閉時自動運作和停止xinetd。

内容

xinetd軟體包中包含 xinetd, itox以及 xconv.pl。

具體說明

xinetd

xinetd是internet服務守護程序。

itox

itox是一個用于将inetd.conf檔案轉化為xinetd.conf格式的工具。

xconv.pl

與itox相似,xconv.pl是一個用于将inetd.conf檔案轉化為xinetd.conf格式的perl腳本。

3、配置一般服務托管到超級守護進行下

(1)以rsync服務為例

[root@rootbug ~]#vim/etc/xinetd.d/rsync -------如果xinetd目錄下沒有rsync,則通過vim新建立

service rsync --服務名

disable = yes --disable等于yes表示此服務關閉

socket_type =stream --tcp的連線機制

wait =no --不等待,可以同時進行大量連線功能

user =root --用root身份啟動服務

server = /usr/bin/rsync --定義你的rsync的服務執行檔案的位置

server_args =--daemon --服務參數,man rsync可以查到這個參數,表示rsync以守護程序的方式來運作

log_on_failure +=USERID --登入錯誤時,額外記錄你的使用者id

(2)然後停止之前rsync的服務,啟用超級守護程序

[root@rootbug ~]#/etc/init.d/rsync stop

[root@rootbug ~]#/etc/init.d/xinetd start

(3)實作把ssh拖管到super daemon下管理

[root@rootbug ~]# vim/etc/xinetd.d/ssh --建立一個檔案,寫上下面的内容

每一個參數前用tab鍵(制表符)隔開,等号兩邊也要有空格

service ssh

disable = no

socket_type = stream

protocol = tcp

wait = no

user = root

server = /usr/sbin/sshd

server_args = -i

[root@rootbug ~]#/etc/init.d/sshdstop --------關閉之前的服務

[root@rootbug ~]#/etc/init.d/xinetdrestart ---------啟動超級守護程序

[root@rootbug ~]#netstat -ntlup |grep :22

tcp 0 00.0.0.0:22 0.0.0.0:* LISTEN 8182/xinetd --這時候檢視你的端口會發現守護程序為xinetd,不是以前的sshd

     本文轉自yzy121403725 51CTO部落格,原文連結http://blog.51cto.com/lookingdream/1845107:,如需轉載請自行聯系原作者

繼續閱讀