linux超级服务器inetd详解
1.引言:
它可以為多種服務(wù)管理連接,當(dāng)?inetd?接到連接時,它能夠確定連接所需的程序,啟動相應(yīng)的進程,并把?socket?交給它?(服務(wù)socket?會作為程序的標準輸入、 輸出和錯誤輸出描述符)。 使用?inetd?來運行那些負載不重的服務(wù)有助于降低系統(tǒng)負載,因為它不需要為每個服務(wù)都啟動獨立的服務(wù)程序。
一般說來,?inetd?主要用于啟動其它服務(wù)程序,但它也有能力直接處理某些簡單的服務(wù), 例如?chargen、?auth, 以及daytime。
inetd?是通過rc系統(tǒng)啟動的。?inetd_enable?選項默認設(shè)為?NO,但可以在安裝系統(tǒng)時, 由用戶根據(jù)需要通過?sysinstall?來打開。
inetd.conf則是inetd的配置文件。?inetd.conf文件告訴inetd監(jiān)聽哪些網(wǎng)絡(luò)端口,為每個端口啟動哪個服務(wù)。在任何的網(wǎng)絡(luò)環(huán)境中使用Linux?系統(tǒng),第一件要做的事就是了解一下服務(wù)器到底要提供哪些服務(wù)。不需要的那些服務(wù)應(yīng)該被禁止掉,最好卸載掉,這樣黑客就少了一些攻擊系統(tǒng)的機會。查看?“/etc/inetd.conf”文件,了解一下inetd提供哪些服務(wù)。用加上注釋的方法(在一行的開頭加上#號),禁止任何不需要的服務(wù),再給?inetd進程發(fā)一個SIGHUP信號。
inetd提供一種簡單的方法是應(yīng)用程序具有網(wǎng)絡(luò)功能?
對于TCP服務(wù)器,inetd監(jiān)聽在應(yīng)用程序已知的端口上,監(jiān)聽鏈接請求,接受連接,映射鏈接到標準輸入,標準輸出和標準錯誤輸出,啟動適當(dāng)?shù)姆?wù)器.
對于UDP服務(wù)器,當(dāng)UDP服務(wù)器的已知端口上數(shù)據(jù)可讀時,inetd要求操作系統(tǒng)通知他,知道inetd啟動的服務(wù)器中止,inetd再在已知端口上進行下一步操作。
2.超級服務(wù)器的工作原理:
由于服務(wù)器套接字初始化方式非常類似,所以可以設(shè)計一個專門的服務(wù)器負責(zé)初始化工作,并且它將根據(jù)接入端口不同調(diào)用相應(yīng)的服務(wù)程序進行工作,這些服務(wù)程序在未被接入前都處于睡眠等待狀態(tài)。采用超級服務(wù)器的方式可以讓服務(wù)器程序采用統(tǒng)一方式管理。
?超級服務(wù)器將采用select的方式并發(fā)檢測在文件/etc/inetd.conf中說明的TCP/UDP端口,一旦發(fā)現(xiàn)有客戶接入就創(chuàng)建一個子進程。超級服務(wù)器inetd是服務(wù)接入者,它在創(chuàng)建字進程時候調(diào)用exec()載入具體的服務(wù)程序。在子進程中關(guān)閉傾聽套接字,父進程中關(guān)閉連接套接字,于是父進程繼續(xù)檢測,子進程開始為客戶端進行服務(wù)。對于wait服務(wù)程序,超級服務(wù)器inet載入它時候?qū)⑵湓跈z測集合中刪除,等待該服務(wù)結(jié)束后才能接入下次服務(wù)。服務(wù)程序完畢后將發(fā)送SIGCHLD信號,超級服務(wù)器將其繼續(xù)加入檢測集合。當(dāng)系統(tǒng)管理員修改超級服務(wù)器配置文件后將發(fā)送SIGHUP信號,超級服務(wù)器將重新初始化。
inetd是監(jiān)視一些網(wǎng)絡(luò)請求的守護進程,其根據(jù)網(wǎng)絡(luò)請求來調(diào)用相應(yīng)的服務(wù)進程來處理連接請求。
3./etc/inetd.conf配置文件:
Inetd.conf文件是Linux系統(tǒng)中的重要文件之一。它保存了系統(tǒng)提供internet服務(wù)的數(shù)據(jù)庫。通過這個文件,你可以對這些服務(wù)加以控制,如打開/關(guān)閉某項服務(wù),使它們更為安全的運行等等很多。希望這篇文章能盡量解釋地完整。
1)域
在inetd.conf文件中每項有效的條目中都應(yīng)該包含以下的域。
*服務(wù)名
*?套接字類型
*?協(xié)議類型
* wait/nowait[.max]
*?用戶名[.組]
*?服務(wù)程序
*?服務(wù)程序的參數(shù)
當(dāng)然如果你要定義Sun-RPC服務(wù),在inetd.conf文件則需要以下的類型域:
*?服務(wù)名/版本
*?套接字類型
* rpc/協(xié)議類型
* wait/nowait[.max]
*?用戶名[.組]
*?服務(wù)程序
*?服務(wù)程序的參數(shù)
服務(wù)名是在/etc/services文件中經(jīng)過定義的有效服務(wù)名稱(如telnet,echo等)。如果服務(wù)被用來定義Sun-RPC服務(wù),它就必須在/etc/rpc文件中定義。
套接字類型域包含以下幾種:
* stream - stram
* dgram - datagram
* raw - raw
* rdm - reliabl! y delivered message
* seqpacket - sequenced packet
此域取決于使用何種的套接字類型.
協(xié)議類型域必須是已經(jīng)在/etc/protocols文件中定義過的類型。最常見的是tcp和udp,Sun-RPC服務(wù)要在協(xié)議前加上“rpc/”(如rpc/tcp或者rpc/udp)
Wait/nowait域只用于數(shù)據(jù)報套接字,其它的都使用nowait參數(shù)。如果服務(wù)是多線程的,意味著在與對端建立連接后將釋放套接字,inetd進程可以通過些套接字接收更多的消息,這時些用“nowait”條目。如果服務(wù)是單線程,表示服務(wù)將在同一個socket中處理所有的外來數(shù)據(jù)報,直到超時,這種情況下使用“wait”條目。Max參數(shù),用一個點與wait/nowait隔開,定義了inetd進程在一分鐘之內(nèi)最大產(chǎn)生的實例數(shù)目。
用戶域定義了服務(wù)的使用者。組參數(shù),通過點與用戶名隔開,定義了除/etc/passwd文件中之外的可以運行服務(wù)的組ID。
服務(wù)程序是在套接字請求時執(zhí)行的程序的完整路徑。如果是inted進程內(nèi)置的服務(wù),此處應(yīng)為“internally”。
服務(wù)程序參數(shù)提供程序運行的所需的參數(shù),同樣的,如果是內(nèi)置服務(wù),此處也為“internally”。
2)服務(wù)
現(xiàn)在來看一下不同的服務(wù),以便加深理解。?
?telnet???stream???tcp??????;nowait???root?????/usr/sbin/tcpd???in.telnetd
*?服務(wù)名:???telnet
*?套接字類型:???stream
*?協(xié)議類型:???tcp
* Wait/Nowait[.max]: nowait
*?用戶名[.組]:???root
*?服務(wù)程序:???/usr/sbin/tcpd
*?參數(shù):???in.telnetd
3) 開啟&?關(guān)閉 服務(wù)
非常簡單,只要在想要關(guān)閉的服務(wù)前面加上一個#,比如想要關(guān)閉23端囗,被telnet使用,只要象下面這樣。
#telnet???stream???tcp?????nowait???root?????/usr/sbin/tcpd???in.telnetd
這時,telnet服務(wù)已經(jīng)關(guān)閉了,以后,如果我想讓朋友通過telnet訪問我的計算機,我只需要把#去掉,就象這樣。
telnet???stream???tcp?????nowait???root?????/usr/sbin/tcpd???in.telnetd
這時,telnet服務(wù)又被開啟,就是這么簡單。重新啟動inetd進程讓改動生效,用下面的命令。
james:~ # killall -HUP inetd
4.?守護進程
有時候在服務(wù)程序參數(shù)域中,你會看到一些選項,如:
smtp stream???tcp??????nowait???root?????/usr/sbin/sendmail?????sendmail -bs
在上一行的末尾,有“-bs”!?,表明使用b和s參數(shù),這同使用下面的命令有著同樣的效果:
hoodl um:~ # sendmail -bs
因此,如果你想為守護進程使用某項參數(shù),只要把它們加入到服務(wù)程序參數(shù)域就可以了。具體的參數(shù)可以通過man進行查詢。
5. TCP Wrappers
TCP Wrappers是保護網(wǎng)絡(luò)服務(wù)的應(yīng)用,通常用在第6列-服務(wù)程序域。
telnet???stream???tcp?????nowait???root?????/usr/sbin/tcpd???in.telnetd
TCP Wrappers使用兩個文件,/etc/hosts.allow和/etc/hosts.deny,限制某項服務(wù)的使用。Hosts.allow文件內(nèi)是允許訪問服務(wù)的主機列表,hosts.deny內(nèi)含禁止訪問服務(wù)的主機。
總結(jié)
以上是生活随笔為你收集整理的linux超级服务器inetd详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: A*,那个传说中的算法
- 下一篇: Linux管道相关命令