在linux下,主機常常會收到一些要求,比如來自本機系統要求或者是網絡用戶端的服務要求,隻要有要求來的時候,通常就是各式各樣的程序負責去喚起應該要工作的服務來工作!
守護程序目前有兩種基本的模式,分别是有獨立守護程序與和非獨立守護程序兩種方式,其中非獨立守護程序的各項工作由超級守護程序xinetd(一種特殊的獨立守護程序)代為管理。 換句話說,可以了解為超級守護程序可以代表全部的非獨立守護程序。
獨立守護程序(stand_alone):
獨立守護程序之後,就直接常駐在記憶體當中!他雖然會一直的占用系統的資源,但最大的優點就是,他會一直啟動!是以當有要求來的時候,他就會很快速的響應!常常用在這一種 程序的網絡服務如常見的 httpd、vsftpd 等。
超級守護程序(super daemon):
相對于獨立守護程序的執行方式,這一種服務的啟動方式則是由統一的一個程序來負責喚起該服務!這一個統一負責的程序就是 xinetd!常用非獨立守護程序的網絡服務有telnet、tftp等。
下面說說超級守護守護程序的相關資訊。
超級守護程序的配置檔案位于/etc/xinetd.conf中,這個檔案相當于那些非獨立守護程序的配置檔案的模闆。在設定非獨立守護程序的配置檔案時可以參考這個檔案。
defaults
# The next two items are intended to be a quick access place to
# temporarily enable or disable services.
# enabled =
# disabled =
确定是否開啟本服務,如果enabled=yes,或者disabled=no就打開該項服務,反之enabled=no 或者disabled=yes就是關閉該項服務喽!在非獨立守護程序的配置文見中預設是 disable = yes
# Define general logging characteristics.
log_type = SYSLOG daemon info
log_on_failure = HOST
log_on_success = PID HOST DURATION EXIT
定義登陸特征的選項,log_type選項設定顯示登陸類型,如果登入失敗,顯示主機名,如果登陸成功,則顯示登陸使用者的PID,主機名,線上時間,出口。在非獨立守護程序的配置文見中預設是 log_on_failure += USERID “+=”的意思是在xinetd.conf的基礎上再加上 USERID
# Define access restriction defaults
# no_access =
# only_from =
# max_load = 0
cps = 50 10
instances = 50
per_source = 10
定義使用者登陸時的限制選項,“no_access = ”後跟不允許登入的主機,“only_from= ”後跟允許登陸的主機。表示主機的方法有四種。分别是:
1、以網段形式 例如:192.168.1.0
2、以網絡名形式 這些網絡名來自/etc/networks的配置檔案或者NIS域 例如:@mynetwork
3、以主機名形式(必須以.開頭,切記) 例如:.domain.com
4、以IP位址加上子網路遮罩 例如:192.168.0.0/255.255.255.0 或者192.168.0.0/24
【注】當在配置檔案中同時存在no_access 和 only_from時系統取最佳比對。也就是說以指定範圍小的那個選項為準。若兩個都不存在,則允許通路。
max_load 最大登陸的用戶端數
cps限制進入的數率。這一項有兩個值,前一個值代表每秒鐘處理的最大并發連結數,但是如果超過最大連結時,後面一個值就有用途了。在超過最大連結數的情況下,當有新的連結進來時需要等待一段時間後重新進行連結,後一個值就是來定義這個等待時間的。
per_source 允許一個IP發起的最大并發連結數。
# Address and networking defaults
# bind =
# mdns = yes
v6only = no
bind的作用是綁定監聽位址
v6only 定義是否支援IP v6位址協定
# setup environmental attributes
# passenv =
groups = yes
umask = 002
這是設定環境變量的一些參數,一般用預設值就行了,在非獨立守護程序中一般不會出現。
# Generally, banners are not used. This sets up their global defaults
# banner =
# banner_fail =
# banner_success =
一般來說,banners的用途不大。其作用是:當用戶端連結時回報給用戶端的歡迎資訊或者登入失敗資訊。
下面就以telnet服務為例來具體說明:
telnet服務的配置檔案在/etc/xinetd.d/telnet中,打開其配置檔案可以看到:
service telnet{
disable = no
flags = REUSE
socket_type = stream
wait = no
user = root
server = /usr/sbin/in.telnetd
only_from =192.168.0.0/24
log_on_failure += USERID
access_times =8:00-18:00
}
其中:
flags 表示服務運作标志
socket_type 表示套接字類型,他有兩個選項。 stream 表示使用的是TCP協定,dgram 表示使用的是UDP協定。
server 表示用戶端使用telnet登入伺服器時,伺服器要調用的系統程序。
wait 有yes 和no 兩個選項,yes 表示單線程,由非獨立守護程序自己來管理使用者的登入情況,no 表示多線程,由xinetd代為管理使用者登入情況。
user 以某個使用者的身份來運作該程式。
access_times 設定使用者可以通路的時間段。
下面說一下tcp_warpper的一些設定:
事實上,除了使用 xinetd來設定安全機制之外, 我們還可以利用額外的機制來抵擋某些不受歡迎的主機! 那就是/etc/hosts.allow 以及 /etc/hosts.deny 這兩個檔案的功能啦!
tcp_warpper的工作原理圖為:
當有外界通路請求時,tcp_warpper就去/etc/hosts.allow檔案中尋找對應條目,如果在該檔案中尋找到就允許通路,如果尋找不到就接着去/etc/hosts.deny檔案中尋找,如果找到,就拒絕通路,如果尋找不到,則允許通路。
這兩個檔案内容基本的文法是:
<service(program_name)> : <IP, name,netmask,network name> : <action>
第一項<service(program_name)>
服務程序名:即可執行二進制程式名,不是服務名。
如是獨立守護程序,則直接寫程序名,例如 vsftpd
如果是非獨立守護程序,要在程序名前加”in.”,例如 in.tenletd
另外,如果伺服器端有兩塊以上的網卡,還可以對網卡進行綁定,即設定用戶端是基于那塊網卡來進行通路的。例如:[email protected] : 192.168.0.
第二項<IP, host name,netmask,network name>
IP 即單個具體的IP位址,例如 :192.168.0.82
還有一個特殊之處是IP位址可以寫成 192.168.0. 意思是192.168.0.網段内的所有主機。
host name 即某個域名,必須以“.”開頭,例如 .example.com 意思是包括example.com域中所有主機。
netmask 即包括某個網段, 例如:192.168.0.0/255.255.255.0
【注:】與非獨立守護程序配置檔案不同,該檔案不支援無類域間路由,是以不能寫成192.168.0.0/24 必須寫成子網路遮罩形式192.168.0.0/255.255.255.0
network name 即這些網絡名來自/etc/networks的配置檔案或者NIS域 例如:@mynetwork
此外,我們還可以使用一些特殊參數(即宏定義)在第二項!内容有:
* ALL:代表全部的 program_name 或者是 IP 都接受的意思,
例如 ALL: ALL: deny
* LOCAL:比對來自本地主機;例如: ALL: LOCAL: allow
* UNKNOWN:表示不可被解析的 IP,domain 等主機;
* KNOWN:表示為可解析的 IP, domain等主機;
* PARANOID:表示正反向解析不比對的位址;
* EXCEPT:表示不包含後面的主機;
例如:in.telnetd:192.168.0. EXCEPT 192.168.0.82
【注:】這些特殊參數必須要大些。
第三項<action>
主要的内容有:
*spawn
可以利用後續接的 shell 來進行額外的工作,且具有變數功能,主要的變數内容為: %h, %a, %d等等;
%a 表示用戶端位址
%A 表示伺服器端位址
%h 表示用戶端主機名(如果名字不存在,則用IP來表示)%H 表示伺服器端主機名
%d 表示該項服務的可執行檔案名
%c 表示用戶端資訊(以user@host格式來表示)
%s 表示伺服器短資訊(以server@host格式來表示)
%p 表示PID
%% 表示轉義字元%
* twist
立刻執行後面的指令,且執行完後終止該次連線的要求 (DENY)
*banners
讀取/var/banners/servicename下的的檔案,将檔案内的歡迎資訊顯示給登陸使用者 切記servicename必須要與第一項service名字相同。否則就讀取不到這些資訊。有關具體實驗步驟,請參閱實驗部分。
本文轉自 linuxtro 51CTO部落格,原文連結:http://blog.51cto.com/linuxtro/278641,如需轉載請自行聯系原作者