本文著重講述在Linux系統中如何使用xinetd(擴充的超級伺服器)機制來管理網路應用服務,講述如何增加和刪除網路服務,從而有效地保證Linux系統安全。 目前,從WWW伺服器到流行的遊戲伺服器,絕大多數都在採用Linux作為服務平台。一方面,Linux為使用者提供了多種優質的網路服務,包括Http、Ftp、Smtp、Pop3等;另一方面,服務的增多意味著更多的風險。每種服務本身都必然存在著某些缺陷,而這些缺陷很有可能被高明的駭客利用,從而對系統進行攻擊。所以,提供特定服務的伺服器應該儘可能開放提供服務必不可少的連接埠,而將與伺服器服務無關的服務關閉,比如一台作為www和ftp伺服器的機器,應該只開放80和25連接埠,而將其他無關的服務關掉,以減少系統漏洞。 Xinetd機制介紹 在Linux系統的早期版本中,有一種稱為inetd的網路服務管理程式,也叫做“超級伺服器”,就是監視一些網路請求的守護進程,它根據網路請求來調用相應的服務進程來處理串連請求。inetd.conf則是inetd的設定檔,它告訴inetd監聽哪些網路連接埠,為每個連接埠啟動哪個服務。在任何的網路環境中使用Linux系統,第一件要做的事就是瞭解一下伺服器到底要提供哪些服務。不需要的那些服務應該被禁止掉,這樣駭客就少了一些攻擊系統的機會,因為服務越多,意味著遭受攻擊的風險就越大。使用者可以查看“/etc/inetd.conf”檔案,瞭解一下inetd提供和開放了哪些服務,以根據實際情況進行相應的處理。 而在Linux 7.x的版本當中則使用xinetd(擴充的超級伺服器)的概念對inetd進行了擴充和替代。xinetd的預設設定檔是/etc/xinetd.conf。其文法和/etc/inetd.conf完全不同且不相容。它本質上是/etc/inetd.conf和/etc/hosts.allow、 /etc/hosts.deny功能的組合。 系統預設使用xinetd的服務可以分為如下幾類:標準internet服務,如http、telnet、ftp等; 資訊服務,如finger、netstat、systat;郵件服務,如imap、pop3、smtp;RPC服務,如rquotad 、rstatd、rusersd、sprayd、walld; BSD服務,如comsat、exec、login、ntalk、shell talk;內部服務,如chargen、daytime、echo等;安全服務,如irc; 還有其他服務,如name、tftp、uucp、wu-ftp。下面是一個典型的/etc/xinetd.conf檔案的例子: # vi 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 從檔案最後一行可以清楚地看到, /etc/xinetd.d目錄是存放各項網路服務(包括http、ftp等)的核心目錄,因而系統管理員需要對其中的設定檔進行熟悉和瞭解。一般說來,在/etc/xinetd.d的各個網路服務設定檔中,每一項都有下列形式: service service-name { Disabled //表明是否禁用該服務 Flags //可重用標誌 Socket_type //TCP/IP資料流的類型,包括stream,datagram,raw等 Wait //是否阻塞服務,即單線程或多線程 User //服務進程的uid Server //伺服器守護進程的完整路徑 log_on_failure //登陸錯誤記錄檔記錄 } 其中service是必需的關鍵字,且屬性工作表必須用大括弧括起來。每一項都定義了由service-name定義的服務。Service-name是任意的,但通常是標準網路服務名,也可增加其他非標準的服務,只要它們能通過網路請求啟用,包括localhost自身發出的網路請求。每一個service有很多可以使用的attribute(屬性),操作符可以是“=”、“+=”或“-=”。所有屬性可以使用“=”,其作用是分配一個或多個值,某些屬性可以使用“+=”或“-=”的形式,其作用分別是將其值增加到某個現存的值表中,或將其值從現存值表中刪除。 使用者應該特別注意的是:每一項使用者想新添加的網路服務描述既可以追加到現有的/etc/xinetd.conf中,也可以在/etc/xinetd.conf中指定的目錄中分別建立單獨的檔案。RedHat 7.x以上的版本都建議採用後一種做法,因為這樣做的可擴充性很好,管理起來也比較方便,使用者只需要添加相應服務的描述資訊即可追加新的網路服務。RedHat 7.x預設的服務組態檔目錄是/etc/xinetd.d,在該目錄中使用如下命令可以看到許多系統提供的服務: #cd /etc/xinetd.d #ls chargen cvspserver daytime-udp echo-udp ntalk qmail-pop3 rexec rsh sgi_fam telnet time-udp chargen-udp daytime echo finger pop3 qmail-smtp rlogin rsync talk time wu-ftpd 然而,上述的許多服務,預設都是關閉的,看看如下檔案內容: #cat telnet # default: off //表明預設該服務是關閉的 # description: The telnet server serves telnet sessions; it uses / # unencrypted username/password pairs for authentication. service telnet { disable = yes //表明預設該服務是關閉的 flags = REUSE socket_type = stream wait = no user = root server = /usr/sbin/in.telnetd log_on_failure += USERID } 服務的開啟與關閉 一般說來,使用者可以使用兩種辦法來對網路服務進行開啟或關閉,下面分別進行介紹。 1.使用/etc/xinetd.d目錄下的檔案進行配置 針對上面列出的關於Telnet的例子,使用者想要開啟服務,只需要通過使用vi 編輯器改寫該檔案為如下內容。然後,需要使用/etc/rc.d/init.d/xinetd restart來啟用Telnet服務即可。 service telnet { disable = no //將該域置為“no”,則表明開啟該服務 flags = REUSE socket_type = stream wait = no user = root server = /usr/sbin/in.telnetd log_on_failure += USERID } 相對應的,如果使用者想要關閉某個不需要的服務,則將上述的“disable = no”改為“disable = yes”即可,這樣就修改了服務配置,並且再次使用/etc/rc.d/init.d/xinetd restart來啟用最新的配置。 |