[Power by FreeBSD]
顏國雄 2001/02 初
各種網路服的啟動與關閉
2004/06/24 修改 

認識 daemons

一般我們會稱那些可以提供網路服務的程式為 daemons ,稍微觀察一下,一些提供服務的程式:telnetd , sshd , httpd , ftpd , ...... 等,呵∼檔名的字尾都是 d ,哦∼∼ d=daemons

daemons 在提供網路服務可分為兩方式:

  1. stand-alone 模式
  2. inetd 模式

stand-alone

這種方式, daemons 直接執行啟動服務的程序後,由該程序自己監聽 TCP/UDP 的 port ,等待 clients 端的連線,當 clients 端連線過來時,它會再啟動一隻 (子程式) 來服務, 這種 daemons 我們稱為 stand-alone 模式。它的好處是,當同時有很多人連線,因為程序早己啟動,反應會較快。

一般,像 HTTP 的網頁服務、負載較大的 FTP 、SMTP、BBS、Samba ......等,存取頻率較高的服務,大多會採用 stand-alone 的方式,以應付大量的 client 端。

inetd

對流量不大或是使用率不高的服務來說,stand-alone 的 daemons 有個缺點:因為每個 daemons 都必須事先執行在哪兒等客人上門,明明用不太到仍要佔系統資源。

於是,超級服務員 inetd (Internet Super-Server) 出線囉!它是一個可以同時監聽很多 ports 的 daemon,它會依 clients 所要求的服務來執行提供該服的 daemons,這樣,多個服務就只需要一隻程式,節省了不少的資源。

不過對使用率高的 daemons 來說,還要別人 (inetd) 呼叫才啟動,會形成有反應較差的缺點,這種靠 inetd 來啟動的 daemons 我們就稱為 inetd 模式。

像 telnet , pop3 , imap ...... 等負載比較不大的服務多採 inetd 模式。

 

控制服務開/關

FreeBSD 預設可以控制服務開/關的地方有:

/etc/rc.conf 這個檔可以說是 FreeBSD 很重要的設定檔,裡面的設定包羅萬象,其中包括了告訴系統要啟動那些服務:
  • inetd_enable="YES" 啟動『超級服務員』
  • sshd_enable="YES" 啟動 ssh 服務
  • named_enable="YES" 啟動 DNS 服務
  • sendmail_enable="YES" 啟動 SMTP 服務
  • nfs_server_enable="YES" 啟動 NFS 服務(還要搭配其它選項)
  • portmap_enable="YES" 啟動 portmap 服務
  • nis_server_enable="YES" 啟動 NIS 服務
  • firewall_enable="YES" 啟動防火牆 (還要搭配其它選項及規則)
  • natd_enable="YES" 啟動 NATD ,進行 NAT 做 IP 轉換(還要搭配其它選項)

還有很多,可以參考 /etc/defaults/rc.conf
把要用的複製到 /etc/rc.conf 中
(千萬別偷懶直接改了 /etc/defaults/rc.conf 這是不好的習慣),
如果下次開機不想自動打開服務則把 YES 改成 NO (部份有其它的選項,建議參考 /etc/defaults/rc.conf 中的說明)

/etc/inetd.conf 在 Unix/Unix Like 的 OS 中通常有個叫 inetd 的程式,大家都給它一個外號叫『超級服務員』,
它會讀取 /etc/inetd.conf 中的設定,然後依設定去監聽指定的 port ,當有人要連該 port 時就會叫醒(啟動)設定檔中指定的程式來提供服務,
一般的 telnet,ftp,pop3,imap......等都是用這種方式,和另外一種叫 standalone 的方式比較起來,有個好處:服務是在需要時才啟動,平時不用在那裡待命佔用記憶體

如果想將某個服務關掉時,只要將該服務的那行開頭打個井字號 # ,再讓 inetd 重新讀取 /etc/inetd.conf
(kill -HUP `cat /var/run/inetd.pid`)即可
/etc/rc.local 這個檔中的命令會被 FreeBSD 在開機時自動啟動,
所以可將非標準的服務啟動程式放到這裡
感覺起來有點像 DOS 中的 autoexec.bat
現在大多會建議自行仿 /usr/local/etc/rc.d/*.sh 的格式也寫鍋 xxxx.sh ,然後放在 /usr/local/etc/rc.d 中
/usr/local/etc/rc.d/

在這個目錄中凡是檔名是 xxxx.sh (結尾是 .sh 的),系統會在開機時自動執行該檔案的內容

所以當你安裝可提供網路服務的 FreeBSD packages 或 ports 後,通常會在 /usr/local/etc/rc.d 中新增一個叫 xxx.sh 的,
例如:apache.sh , samba.sh , ......

當你不想在下次開機時自動啟動該服務,把檔名改一下即可,
例如:將 apache.sh 改 apache.sh.bak ,下次就不會啟動 apache 囉

那些 *.sh 還可以用來手動啟動/停止服務,
例如執行下列指令,就可以將 apache 馬上停下來:

/usr/local/etc/rc.d/apache.sh stop

例如執行下列指令則可以啟動 apache:

/usr/local/etc/rc.d/apache.sh start

特別說明:

如果執行前述的指令無法啟動 apache 卻出現下列的訊息

.: Can't open /usr/local/etc/rc.subr: No such file or directory

代表系統中少安裝了 rc_subr 的 port/package,這個是 FreeBSD 取經自 NetBSD 的新機置。解決的方法是先安裝 rc_subr ,並在 /etc/rc.conf 中加入下面這一行:

apache_enable="YES"

少了這行,即使有 /usr/local/etc/rc.d/apache.sh ,系統也不會啟動 apache,換句話說,當我們不想讓 apache 自動啟動時,可以將 /etc/rc.conf 中的 apache_enable="YES" 改為 NO,不用像前面所說的去改 /usr/local/etc/rc.d/apache.sh 的檔名了,這部份和以前的版本有滿大的不同。

 

怎麼知道目前啟動了什麼服務

想知道目前系統有什 daemons 以哪個協定在哪個 port 監聽提供服務可以執行 netstat -a


root@www [/root] # netstat -a | more
Active Internet connections (including servers)
Proto Recv-Q Send-Q Local Address Foreign Address (state)
tcp4 0 0 *.3306 *.* LISTEN
tcp4 0 0 *.http *.* LISTEN
tcp4 0 0 *.ssh *.* LISTEN
tcp4 0 0 *.submission *.* LISTEN
tcp4 0 0 *.smtp *.* LISTEN
tcp4 0 0 *.imap *.* LISTEN
tcp4 0 0 *.pop3 *.* LISTEN
tcp4 0 0 *.finger *.* LISTEN
tcp4 0 0 *.login *.* LISTEN
tcp4 0 0 *.shell *.* LISTEN
tcp4 0 0 *.telnet *.* LISTEN
tcp4 0 0 *.ftp *.* LISTEN
tcp4 0 0 *.swat *.* LISTEN
tcp4 0 0 *.sunrpc *.* LISTEN
tcp4 0 0 localhost.domain *.* LISTEN
tcp4 0 0 www.domain *.* LISTEN
udp4 0 0 *.ntalk *.*
udp4 0 0 *.biff *.*
udp4 0 0 *.sunrpc *.*
udp4 0 0 *.1024 *.*

或是用 netstat -an


root@www [/root] # netstat -an | more
Active Internet connections (including servers)
Proto Recv-Q Send-Q Local Address Foreign Address (state)
tcp4 0 0 *.3306 *.* LISTEN
tcp4 0 0 *.80 *.* LISTEN
tcp4 0 0 *.22 *.* LISTEN
tcp4 0 0 *.587 *.* LISTEN
tcp4 0 0 *.25 *.* LISTEN
tcp4 0 0 *.143 *.* LISTEN
tcp4 0 0 *.110 *.* LISTEN
tcp4 0 0 *.79 *.* LISTEN
tcp4 0 0 *.513 *.* LISTEN
tcp4 0 0 *.514 *.* LISTEN
tcp4 0 0 *.23 *.* LISTEN
tcp4 0 0 *.21 *.* LISTEN
tcp4 0 0 *.901 *.* LISTEN
tcp4 0 0 *.111 *.* LISTEN
tcp4 0 0 127.0.0.1.53 *.* LISTEN
tcp4 0 0 192.168.1.1.53 *.* LISTEN
udp4 0 0 *.518 *.*
udp4 0 0 *.512 *.*
udp4 0 0 *.111 *.*
udp4 0 0 *.1024 *.*

 

常見的網路服務程式

FreeBSD 提供了一個穩定又有效能的網路平台供我們架設各種網路服務,除了一些內建的服務程式外,我們可以利用 ports 或 packages 來新增自己所需的網路服務。

內建的服務程式

服務名稱 程式 相關設定檔
DNS /usr/sbin/named /etc/rc.conf
/etc/namedb/*
SMTP /usr/sbin/sendmail

/etc/rc.conf
/etc/rc.sendmail
/etc/mail/*

FTP /usr/libexec/ftpd

/etc/inetd.conf
/etc/ftpusers
/etc/ftpchroot
/etc/ftphosts
/etc/ftpwelcome
/etc/ftpmotd
/var/run/nologin
SFTP /usr/libexec/sftp-server  
SSH /usr/sbin/sshd

/etc/rc.conf
/etc/ssh/sshd_config
/etc/ssh/*

TELNET /usr/libexec/telnetd

/etc/inetd.conf
/etc/services
/etc/gettytab

另外,NFS , NIS , TFTP , Kerberos , PPP over Ethernet , time , ...... 等還有很多內建的服務程式,這些都可以在 /usr/libexec 或 /usr/sbin 中找到。

 

外掛的網路服務

服務名稱 ports
HTTP (Web) /usr/ports/www/apache13 (1.3.x)
/usr/ports/www/apache2 (2.x)
SMB and CIFS /usr/ports/net/samba (2.x)
/usr/ports/net/samba-devel (3.x)
DHCP /usr/ports/net/isc-dhcp3-server

大部份的網路服務程式應該都已經納入 FreeBSD 的 ports collection 中,可能要花時間尋一下寶囉!


 


 基礎: 書籤 - 簡介 - 安裝 - Slices - Unix基礎 - 基本指令 - 首次登入 - 目錄架構
 系統: 核心編譯 - 系統升級 - Packages - Ports - PicoBSD - Quota
 網路: 服務管理 - WWW - FTP - MAIL - DNS - Samba - NFS - DHCP - webmin - IMP - OpenWebmail
 其它: Backup - UPS - 系統安全 - ipfw&natd - 撥接服務 - 計時制ADSL - 雜記 - FAQ

北市文山區力行國小顏國雄