認識 daemons
一般我們會稱那些可以提供網路服務的程式為 daemons ,稍微觀察一下,一些提供服務的程式:telnetd , sshd , httpd
, ftpd , ...... 等,呵∼檔名的字尾都是 d ,哦∼∼ d=daemons
daemons 在提供網路服務可分為兩方式:
- stand-alone 模式
- 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 中,可能要花時間尋一下寶囉!
北市文山區力行國小顏國雄
|