著作權聲明
本書著作權爲王俊斌所有,並受中華民國 、&國
際著作權法所保護=
作 者:王俊斌
發行人:林麗芬
總編輯:許耀豪
出版統壽=劉慧楨
編 輯 : Jessica
出 版:博碩文化股份有限公司
登記證:局版台業字第6261號
地
址:
台北縣汐止市新台五路一段
112號〗0樓 A 楝
電
話:
(02) 2696-2869
傳
真:
[02) 2696-2867
網
址:
http :// www . drmaster . com.tw
郵撥帳號 :
17484299
印
刷廠 :
大然伊士曼彩色印刷股份有限公司
律師顧問:劉陽明
出版曰期;西元2002年5月初版
ISSN 號碼: 957-527-484-9
博碩書號: OS 20087
建議售贗: 460 元
商標聲明
Microsoft® ' Windows® 等商標爲微軟公司在美
國或其它國家的註冊商標或商標。
言中引用之商慄及產品名稱分屬&公司所有,本
-拜引用純屬介紹之用 • 拉無任何侵害之意。
本書封面所使用的 BSD 小惡魔圖片… 版權所 有荇
爲 Marshall Kirk McKusick * 並獲授權 使用。
有限擔保責任聲明
雖然編者與出版社己全力編 輯與製 作本書,畦
不擔保本其所附媒體無任何瑕疵 : 亦不爲
使用本書而引起之衍生利益損失或意外損毁之
損失擔保貴任。即使本公司先前已被告知前述
損毀之發生。本公司依本書所負之責任•僅限
於台端對本書所付之實際價款。
FreeBSD 入門應用/王俊斌著,初版 •,台
北縣汐止市:博碩 文化, 2002【民91 ]
面:公分
ISBN 957-527-484-9(^)
L 作業系統
本書如有破捐或裝訂_誤『請寄回本公司更換
312.953
91007918
筆者第一次接觸 FreeBSD 是退伍後剛進人大學時,由於對 UNIX 系統的興趣,偶然
的發現在網路上有許多人討論 FreeBSD 這套作業系統,因此我才下定決心要學習
FreeBSD 。剛接觸 FreeBSD 時,我連最基本的 UNIX 指令都不暸解,在使用上也常常碰
到問題,但總不因此而放棄。 ^
在一開始時,每當我碰到問題時,第一步便是到 BBS 上的 BSD 群組發問,在合灣有
許多 FreeBSD 的使用者,它們都非常熱心且樂意為新手解決問题。但每次遇到問題時就
發問,雖然大都可以獲得解答,但一直問這種基礎的問題讓我覺得很浪費別人的時間。
因此,筆者開始從系統中的 man page 及網路上現有的文章尋求協助,卻意外地發現資
料異常地豐富。
在 FreeBSD 的社群中,有許多熱心的高手,他們總不吝於和人分享使用經驗。筆者
對於高手們將自己的使用經驗故在網路上和他人分享十分佩服,因此,我也想效法他們
的精神,將自己的學習過程製成網頁。原本筆者的網頁已幾近完成公開階段,但有感於
目前市面上闕於 FreeBSD 的書籍有限,且大多歷時己久,相對於其他 Linux 作業系統而
言, FreeBSD 的能見度實在太低了。因此,我才決定將這些内容製成書籍。
對於初學者而言,學習新的作業系統難免會遭遇到一些瓶頸,但每當這些困難獲得解
決時,就是一次新的成長。因此,當讀者使用上遇到困難時,千萬不要因而氣餒,而放
棄了學好 FreeBSD 的懺會。本書以初學者為導向,對於書中所提及的細節都經詳細的测
試,以期使初學者能順利登上 FreeBSD 的殿堂。
讀者可以由本書架構發覺,本書將帶領讀者從基本的系統使用、網路伺服器架設到深
入系統管理。筆者將個人在管理學校伺服器的經驗分享給讀者,希望對有心學習
FreeBSD 的使用者能有莫大的收獲。本書考量許多第一次接觸 FreeBSD 的使用者大多也
是第一次接觸 UNIX 作業系統。因此,在本書的最後二個章節,説明了 UNIX 指令的應
用,期望初學者能對 UNI . X 系統的使用上有更多的認識。
本書的完成除了筆者本身外,還要感謝在筆者學習過程中 t 經幫助過我的高手們,特
別感謝中央研究院計算機中心張毓麟先生對於本書第十一章 Sendmair 設定的指導,更感
謝 FreeBSD 提供我們這樣優秀的作業系統。
王俊斌2002年3月30曰於中央大學
FraeBSD 人 行應相口 □ □ □厂
Chapterl FreeBSD 簡介
1,1 什麼是 FreeBSD ?. -2
12 為什麼要選擇 FreeBSD ——3
1.3 為什麼不選擇 FreeBSD 1 —— . 4
1.4 FreeBSD 的版本命名規則 . 5
1.5 如何取得 FreeBSD ?. . .-6
1.6 如何得到更多資訊? . 7
1.7 本書光碟使用說明-- B
Chapter2 安裝 FreeBSD
2.1 安裝前需知——-- 12
2 AA 如何取得 FreeBSD . 12
2. U 安装方式的取決 . .——14
2丄3硬碟分割表的槪念 . .……14
2丄4硬碟空間的配霤 .一 -15
2.1 —17
22系統安裝 . 17
2.2.1 開機- . 17
2.2,2 設定核心- . is
2.2.3 開始自訂安裝 . . .— 20
2_2,4分割硬碟-- 21
2.2.5 安裝自訂套件 . .……26
2.2.6 選擇安裝來源 - - 27
2,2,7最後的設定 .一一.一29
2,3第一次登入系統 .. — 34
2,3.1 更改密碼 . 34
2.3,2 新增第一位使用者 . 35
2,3,3基本指令 : fHS --38
2.3.4 FreeBSD 的目錄結搆 ..—- 39
1
Chapter3 編譯核心
3.1 為忭麼要重新編譯核心 .— 44
3.2 修改核心- - - - 45
3,2,1基本的設定- . 46
3.2.2 一般選項 .---- 一 一一一 47
3+2+3各種檔案系統的支援 .— 48
3,2.4 軟硬籠相容性設定- . .——49
3.2.5 匯流排及軟碟機 .— 51
3.2.6 IDE 介 面裝置 ... 51
3.2.7 SCSI 裝置- .——- -- 52
3.2.8 基本週邊設備 - - -53
3.2.9 網路卡 設定- . 56
3,210虛擬裝置—— . 一 — ——— 58
3,2 J 1 USB 装置 . 59
3212音效裝置. 60
3.3 編譯與安裝 . . .— 61
3+3+1編譯新的核心- ——- 61
3+3+2 新的核心有問題 - - -62
Chapter4 建立友善的介面
4,1使用者介面設定- 一64
4丄1為什麼要更改設定 - - 曰 4
4.1.2 csh-cshrc "**-- . . .
4 P 1 f 3 csh.login -- . . . ^
4 . 1.4 使用中文終端機- - -——66
4.2 登入前後的訊恚- . ——67
4.2.1 登入後的訊息 .. -67
422登入前的訊息 -. 67
CHapter5 使用者管理
5.1 帳號管理……. .
5.U 新增使用者一 ..
5.1.2 /etc/group 介紹 .
5.1.3 /etc/masterpasswd 介紹 -
5.1.4 刪除使用者 - -
5.2 磁碟配額- .-
5.3 大量新增帳號- . .……
5,4備份與移轉-
5,4 J 備份 — - -- - -
5+4+2 移轉 .. .
5,5使用歷程記録- . .……
5.5,1 記錄使用者指令 ..
552 監看使用者 --
5.5.3 控制 root 的使用 ■ 一 ——
Chapter6 網路設定
6.1 固接網路 - -
6.1.1 使用 /stand/sysinstall -
6 .\ 2 手動設定 - -
6.2 ADSL . -
6.2.1 編譯核心 .. .
6.2.2 修改 / etc / ppp / ppp.conf
6.2.3 修改 / efc / rc.conf ,■—』
624分享網路運線 _ ————
6.3 Cable Modem.
6.3.1 核心設定一 . .
6.3.2 設定 /etc/rc.conf - -
613連線分享--
6.4 Modem 撥接 - - -
6.4.1 編輯 / etc / ppp / ppp.conf
6.4.2 編輯 / etc / ppp.linkup ---
6 A3 網路分享 .. 103
6,5網路相關指令 . .…… 一103
6.5J telnet . 104
6.5.2 ftp . . 104
6.5.3 ping - - 105
6.5.4 nslookup - 106
6.5.5 nefstaf . 106
6.5.6 traceroute --——106
6.57socksfat . . —— .-107
6.5.8 ifconfig - 107
6.5.9 tcpdump -- 108
6SWtynx . . 108
I Chapter7
; /etc 目錄下的檔案介紹
1 7,01 aliases.. 110
7,02 crontab .. 112
7.03 csh.cshrc . . 114
7.04 cshJogin - 115
| 7.05 cshJogout- - - 115
| 7.06 defaults/make-conf. -------- 116
7.07 defaults/rc.conf . . 116
7 08 fbtab. . . . . ——117
7.09 fstab- 117
7.10ftpusers. . . 119
7.11 gettytab .. . 120
7.12 group .. 121
7.13 host.conf.. . --121
7.14 hosts—.. 121
7.15 hosts.allow - 122
7.16 hosts,equiv. 122
717 hosts」pd .. -122
7,18 inetd.conf — . 123
72
72
74
75
77
78
80
81
82
82
83
S3
84
85
88
88
91
92
93
94
95
97
98
98
99
100
101
101
103
FreeBSD 入門廳坩 [
7.19 iocaltime- -- -
7.20 locate, rc -- — ..
7.21 login,access .. .
7.22 login, conf . .
7.23 mail.rc —. . ..
7.24 manpath.config - - -
7.25 master.passwd..
7.26 motd ——- -
7.27 namedb/ ..
7.28 netstart - - -
7.29 networks -— ..
7.30 newsysbg conf -- -
7.31 passwd .. . . .
7.32 pccard_ether - -
7.33 pertodic/daily ------- . .
7.34 periodic/weekly . ..
7.35 periodic/monthly. .
7.36 phones — ...
7.37 ppp/ ....
7.38 printcap- . . .
7.39 profile -
7.40 rc —..
7.41 rc.firewalj.. .
7.42 rcJocal- -
7.43 rc.* - - - -
7 44 resolv.conf - - - 一 …
7.45 services . .. . .
7.46 shells — . ..
7.47 syslogxonf. -----.
Chapter8 軟體安裝
8.1 槪論 --- …… - -
8.2 使用 package -
8.2.1 安裝 Package - -
8.2.2 管理 Package — ——-——144
8.3 使用 ports. . 145
ChapterQ X Window 的使用
9,1 安裝 X Window. 150
92 X Window 下的中文軟體 …… ——156
9,2.1 中文終端機 . 156
9,2-2 巾文輸入 .. 158
Chapter 10 網頁伺服器
10.1 安裝 MySQL- .. . 165
10.2 安裝 apache -- 169
10.2J 使用 ports 安裝—— - -169
10义2自行編譯 .. 169
10.2,3 後遒系統設定 . 175
10,3 httpxonf 說明 . 一175
10A1 全域設定部份 . 一一 一 176
m 么2主要主機設定 - - 179
10,3,3虛擬主機及 SSL 的設定-——196
10.4phpJni 說明 . . . 200
10.5 .htaccess 應用一 --- 218
10.6 虛擬主機 .. 220
107 MRTG 流置分析 - 221
10.7.1 安裝 SNMP. . . 222
H)J. 2安裝 MRTG.— 223
1(X8 伺服器管理 - 225
10.8J apachectl - - -225
10.8.2 ab —. 226
10.8_3壓縮備份 log ---229
123
123
123
124
125
125
125
126
127
127
127
128
129
129
129
131
131
132
132
132
132
133
133
133
133
134
134
134
134
134
136
138
Chapter 11 郵件伺服器
11-1 槪論一……. .
11.2 具身份認證的 sendmaih —.
11.2.1 安裝 Cyrus SASL. ..
R2.2 安裝 Sendmail. ——-——
11 .2.3 Client 白3言 S 定- - -
11,3 POP3 設定 .. . .
11.4 虛擬郵件主機- .. .
1L4J DNS 設定- --—— •一
H.4.2 對映到同一台機器的真霣使用者一
11.4.3 可以擁有虛擬使用者一 ---
IlSopenwebmail . .
11.5.1 系統需求 .—. .
1 1.5,2 安裝 Open Web Mail ---
Chapter 12 DNS 伺服器
12.1 DNS 槪論一-
12.2 named.conf . . . .
12,3正解檔設定 一-. ..
12.4 反解檔設定 一一一 . . .
12.5 最後的設定
Chapter 13 NAT 及防火牆
13.1 槪論- . . . . . .
13丄 1 NAT. . . ..
13 丄 2 具封包過濾的橋接器 . 一 -
1 3.2 NAT —— p -- —— — __一
1 3.2. 1 1S. 定 k0rnol - -
1 3.2.2 設定 rc.conf - - - -
1 3.2.3 設定 fCnfirBwoll - -- -- -- -- -- -- -
13.2.4 client 端的設定-267
13.3 防火牆 ..— -一•一 268
13.3.1 fpfw 規則 -- -. 270
13J.2 範例" . 275
】313—些小建議一 . ..277
13.4 封包過濾橋接器……-……一- -278
Chapter 14 Proxy Server
14.1 槪論- - - —284
14.2 安裝 Squid ... 285
14.3 Squid.conf 介紹- . 288
14.4 Transparent Proxy . . 297
14.5 Proxy 管理 — 299
14.5.1 log 檔移轉 . 299
14.5,2 關機注意事項 一一 -299
| mb hi) hi mm wmm mm mm\ mm 讎
Chapter 15 資料庫系統
15*1 槪論 ■ — 302
15.2 SQL 語法介紹 ... 304
15,2*1 CREATE 305
15.2.2 ALTER. 307
15.2.3 DROP . 308
15.2.4 INSERT —— .. 308
15.2.5 SELECT ——. .— 309
15.2.6 UPDATE. ——. .— 310
15.2.7 DELETE.*. 311
巧 .2.8 製成 scripH 當-311
15.3 MySQL 管理 - --……313
15.3.1 維護密碼安全 - — — - -—313
15.3.2 讎份資料庫 . 314
使用者管理 . 315
】 5,3,4 如何更改使用者密碼 -318
232
233
233
234
238
239
240
241
241
242
244
245
246
250
252
254
256
257
262
262
263
264
264
265
266
—0 Fr®eBSD 入門應用]
Chapter 16 Samba 網路芳鄰
16.1 安裝 Samba -- - -320
16.2 使用 swat 設定 . 324
16,3 windwos 設定 .-. 327
1匕4 存取 (VIS Windows 的網芳資料-“329
Chapter 17 系統安全
17.1 槪論 .一_- ——-……332
17,2系統管理 . — 333
17+2+1執行程式的 路徑一 .— 333
1 122 降低安裝軟體的風險 - —- 334
\ 7.23 kernel Security Level . 334
1 7.2.4 檢視系統記錄 -— . . 336
1725資料的保全 . . . 337
17.3 帳號管理 . . . .. 341
17.3」慎選合宜的密碼 - - 341
17,3.2 控制 root 的使用 —. 342
17.3.3 限制系統賢源的使用 .-343
17,3,4限制 crantab 及 at 的使用一 . 344
17.4 網路管理 - .—-345
17A1 關閉不必要的服務- 345
17.4.2 使用 ssh -. .—— . . 348
17 A3 TCP Wrapper - - 348
17A4ipfw ——-- 349
Chapter 18 指令應用
18.1 基本 UNIX 指令—— .—- 352
18.1.1 槪論 . 352
18.1.2 man -- 353
18,1.31s . . 355
18 丄 4cd —. 356
18J + 5pwd . . 357
18,L6cat ------- . 357
18.1.7 more . 358
18 J ,8 16 SS - -359
18.1.9 head . .. 一一一 一 • 359
I8.].10tail .—— 360
I8.U1 w . 360
18JJ2who .— — 360
18 丄 13 date - 360
18JJ4ca! . 361
18 丄 15 echo —— 361
]SJJ6dea . . 362
18.2 系統管理指令 - - - -362
18.2.1 ps. 362
18.2.2 kill -—— . .——363
18.2.3 top . .——364
1 8.2.4 systat 364
18.2.5 watch - -365
18+2+6 alias - - 366
18,27 bg .. . 366
18.2.8 jobs —— .. 367
1S + Z9 fg ——. . 368
18.2.10 ntpdate — — — - -368
18.2. 11 sync -- 368
18.2.12 shutdown - 369
18.2.13 reboot —. 370
18.2.14 su. . . 370
18.2.15 exit.———
18.2.16 dmesg -—
18.2.17 lastcomm -
18.2.18 cronfab --
18.2.19 uptime --
1 8.2.20 sysctl -—
18.3 使用者管理指令 - -
18.3.1 vjpw . . .
18.3.2 groups —- -
18.3.3 adduser. .
13.3.4 pwd_mkdb --
18.3-5 rmuser.
18.3.6 passwd -
18.37 chpass - -
18.3.8 mesg —---
18 + 3 + 9 write - - -
)8 + 3J0fast ——. . .
18.4 擋案系統管理指令 .
18.4.1 touch -— --
18.4.2 cp ---
18.4.3 In.
18.4.4 mkdfr -
18.4.5「m —. . .
18.4.6 mv -
18.4.7 cff. ——--
18.4.8 du. .
18.4.9 chmod - -
18A10 chown -
18.4J1 chflags -
1BA12 umask.
. .
1SA1 4 wc - -
18A15 whereis - —
18.4J6 which -
18A17find … .
18,4,18 grep. 397
18.4,19tar - - —397
18.4.20 fsck . . 398
18.4.21 mount ——- 399
1 匕 422 unmount - - 400
18.5 網路相 關指令 — ………… -401
18.5.1 ping -- 401
18.5.2 ifconfig. 402
18.5.3 arp. 402
18.5.4 traceroute - - -403
18.5.5 netstat -- —- 403
18.5.6 sockstat - 405
18.5.7 maii ---- - ——406
1 8.5.8felnnet - 408
18,5.9 ssh --408
18 + 5J0ftp . 409
18*5J 1 nslookup -- 410
18 + 5J2dig - 410
18,5J3fcpdump -410
371
371
371
372
374
374
377
377
377
378
379
380
380
381
381
381
382
383
383
383
3M
385
386
386
387
387
388
391
392
393
394
394
395
395
396
_ 0l:Fr«»BSD 入 M 應用二
Chapter 19 Shell Script
19.1 槪論 一一一一一 .-----
19.2 變數的使用一 - —
\92A 變數的使用 ----- —— .
1922程式會自動定義的變數-
19,2,3系統內定的標準變數-
空變數的處理 一一---- — ——
19.3 蓮算符號 . —
19A1 四則運 S- - —-
1912簡單的條件判斷 -----..
1 9.3,3 latest 來比蔽字罜及數字-
19.3.4 以 test 來處理檔案 - -
1 9.4 -- - -
19.5 流程控制 . . ——
15,5.1 if 的條件判斷- . .
15,5-2 white 及 until 迴圏
15五3 for 迴圈-
1 5.5 T 4case 半[]斷 - - - —■——
19.6 函式的運用 - —
附錄 A 版權宣告
A.1 The FreeBSD Copyright . . 440
A.2 The 4.4 BSD Copyright — ------- 441
/U GNU GENERAL PUBLIC LICENSE--- 443
M GNU LIBRARY GENERAL PUBLIC LICENSE 453
I
附錄 B Ports 軟體分類列表
I
! mC
S# FreeBSD 安裝光碟
C.1 燒錄 RELEASE 版安裝光碟 —— ——474
C.2 燒錄 STABLE 阪安裝光碟 —— ----- - 477
414
415
415
418
420
420
422
422
424
425
426
427
429
429
430
432
433
435
FreeBSD 入 n 應用 □ □□□□□□=_ ...
1.1 什麼是 FreeBSD?
我 想大家 都知道 Microsoft Windows 是一套作業系統, FreeBSD 也是一
套作業系統。 FreeBSD 是一個可以在 Intel 相容個人電腦、 DEC Alpha 或
PC98 架構的電腦上執行的 UNIX 作業系統。大家應該聽過另一套 UNIX
的作業系統 Linux ^ FreeBSD 也是一套免費的作業系統。它可以讓我們的
個人電腦變成先進的工作站,更穩定地提供你所需的網路服務。
FreeBSD 作業系統相當容易取得及安裝,除了經由傳統的光碟安裝外,
它也可以經由網路安裝、 MS DOS 分割區安裝等等。當然,我們也可以
在電腦中同時安裝多種不同的作業系統,例如 Windwos 98 和 FreeBSD 同
時並存也是件+分容易的事。
在 FreeBSD 上的應用軟體相當的多,也都可以免費取得,由於
FreeBSD 的穩定性高且功能強大,因此許多大型網站都以它爲作業平
台,其中最知名的就是 YAHOO! 。 Yahoo 是一個流量相當大的入口網站,
他們選擇以 FreeBSD 爲作業平台,由此可知 FreeBSD 的優異性。除此之
外,在台灣, FreeBSD 普遍被應用於學術網路上,許多大專院校的伺服
器都是使用 FreeBSD 來提供網路服務。
在寬頻網路逐漸普及的台灣,每個人都可以自行架設一台網路伺服器,
以 FreeBSD 來提供網路服務(如網頁、郵件、檔案存取 等)。値得一 提的是
FreeBSD 並不像 MS-Windows 一樣每每要求使用者升級電腦才能使用 D
FreeBSD 對於硬體的要求很低,你可以用一台 Intel 586-133MHz 的舊電腦
來安裝 FreeBSD ,這也算是廢物利用吧。
chapter 1
FreeBSD 舊开
1.2 為什麼要選擇 FreeBSD ?
現在的個人電腦作業系統市場中,是以 MS-Windows 獨大,但在網路伺
服器市場中, UNIX 系統的使用率可不輸 MS-Windows 喔。我個人認爲
MS-Windows 之所以會有那麼多的使用者,主要是因爲它的使用者介面對
初學者而言較容易操作,再加上許多軟體的配合及盜版的助長,安裝軟
體只要一直按下一步就完成。使得使用者即便它的穩定性不高也得乖乖
的接受。 I
其實初學者沒有試過其他的作業系統才會有這樣的誤解,因爲一直用
MS-Windows 才會認爲當機是無可避免的事,當機對於 MS-Windows 或許
是無可避免,但在其他 UNIX 系統中可不常見。在 UNIX 系列的作業系
統中,也可以有像 MS-Windows 的圖形介面,幾乎所有在 MS-Windows
上可以做的事,在 FreeBSD 上都可以做得到,唯一的不同點是你不必花
錢去取得你想要的功能。包括排版、圖形處理、 MP3 、多媒體、網路芳鄰
等等都可以在 FreeBSD 中做到。
說了這麼多,我想再和低效能的 windows 系統比較己經沒什麼義意
了。然而,有這麼多的免費 UNIX 作業系統中,爲什麼要選擇 FreeBSD
而不使用其他作業系統 (如 Linux ) 呢?在網路上在討論這個問題時,每每
會引發每個作業系統使用者的激辯。對於要使用何種作業系統,除了使
用者偏好外,還有許多指標可以提供我們參考。
BSD UNIX 系統可以說是網路作業系統的始祖, FreeBSD 是眾多 BSD
UNIX 分支中的一個,它繼承了 BSD 系統的高性能與可靠性。自從 1993
年 FreeBSD 推出 1.0-RELEASE 以來, FreeBSD 開發團隊便致力於系統的
調校,使其發揮絕佳的效能。在 FreeBSD 圑隊的統籌努力下,使它比起
0 FroeBSD 入門應用
其他免費的 UNIX 作業系統更有結構。在 FreeBSD 上有許多支援的免費
軟體,這些軟體大都已移植收錄於 FreeBSD ports 中,使得我們在安裝軟
體時變得十分輕鬆。 FreeBSD 是一套眞正 32 位元的作業系統,具有高效
能核心架構、動態函式庫共享、絕佳的網路功能,比起其他商用 UNIX
系統毫不遜色。
我覺得 FreeBSD 總部統籌發展 FreeBSD 是一件很棒的事,所有的問題
回報都可以統籌管理並予以更新。 FreeBSD 推陳出新的速度相當快,每
一次安裝都確保這個版本不會有上一版的缺失。所以在 Linux 或 MS-
Windows 中「新版本不一定是最好」的定律並不適用於 FreeBSD -但這
並不意味著你必須不斷重新安裝系統, FreeBSD 總部隨時會發佈最新更
新的檔案提供下載,而且如果使用 CVSUP 就可以和更新版的 FreeBSD 保
持同步更新。
1.3 為什麼不選擇 FreeBSD ?
許多企業選擇使用目前大多數人使用的 MS-Windows 做爲一般作業用
個人電腦的作業系統當然無可厚非。但以 MS-Windows 做伺服器,除了
資訊人員的偏好外(或許因爲不會使用其他系 統吧” 還有部份原因是爲了
在企業內資訊人員技術不足時,能求助於系統供應商。而 FreeBSD 是免
費的,企業也害怕有狀況時無人可以支援,這對企業是很重要的一項因
然而, FreeBSD 的使用人數其實很多,而且使用者都+分熱心,在台灣
的 BBS 討論區上,許多問題都可以獲得解決。這當然還不夠,現在有很
多顧問公司提供 FreeBSD 的顧問服務,可以提供企業這方面的服務。雖
chapter 1
FreeBSoM ?>
然說 FreeBSD 的系統穩定,但在應用上如果沒有寶訊人員的支援,很難
能在企業中存活。我相信大部份的資訊人員都受夠了 MS-Windows 的折
磨,這是我們該站起來的時候了,只有經由我們的主動學習,不屈不撓
的精神,才能創造自己及企業的價値。
1.4 FreeBSD 的版本命名規則
FreeBSD 每出一個新的版本都是以 FreeBSD A.B.C-TAG 來作爲命名的
方式,例如 FreeBSD 4.5-RELEASE 或 FreeBSD 2.2.8-RELEASE °
m A- 主要版本編號
矚 次要版本編號
矚 C- 修正版本編號
闕 TAG- 名稱標籤,如 RELEASE 、 STABLE 、 CURRENT 等
世界各地活躍的高手們組成 Core T^eam 對系統原始程式碼做開發和維
護,幾乎系統原始程式碼每天都會有新版本和修正除錯。系統工具程
式、驅動程式等等,例如 Ports 內的程式版本也常常更新。 FreeBSD 的
Core Team 爲了兼顧發展新功能和穩定性,都會有一個實驗性的版本,以
開發新功能爲主,稱爲 CURRENT ,而 FreeBSD 正式發行的版本稱爲
RELEASE 版本,推出 RELEASE 之後會不斷的更新該版本以力求穩定
性,稱之爲 STABLE 。
目前最新的 RELEASE 版本是 FreeBSD 4.5-RELEASE ^由一個 Team 負
責,同時還有一個 Team 負責開發 FreeBSD 5.0-CURRENT 。而
4,5-RELEASE 會不斷的更新,進而推出 STABLE 版本。 STABLE 及
交大資工 (ftp://freebsd.csie.ndtU.edu.tw)
中央資工 (ftp://freebsd.csie.ncu.edu
中研究 (ftp://ftp2 tw.freebsd.org)
還有許多 ftp 1 . tw.freebsdorg 到 ftp 9. tw.freebsdorg 都是在台灣的 mirror 站台
入 n 釀觸 □ r
CURRENT 推出時,在 FTP 中你會看到類似這樣的編號 FreeBSD 4.5-
20020323-STABLE 或是 FreeBSD 5.0-20020321-CURRENT ,其中
20020321 就是該版本推出的日期。
1.5 如何取得 FreeBSD?
FreeBSD 可以經由免費取得,我們可以自各大 FTP 站台下載 ISO 檔,
自行燒錄成光碟來安裝,也 m 以透過 ftp 站台以網路安裝。國內對
FreeBSD 收集最知名的應該是交大資工,如果您要下載 ISO 檔的話,可
以在該 FTP 站台中的 1SCMMAGE 目錄中找到。以交大資工而言, ISO*
IMAGE 通常放在 /pub/i386/ISO-IMAGES/ 。我們一般的 PC 都是屬於 i386
的,所以您在 1386 目錄下看到一堆不同版本的 STABLE 及 RELEASE 都
是你可以下載安裝的版本。
圃矚 圈國
1-6 如何得到更多資訊?
chapter 1
FreeBSD 簡介
FreeBSD 的使用者眾多,且+分熱心,在國內外有許多高手們將自己的
經驗開放給使用者參考。以下即爲部份 FreeBSD 的站台。
中文站台
台大電機 Maxwell BBS BSD 精華區 (t 0 lnet://bbs.ee.ntu. 0 du.tw)
圖中央大學企管系初心庭園 BBS s 386bsd 版 (telnet:"bbs 上 a.mgt,ncu.edu,tw)
m 台灣 FreeBSD 總站,交大資工 FreeBSD (http://freebsd.csie.nctu.edu.tw}
圜 中研院 FreeBSD (http://freebsd.sinica.edu.tw}
鼷 FreeBSD Chinese HOWTO ( http :// freebsd , sinica . edu . tw / zh 4 ut / t )
驪 藍色泡泡的 OHAHA (http://ohaha,ks.edu.tw)
圔 大南國小的 FreeBSD (http://freebsd.lab.mlc.edu.tw/)
圖 FreeBSD 使用大全 (http://tech.sina.com.cn/focus/FreeBSD/index.shtml)
英文站台
國 FreeBSD 總部 (http://www,freebsd t org)
圔 FreeBSD Handbook (http://www.freebsd.org/doc/)
圔 FreeBSD Cheat Sheets (http://www.mostgraveconcern.com/freebsd/}
m Fresh Ports (http://www.freshports.org/)
驪 ONLamp.com:FreeBSD Basics (http://www.onlampxom/bsd/)
FreeBSD AM 應用 □ □ □— 」
1.7 本書光碟使用說明
本書附有二片隨書光碟,第一片光碟爲 FreeBSD 4.5-RELEASE 安裝光
碟,第二片爲本書所需的所有軟體及筆者設定檔的範例。
光碟二檔案說明:
檔案名稱
說 明
/examples/
存放筆者的設定檔及一些範例程式。
/examples/etc 設定檔/
筆者 /etc/ 目錄下的設定檔。
/examples/XWindow 設定檔 /
筆者關於X Window 的設定檔 11
/examples/addusertar.gz
大量新增帳號 程式。
/examples/mysql.php
經由網頁管理 mysql 的工具 D
/poris/disffiles/
存放本書所需軟體的原始檔。
/wintools/
MS Windows 下的 工具。
/wintools/OS-BS.zip
多重開機管理員。
/wintools/putty.exe
茌 MS Windows 下好用的 SSH 連線軟體-
/wintoo!s/WinMD5,exe
檢查 MD5 的工具。
當您要以光碟安裝 FreeBSD 時,請使用光碟來開機。系統安裝完畢
後,您可能會安裝一些可以在 FreeBSD 上使用的軟體。當我們使闬
FreeBSD ports 安裝軟體時(參考第八章),它會先撿查電腦中是否也有該軟
體的原始檔,如果沒有則將自動從網路下載。爲了避免必須費時從網路
下載,本書光碟二收錄了本書所提及的軟體,您耵以在開始安裝其他軟
體之前,所將光碟二 /ports/distfiles/ 目錄卜的檔案複製到 /usr/ports/dist-
files/ 目錄中。
chapter 1
FreeBSDM?^
如果您要將光碟二所有軟體的資料先存到硬碟中,請先將光碟二放入光
碟機中,再執行 F 列指令來掛入光碟,並複製檔案。
# mount /Gdrom
#cp -R /cdrom/distfilesf /usr/ports/distfi es/
複製完畢後’如果要從光碟機中取出光碟,必須先執行下列指令才能將
光碟退出:
(r^) # umount /cdrom
GhwBSD 入 《 廳用 □ n □ j
I
chapter
入門瞻 用口 □ □
2.1 安裝前須知
2_1,1如何取得 FreeBSD
在這裡我們只介紹二種較常使用的安裝方式,即利用光碟安裝與經由網
路安裝。如果要利用光碟安裝,耵以使用本書所附之第一片光碟,其版
本是 4.5 -RELEASE 。或者也可以到國內各大學的 FTP 站台取得 FreeBSD
的 ISO 檔來燒成光碟。國內對 FreeBSD 收集最知名的應該是交大寶工,
如果您要下載 〖SO 擋的話,可以在該 FTP 站台中的 ISO-IMAGES H 錄中
找到。以交大賣工而言, IS 04 MAGE 通常放在 / pub / i 386/ ISO - IMAGES / -
我們一般的 PC 都是屬於 i 386 的,所以您在 i 386 目錄下看到一堆不同版
本的 STABLE 及 RELEASE 都是您可以下載安裝的版本,通常我選最新
的 STABLE 版本來安裝,但通常做成 ISO 檔的大都是 RELEASE 版,所
以如果要安裝最 STABLE 版, 而巨您 的網路頻寬夠的話,可以用網路安
裝。有時在 ISO-IMAGES 目錄中有許多檔案,例如 4.5 -instalLiso ' 4.5-
mini . iso ,那個 installiso 就是我們要 F 載的檔’而 mini . iso 也是町以用來
安裝的檔案,只是沒有一些常用的 packages ^所以檔案較小。以下爲各
主要 FTP 站台的網址:
圔 交大資工 ( ftp://freebsd.Gsie.nctu.edu.tw )
中央資工 ( ftp://freebsd.csie.ncu.edu.tw )
^ 中研究 (ftp://ftp2.twireebsd.org }
下載時您會發現該目錄中有一個檔案叫做 CHECKSUM . MD 5 ,這是一
個文字檔,用來檢查下載的檔案是否正確,您可以使用 FreeBSD 下的指
令 md 5 來檢查計算出來的結果和 CHECKSUM . MD 5 中的記錄是否相同,
chapter 2
^FreeBSD
也可以使用 WinMDS 這個工具,在 MS Windows 計算。 WindMD5 可以在
本書所附光碟二的 wintools 目錄下找到。下載 ISO 檔後,把副檔名 .iso
改成 .nrg 後,再用 NERO 以燒錄映像檔方式,將該檔案燒錄成光碟,該
光碟即具備光碟開機的能力。詳細的光碟燒錄方式,請參考本書附錄 C 的
說明。
如果要以網路安裝的話,必須先做開機片,當然,您也可以使用類似版
本的光碟來開機,再更改一些設定以安裝最新版本的 FreeBSD 。要製作
開機片,必須先到上述 FTP 站中下載三個檔案。
H pub/tools/fdimage.exe
^ pub/i386/4.5-RELEASE/floppies/kernflp
gg pub/i386/4.5-RELEASE/flopp!es/mfsroot.flp
上面的各個目錄可能依 FTP 站台的不同有點變更,不過基本上 fdim-
age.exe —定在 tools 的目錄下,而另外二個檔案一定在想要安裝的版本目
錄下的 floppies 目錄中°上面目錄中的 4.5 RELEASE 是您想要安裝版本
的 目錄, 您可以更改爲想要的版本。^載完後,準備二張磁片,在 DOS
模式下執行下列指令以製作開機片。
c:>fdimage -f 1 .44M kern Jp A:
c:>fdimage -f 1,44M mfsroot.flp A:
第一個指令完成後,第一張磁片就做好了,別忘了要先換第二張磁片後
再下第二個指令,如此即完成開機片的製作。
FreoBSD 入忾應用口 ]
2.1.2 安裝方式的取決
通常我會選最新版本的 STABLE 來安裝,但這種版本通常沒有 ISO 檔
可以下載,在網路頻率不足時很難使用網路來安裝,除非自己事先下載
最新的版本目錄下除了 packages 目錄外的所有檔案來燒成光碟,否則就裝
RELEASE 吧,基本上差別不大,除非新的 STABLE 有修正重大的問題,
不然的話差不多啦,您也耵以在安裝完 RELEASE 後再升級。順道一提,
如果您所下載的不是 ISO 檔,而是下載某一版本 FreeBSD 目錄下的檔
案,想要自己燒錄可開機的光碟的話,您必須下載 floppies 目錄中的
boot . flp 作爲開機檔。
個人認爲同一版的 RELEASE 和 STABLE 不會有太大的差距,但有時
碰到問題時,使用別的版本就耵以解決。例如,我之前使用 4.2 的某一版
本時,無法使用 ADSL , 換了很多版本都沒辦法,最後下載最新的 STA ¬
BLE 來安裝就沒事了。並不會每次都這麼衰啦,也不會每次有問題換一
個版本就沒事了。以前我都是以 STABLE 爲第一考量,但現在我覺得用
RELEASE 也不錯,因爲常看到最新的 STABLE 版本在 FTP 站中都不是
很完整,可能有的目錄有問題或沒辦法安裝。如果網路頻寬夠的話,就
用最新版本吧,無法安裝時再退而求其次。
2.1.3 硬碟分割表的槪念
在 DOS 系統中,分割硬碟時,有一個主要磁區、一個延伸磁區,延伸
磁區中再去分割成許多的邏輯磁區。在 FreeBSE > 中,可將主要磁區分割
成許多邏輯磁區 (logical slice ) ,做爲檔案目錄或虛擬記憶體。以我的電腦
爲例,我有二顆 IDE 硬碟,在 FreeBSD 中的代號分別爲 adO 及 adl 。在第
—個硬碟中,我有一個 DOS 系統及 Fr
別再分割爲許多邐輯磁區做爲不同用缝
去了一個主要磁區的話,那麼您看到第
chapter 2
^FreeBSD
ccBSD 作業系統,這二個硬碟我分
h 因爲的硬碟中有 DOS 系統已用
丨一個硬碟是 s2 , 舉彳 列說 明:
adOsI
adO 代表第一個硬碟 1 si 是第 IS 主要磁區,我放 MSDOS
ad0s2a
s2 代表第二個主要磁區,最後一個 a 在傳統上是指根目錄
ad0s2b
b 在傳統上是指 swap 虛擬記憶 |
I
ad0s2e
/usr
adlsle
/home
adlslf
/var
最後一個 a 在傳統上是指根目錄; b
是指整個主要磁區; d 指的是整個硬碼
的,例如用來做 /usr 或 /home 。
在傳統上是指 swap 虛擬記憶體; c
_ ;而 efgh 等是我們可以任意使用
2.1.4 硬碟空阖的配爾
要分害 !1 成多少個 slice 見仁見智,您以把任何目錄都獨立成一個 S ii ce
(我想沒人這樣做)’如果 slice 分割成很多個的話,可能因爲分割不良而
造成日後有的空間滿了’有的沒用到;如果分割成很大,檔案都在同一
個分割區上,當機時檔案遺失的機會比較大。
如果不同的目錄要設不同的參數的話,就要分割成不同的磁區,例如要
架 BBS , BBS 所使用的檔案都比較小,所以 inode 會設比較多。所謂的
inode 指的是系統中可以建立的檔案及目錄總數,如果要儲存的檔案大部
份都很小,則同樣大小的硬碟中會有較多的檔案,也就是說需要較多的
inode 來掛檔案及目錄。如果 i no de 滿了而硬碟未滿的話還是不能儲存檔
案,就好像是有一面牆(硬碟),上面有很多勾子 ( inode ) 可以掛衣服(檔
15
:
Fr_eBSD 入 P1 應用 ]二
案)。如果勾子少,則彼此的空間大,衣服大件一點的話很好,小件的話
就會很空,浪費牆的空間。反之,如果勾子多則町以多掛點衣服’不過
勾子也是會佔空間的,而且太多的 inode 會降低硬碟存取的效率。
如果不同目錄寫入的頻率不同,我會把較常寫入的目錄獨立出來,才不
會影響其他檔案。又如果有多顆硬碟,我也會平均分配每個硬碟的使用
頻率,利用分割的技巧來平均配置不同的目錄。
最簡單的分割方式就是一個根目錄和一個 swap ,這樣就不會造成分割
不良的浪費,不過這樣擋案毀損的機會也大。給大家我的分割方式供參
考:
目錄
大小
用途
/
200MB
根目錄,放開機必備檔,包含 /bin 、 /etc 、 Amp ■.…等
swap
128MB
虛擬記憶體,一般而言,都建議大小為記憶體的二倍,但現在記憶體
賨在太大了,我的 BBS 站有一百多人使用’記憶體有 128MB , swap
分割成 128MB 就夠了。
/usr
2.6 GB
放執行檔、設定檔等,曰後安裝的軟體都會放在這裡,所以要大一點。
如果要安裝 X Window 的話, 2.5GB 是差不 多的, 因為在安裝過程中’
編譯時會用去很大的空藺,安裝完清除後大槪是 1GB 吧。如果不安裝乂
Window * 只當伺服器用,那〗 GB —定足夠。
/var
500MB
這是放使用者信件、寄信時暫存區及一些系統記錄 (log 丨的地方,如果信
都不大、使用者不多,設成 100MB 也沒關係,如果要做郵件同服器的
話,就設大一點吧。
/home
2.4GB
這裡是放使用者的目録,我通常把網頁都放茌這裡。如果有 BBS 的話,
記得要獨立出來。
16
chapter 2
安裝 FreelSD
2.1.5 多重開機
FreeBSD 本身就支援多重開機,如果您想在電腦中安裝不同的作業系
統,例如同時安裝 Windows 98及 FreeBSD 的話,先安裝 Windows 98再
安裝 FreeBSD ,在安裝 FreeBSD 時,以選擇使用 FreeBSD 內定的多重
開機程式,也可以安裝您喜歡的多重唪機 軟體。 因爲 FreeBSD 的多重開
機就只有二行字,畫面比較簡單,所以我會下載 OSBS 在安裝完後再在
Windows 98下設定多重開機。這個也是見仁見智,如果不想使用 OSBS
的話,只要在等一下安裝時使用 FreeBSD 內定的開機管理員就可以了。
如果您使用了 FreeBSD 或是 OSBS 的多重開機,日後要移除多重開機
管理員時只要在 MS-DOS 下執行下列指令即可:
c:\> fdtsk /mbr
2,2系統安裝
2.2.1 開機
如果使用光碟開機的話,只要放入本書的第一張光碟,就會進入設定核
心的目錄選單,記得要先在 BI 0 S 中設定可以光碟開機。
如果使用磁片開機的話,放入安裝前須知中製作的磁片,一共有二張磁
片,先放入 kernilp 那一張,讀完之後會出現一個訊息,要您放入 mfs -
root 那一張磁片,這時候就拿出 kern 那一張再放入 mfsroot 那一張磁片
後,按 Enter 就可以繼續開機了。
㉛ FreeBSD 入 H 應 m ] □ □ □
2.2.2 設定核心
開機完後會出現下列的 晝面:
這時候您可以 選第一 個跳過 kernel configure ^也可以選第二個來設定核
心。我通常第二個,因爲有些硬體的驅動程式間會相衝,例如我的 SCSI
卡就不能選第一個直接進入,必須先移除其他的 SCSI 卡驅動程式。好
吧’就選第—個 I Start kernel configuration in full-screen visual mode 」
團 2-2
18
chapter 2
安裝 FreeBSD
在這裡分成上下二個視窗,最上面的 Active - Drivers 是您要使用的驅動
程式,下面是您移除的。如果在上面移除的話,就會跑到下面來 。您可
以用 [ TAB ] 鏈在二個視窗中移動,使用 [ DEL ] 鏈來刪除設備。在這裡只
要設定 Storage 及 Network 的選項即可。設定完後按 Q 存檔離開。
如果您的 SCSI 卡都是 PCI 介面的話,您可以把 Storage 中所有出現
SCSI 的選項都按 [ DEL ] 來刪除,因爲 PCI 的裝置都是即插即用,都自動
抓得到。其他設備網路卡等也都是這樣,在 Network 選項中,裡面的設
備都是給 ISA 介面用的,如果您的是 PCI 的網路卡的話’就把它們都刪
了吧。如果您的設備有 1 SA 介面的話,而您又不知道自己的設備是哪一
個,就把它們都留著。
在 Storage 選項中,有 IDE 硬碟及軟碟機用的設備,請不要把它們刪
除,最後的 Storage 選項至少應有下列圖 2-3 所示的三個:
12-3
完成了上面的步驟,就可以按 Q 離開了,晝面會出現:
Save these parameters before exiting? {[Y]es/[N]o/[C]ancei)
按 Y 就可以離開,進入下一個步驟。這時候系統會一直跑,繼續開機
的動作,最後會到一個藍色畫面。
D Fre ® BS 0 Ah ( 應坩
2.2.3 開始自訂安裝
7 [:成』 開機後 ’ 辞出現 一個 藍色 畫面’這個畫面 B 後您可以在 /stand §
錄中,使用指令 sysinstall 去叫出這個安裝時的畫面。當開機進入藍色畫
面時,您可以按 ALT + F 2 來看除錯資訊,看一下是不是有硬體沒有安裝
進來,由於 kernel 中只有安裝時要用到的硬體才會驅動,所以如果沒有
抓到音效卡的話也沒關係。要回到藍色畫面就按 ALT + F 1 。
' aUT ^/ sysinsiiHn ^ nint : im - -
M^lcane td tlie fr^eBSi) IftsUllatjos dnct r.nnf juration tool r IMedsi?
Select one or tlte options bclau by using thE arrou ioeys or typing the
flrs t Character pf the cpUtin nawe gna'rc Interested in. Intake tn
nplion yjth tSPftCEl or tEnrER] To exit, 咖 UfiBJ tci nave to Exit.
_.kk start Hou to use this Heim
Begin a stdBdard Jnstanation frec_endcdJ
Jcprcss
fcu^tni
i> pick instil J1 at ion Uat U 二 ient 】
Binf Igurc
r L
D!】pusl inrtU 31 LonT IgursUnn nf FreeBfJl*
InstdliatJon Ihs true lions, Mfiimi, eu.
yuijiid p
UttlDIS
3elEct keyboard ty_pe
Uipu/Ket various installation options
lixLt
Repair node uitb CIRflH^MI^noppg or start shell
wgrAdf
llpyradc an existing systen
Jim d Cont lg
Lo4d derail It Instdl I canriyiiraUDig
filoswy of functions
I Press fl Tor Installation Guide 1
圖 2-4
我們選擇第四項 Custom 來自訂安裝。請使用上下鏈來選擇,並以空白
鏈來確定進入°如果要把光棒從 Sdect 移到 Exit Install 的話,請使用左右
鏈來移動。進入 Custom 後會出現下列畫面:
I ' ~~ Climse CustoW - TristaJ latidn Optluiii : - -
This is the pibtdii I 11 it ion RenGi f You idyi use this menu tu spec if y
details cm the type of dlstrlhtmop you ulsh Id wherp y_ tfish
ld install it rron and hou you ulsh to ai iQc^ty dls 3 < storage to FreeBSD,
^ Fxit
KkIL this m?nu (relurnfFtg Ui (ircuiaus)
9 dptlon^
9 FartUUn
Mleu^pt 丨 iistaHdtjcm out low
1 Ldbrl
■ 」 ihp[ fl 1 lotfl iRd rl. J pdrt jt ians
1 BIstrilm tions
Select dJstrlbutionCs) to extract
1 rtedia
Chotrse the iB^tillatlan sedia type
S Caniiit
Perron* arty perking f art it ioiq/Label^Extratt dEitions
~ - f Presi; Fl In tlic auide 1
_2-5
20
chapter 2
^FreeBSD
如果您所使用的開機片並不是您想要安裝的版本的開機片的話’您要先
選第二項 Options 進去修改 Release Name 的部份,否則就可以略過這一
步,直接選3 Partition 來選擇要安裝 FreeBSD 的硬碟磁區。
2.2.4 分割硬碟
進入 Partition 選單時,首先會出現硬碟選單,如圖 2-6 所不
driuc^j on vhich you wish to perfo™
tfi imtaH a buot ^rtUton
irst ork: dr hai* iwltlpln i^wa-at iny
syftew cm ypiir you nil! htsuc the option to Justell hoot
naiH^er . T<? ^Acct a driWN Ul£ t 細 arroit keys tu RWJR tu rt
ani ^Tv^ss (SPflCE] or tEMTEBI. Tts di^^lect it H press it aqaln.
I*lease : select tjc drlucj ur
this t 甲 CTOticm.. If I^W, arc _
4 drluc uLhcr Uwm the f ir*t are or
I get
圈 EE E
[l *i2.
圖 2-6
您會看到上面的圖,我們之前說過 adO 是第一個硬碟,而這裡的 ad 2 是
指第二個硬碟排線的第 - 個硬碟 (master disk on the second IDE
controller ) ^ 把光棒移到您要使用的硬碟,再按空白鏈進入即出現下面的
畫面。如果二個硬碟都要使用,等一下分割完第一顆之後再來設定第二
顆 0
£pii Kafc
Ifcsc Sfeilslijiw Flap
6Z 6
aMCfey «4l0sl 3
iinusod
f PCTbsd
0
166 CB
(in or 1
cmcp easel :
set fewiftry : C
S 1 ( /jc Dii J 譎 K
(felAl fill 伤 ^
CwiHr? Sltos
Sf?t JlDPtiLblf :
Quit
!lp, iimu fceyr. w select.
圖 2|7
21
_ 0>|货#8§0入忾應用=]]□「!.’:
在圖 2-7 中,光棒所指的就是未使用的空間,如果您這個硬碟只要給
FreeBSD 使用的話,您可以直接按 A 使用整個硬碟。如果您有 DOS 分割
區的話,應該會出現一列是 fat 的磁區。把光棒移到 unused 的地方,按 C
來建立磁區,它會問您要使用多大的空間,您可以輸入 10000 M 代表
10000 MB 也就是10 GB 。接著按 Enter 鍵,它會問您 TYPE ’預設是165
就是按 Enter 就耵以了。好了之後再對著剛設定好的 freebsd 磁區按 S 設
定爲可以開機。最後按 Q 離開畫面。離開後會出現下列 畫面:
FytcBSD cones with a bmt selector that a] lous you to easily
select hetMecsn FreeBSD aiid my crthcr Djp&ivitlDg system on ycnu -
ftt boot tine. 1 f you ncre 'tlwn dhe dpiue ft ltd boot
fron tJe second vim, the boot selector* uiU also haltt? it possible
to du so Uiwftations in the Ft BIIB usunlly preuent this oUtruise].
Tr yai elo mt want a boot selectEr, or ui&h to rflpldce an raistii 桕
oiic ‘ select ■■standard' If ipu would prefer yemr flostcEr Boot
fecord ta renain untouchoJ tten select 'Atones
miE : ?C-WS I
ceK^inly !
Instail thft FreeBSL foot ffanaffer
Laaue the Waster Boot Ffecard iiiitoitclied
12-6
上圖是問您要使用 哪一種 開機管理員,如果要使用其他作業系統,您耵
以使用 FreeBSD 的多重開機管理員,即選擇第一個 BootMgr 選項。如果
要使用其他多重開機管理員就選 None ,不過這樣一來如果沒有安裝其他
多重開機管理員便無法使用 FreeBSD 開機。如果只有 FreeBSD 這個作業
系統,就選中間這一個 Standard °我只要使用 FreeBSD ,並沒有其他作
業系統,所以我選 Standard ^選完後會回到剛才的硬碟選單,如果您還有
其他的硬碟要加入的話,您可以選其他硬碟重複剛才的步驟,如果要加
人的是 DOS 的硬碟,只要選擇進入後,什麼都不做,直接按 Q 離開即
可。當所有的硬碟都設定好了,回到硬碟選單時,按 Cancel 離開選單,
回到自訂安裝選單。
22
chapter 2
安裝 F?eeBSD
回到自訂安裝選單後,選第3個 Lable 進入 Disk Lable 編輯。即圖 2 _9的
畫面:
圜 2-9
我們之前在安裝前的須知中說過關於磁區的分割方式及大小配置,您可
以直接按 A 自動配置,不過這樣出來的 swap 都會太大,如圖 2 _ 9 中’
swap 用了 522 MB 。所以我們手動來做吧,最上方藍色光棒的位置就是您
現在要分割的硬碟及其使用空間。如果有二個硬碟,所看到的就不是像
上面那樣,而是有比較多個硬碟。不硬碟有多少個’只要對著您要的
硬碟按 C 去建立一個分割區,它會先問您大小,如圖 2 -10所示:
■ 2-10
23
FreeBSD 入 ft 靡用二匚 -
在圖2- 〗 0詢問您所要分割的大小時,您可以輸入想要的空間大小,接著
會出現圖 2 - u 的畫面,詢問您要給哪一種類型的分割區,如果是要給目
錄使用的話,就選 A file system ^如果是 swap 就選 A swap paititkm 。我
們先來分割給根目錄使用,如下圖:
圔 2-11
接著選擇掛入點’如果是分割給 swap 使用的話,並不會問您掛入點是
什麼。第一個分割區-定要先分割給根目錄,所以在這裡我們先分割根
目錄,如圖 2-12 :
risk : Partition rane: Free: 16514001 blocks
S l^c Nciifs PaH : Hinint Size
SI 耽 Hewfs PftH
folkMJiny corvtuid^ (utj ualliJ Jcre limiiir rrt- louer :
:- Create D - DtfNrtc ^ ■
I Mrwfv 0|jts Q Finish
1 = Hfjufs n ^ Undo n - rtito Der^iits
n ftount pt.
S " Totjtjlr ; JkiJ'tUpdatBs
fi fnto Def^wOts
: FI tt T to gert. rmn? helji, ^rr«j keijis trt select.
Neuf's
Please
spicify a ftdunt point for the pArtitjon
厂
』_■ ancel
圚 112
24
chapter 2
S^FreeBSD
這時您就輸入 / 就代表根 B 錄。 接著再繼續分割給其他目錄,如 / usr 、
/ home 等。最後如圖 2- 13 所示:
Part
Mount
Size
Newfs Part Mount
Size Newfs
adOsl
2D00M
DOS
ad0s2a
/
2D0M
UFSY
ad0s2b
swap
128M
SWAP
ad0s2e
hm
2600M
UFSY
iad0s2f
/rar
500M
UFS Y
ad0s2g
/liome
210OM
UFSY
攻 d0s2s
/homel>l«s
40C0h!
UFSY
® 2-113
在圖 2-13 中,如果您有 DOS 分割區在硬碟中,您可以把它掛進來
( mount ) 做爲一個目錄,這樣子在 FreeBSD 中就可以看到 DOS 分割區了 °
您可以對著最上面一行 DOS 那一個按 M ,並輸入目錄名稱爲 /MSDOS
,就可以了。
如果您有 BBS 站的話,您必須更改一下 inode 的設定,才不會造成空
間的浪費。把光棒移到 BBS 的目錄,再按 N 並輸入參數爲 newfs 4 1024-
b 4096 -f 1024,來改變 inode 的設定。
好了,都設定好了就按 Q 離開,回到自訂安裝選單吧。接下來就開始
選擇要安裝的套件。
25
FreeBSD 入 f ! 廳 f 目 □ □=
2.2.5 安裝自訂套件
冋到了自訂安裝選單後,選擇 Distribution 來選擇要安裝的套件。進入
圖 2- 14的畫面後,選擇 Custom :
Choose Dfstrllutluirt
fis a CDituen tence. ve provide ceyerd i _ tdnned' F dlstiihuligii seXi.
Thest select HJiat ue consider to be tie nost reasoviblt defdtilt^ fdr th c
type of In question, if you uahLI prefer to pick 4rbd chouse tir-
Hst nf dislributtonr& yonrselF, stnply select "Cue; tan' 1 . Vou can al^u
pltfc a cannei ^IstrLlxutlDn set ant then n«e-tune it uith the Custcn lt[ n
tnoosp an l tew ay prising isrflLLj or i mi UK 丨 . unen NfnsfieU. c noose tiic
Exit \tfM or nq ye to the OK button nilti ETnll
<«
£
[
Ui%
l\
?set
nevtilopef
K-DeneloMer
Kcrn-DeuelopEr
K-Kern-Deyelaper
User
-pt f ) -
All ^ystep SEwrces. binaries end X Uludaii
fteset selected distribution list to nothing
ruJ I Attunes, blnirles an 4 dot. tut no gjincs
SdHt m above * X UI niau
Full bEndrles euJ 如 i. 」 kerne] sources only
Saiw dbouc * X Uindmi 3y&ten
ftuerdgt user binaries ini d£m only
I Press FI for
wmm
nore i i»r arna
tloft m these options.
12-14
在上圖中選 Custom 後,會進入圖 2-15 的選單:
Select the distributions yau uish Id insta11 r
Please check off the distributions you ulsh to Install, fit tbt
very nIuLnuh. this should ht ” bltT.
g
S Exit
1]
fill system sources- binaries and X Uindou Systen
JSCt
Keset all of the be Lou
LX1
m
ninarg b 的 e dlslrHiiitlDn (regtiirEd)
⑴
Ldupdtlx
FreeBSD 1 r x binary coiipdUbi]
m
FreeBSD ?..% binary coipatIbH1 ty
m
CORj^tZl
FreeBSD ZA bLndry conpdlibiJ iti^
[X 】
FreeBSD Z.Z k and 3 0 a,out binary toRpaUbiIity
m
: otpflt3x
7reeBSD 3 ,k binary conpalihi 1 ity
m
iiDnpatlx
Freefl3D 4.x binary conpatIbEl itg
m
: rffpto
Basic encryption services
m
krb4
KerberosJU authentLcation seruices
m
krb5
KerberosS iutftehticatlon services
m
- K
iict
i( + )
Spelling checker dictionary files
_2,15
這時候除了最後二項 local 及 XFree 86 外,全部都選,在選擇 S rc 選項
時,會問您要選擇哪些東西,這時候就選 AH 吧。現在的硬碟應該都不
小, sre 中的東西是一些原始碼,日後在修正一些 bug 時可能會用到。選
26
InsUU froii an flf seruer
in5t*h froi an fir sender through a firewall
FTP server through & http proxy
IDS prl it Ion
Tnstilt froi
Install fPOR
hastaJl D_er
tnstdn fran
[itstal I fra«
[TtsUU froi
an
nr $
in existing
& t loppy disk set
SCSI or QIC Upe
do ta the Dpt 丨 g_s screen
chapter 2
安裝 FreeBSD
完之後就選 Exit 離開。回到上一層選單,再選 Exit 回到自訂安裝選單
接著就是選擇安裝的來源了。
2.2 冶選擇安裝來源
回到自訂安裝選單後,我們選擇 Media 來決定安裝的來源’如圖 2-16
Choose iDsUU^tlQn Hedia
FreeBSD can be installed froi i ^rlety of different installation
lied la, rdnging frcm floppies to dn Iitternet FTP server. If you're
installing FreeBSD fron a supported Cl/IUB irim then this Is generally
the test ned1a tti uae If you hfl 粃 overriding reason far using nth Pr
usdia.
■r Fre.^
s FI for witr tnfnriflUw nn thp urtrloiiR npiHa ttjpfis 1
2-16
如果您是以光碟安裝的話,就選第一個 CD/DVD 作爲安裝來源,選了
之後就可以回到自訂安裝選單,選 Commit 開始安裝,並按下確定開始。
如果您是以網路安裝的話,就選第二個 FTP 。選了 FTP 之後,會問您
要使用哪一個 FTP 站台,這時候請選第二個 URL Specify some other ftp
site by URL 來自訂要使用的 FTP 站台。進入後會問您要使用的站台位
置,您要先去找出該 FTP 站台放 FreeBSD 的目錄爲何,以交大寶工而
言,您應該輸入:
ftp://freebsd.csi8.nctu-edu*tw/pub/i386 /
27
sTP IF TIfDSrsnef l-ptl
CFFHDMnrrTD
> Fra 黎 BS ® A 門應用□□二
接著會要求您設定網路,使用網路安裝必須先設定網路,出現圖2-〗7的
晝面,要您選擇網 路卡:
n"utirk i nterfacFTnToriatlon requ \¥u&
ymi are usino PPP amr a serial device, as opposed to d direct
pUiurHet cuniiettiDTi, then you nay first ntitd to dUl yuur inttrnet
巧 ruiiii* Frouider using the ppp ullJJty uc prouidt fur thit Vii i P u^
If yuu re using SUF oyer 4 serial 4culLe llien the exultation Is
that you haUE d H^RDUIHO conaeciiun
[an ii]so Iftstal ] ouer a pdral lol port using a sjjcc lal "JapI in)c"
Ldbte to another wacftlnt ruioiiini a fairly rettm IZ.GR or laterJ
uersfon of FreeBSH
urn UT :^4^ UT 8 feL :10 Gft Khine FCI etherS ^^
PO PflHlie】 Fort IF CPLrpi peer Lonrmctlmi
aithO <uuknoun network interface type>
SUF 1 nterfar.p on rteulce /deu^cuadO (C0IT1)
fcpG PPF interfere o^i deuicp ^deu/aiiiaO tcnfll)
SLIP intprface mi deujee , d(?u , oma1 (f[lrt2)
Press FI tu^^ad
麵 mmnam
1 ft network Lonf Igttri
r eii mu HttifUrt 1
圖 2‘17
圖 2-17 中’您的網路卡會出現在第一個,如果您有二張網路卡的話,就
會有_:個不同編號。選擇_個對外連到網路的卩後,接著會問您是否要
使用 IPv 6 請選否,再來是問您要不要使用 DHCP (白動取得 IP 位址 .... 這
就看您自己囉),接著就進入圖 2-18 的畫面。
TlFfuDrk CoungUraTTorf
Dona In :
140,115.1,31
- Conf iifuration for Interface wrO
IPv4 Address : rietmask:
140.11S.75.1 255.255 P D,0
Extra options to Ifconfigr
El 11 1
_2-18
ngdons In xon
Flame server :
Host:
u uu r nydu]tia hi. com
rpu4 Gateway:
110.115*1.251
28
0
chapter 2
薇 FreeBSb
您要先知道您的 Domain Name 及 IP 等,如果沒有 Domain Name 的
話,就隨便輸入吧。假設我們的機器是 www . mydomaiii.com ’所
以在 Host —攔中就輸入 www . mydomhn.tw ,在 Domain 中就輸入 mydo -
main.com 。我的機器在中央大學,所以 Gateway 就輸入1麗115丄254 ’
Name server 輸入 1401115* 1.31 T IPv 4 Address 就輸入我的 IP 也就是
140.115,75.2 , Netmask 也就是子網路就輸人 255.255.0.0 。接著按 OK 離
開回到自訂安裝選單。再來選 Commit 開始安裝,並按下確定開始°
2.2.7 最後的股定
經過了一段時間的安裝後,最後就會出現一個視窗問您是否要做最後的
設定,這時候選要。又回到了一開始 sysinstall 的畫面。
"/sUnd/sgs InsUL Hklri HimT
Ue leone Ip the rrecBSD LitsUlUtlQn and t 加 Hpration Ido I F lease
one of the u_Uans faelou ly y^iDf the arrou keys or typing the
first character nf the option nane ifau're Interested in. InuuJte an
npi Ion um CSrfiCEI or lEfltEiy, To cxU. use【TrtBl to wove to EKlt,
Quick start Hmi tu use tills Beiiu systen
Begin d standard installdllon (recoimBtidedi
BEgJn d qukk LnsUHat Lon ffor the lupattenlJ
“ iert£)
Be!
custOM Inst
(for
JnsiaTldUbn inslnktigns, RE^BflE, etc.
Select keyboard tij|
Uieu/Set aarlous iistallitiOTi options
lEpatr ultti Clnon^PD/flopw or start shell
Upgrade ai cxlstln} system
Load default Install conflgur^U 抓
Sioss^rg of furttllons
-[Fress FI for Ins
■■fflM nBUH ,
tstdllatiDn Guide
I—
®2-il9
這時候就選 Configure 進入設定選單,在 Configure 選單中’我們可以
設定本機的基本資料。在這裡我們僅設定卩列 幾項:
29
FnwBSD 入 n 廳用 □□口
_ 設定網路
_ 進入後選擇 Networking 設定網路 _ 如果您是用網路安裝的話,您不必做,如果是
用光碟安裝的話,就要。請參考前画安裝時選擇安裝媒體時所做的網路設定方式。
n 設定鍵盤速度及螢幕保護程式
圔 設定時區 Time Zone
如果您要設定鏈盤速度,請選擇 Configure 以進入設定選單,如圖 2-20
所示:
S2-20
這個設定選單中,各個選項的說明 如下:
Distributions
我們新增 FreeBSD 的安裝套件。
Packages
安裝其他 packages 軟體。
Root Password
設定超級使用者密碼。
Fdisk
分割硬碟的工具, B 後要再加入新硬碟時可以使用。
Label
Disk Label editor ^讓我們將己分割的硬碟再分割成不同磁區,以掛
入 FreeBSD 中使用 。
User Management
使用者帳號管理工具。
Console
文字模式下螢幕的設定。
Time Zone
設定時 E 。
30
chapter 2
^FreeBSD
Media
設定安裝軟體的來源。
Mouse
設定 滑鼠。 如果您要使用滑鼠,可以在此驅動。
Networking
設定網路。
Security
設定 FreeBSD Security Level °
Startup
設定開機時要啓動的選頂,我們可以在 / etc / rc.conf 中 設定。
TTYs
設定不同 TTY 的權限。
Options
設定一些安裝時選項 3 1
XFree 86
X Window 的設定。
Desktop
X Window 的桌面管理員設定。
HTML Docs
顯示 FreeBSD HTML 文|
Load LKM
從磁片中載入 kernel module 。
這裡的設定只要先設定 Console 及 Time zone 即可,其餘的設定(如新增
使用者及設定密碼等)我們都可以在重新開機後,於文字模式設定。
首先請選擇 console 進入圖 2-21 的選單
^Systeii Console Configuratiun
Ttte default systen console drluer for FreeBSD (syscons) has a
ntsuilier of configuration options uhicli way be set according to
your preferencE 」
When you are iane setting configuration options, select Cancel.
I Exit Exit this menu (retuniing to preuioas)
Font Cliaose an alternate screen font
Keg nap Chooseftflalternatejceu^oar^^
Saver Configure the Screen sauer
Screennap Choose an alternate screeTinap
Conflpre uour system
■iraiwiiJ
console !
settings
圖 2-|21
在 System Console Configuration 選單中,第二及第三個選項 Font 、
Keymap 耵以讓我們設定螢幕字型及鍵盤對映,不過我們不需要設定。第
四項 Repeat 是設定鍵盤按鏈重覆的速度,因爲筆者喜歡按 F —個鍵時,
能快速的重覆輸入該鏈,所以我選了 Repeat 設定,並將速度設定 Fast 。
第五個選項是 Saver ^我們可以選擇喜歡的螢幕保護程式,也可以選擇
31
>Fre®BSD 入 PI 應用二□二
Timeout 來設定啓動螢幕保護的時間。當您設定完成之後,請選擇 Exit 回
到 Configuration Menu ,接著我們再選取 Time zone 來設定時區:
選擇了 Time zone 後’它會問您目前 BIOS 是否設定爲 UTC (格 林威治
時區)’如圖 2-22 所示,如果您不清楚,請選 NO 。
7 —- -^"SeiectTo [: aUTr UIC 1 Sriinin ch Hedn TTnil rIocl!~=^
I Is tlJiE; nathine^ CflOS clock set in UTC? If 1L is set to locaJ
Of you 4m t knou, please choose M herd
■灿孺 W'fBQ 1
園 2-22
接著要選擇所在區域,我們選擇第5項 Asia ,如圖 2-23 :
國 2-23
32
chapter 2 _
SUFreeBSD
然後再選擇國家 Taiwan 即可,如圖 2-24
— Countries in As id
Select a country
Palestine
Philippines
Qatar
Russian rederat ion
Saudi Arabia
Singapore
Sri Lanka
Syrian flrab Republic
Tajikistan
Thailand
Turkmenistan
United Arab Emirates
Uzbekistan
Uiet Man
Venen
U4
最後系統會詢問您所選擇的 CST 時區是否正確’如圖245 ’ 我們便選
取 Yes 即可。
rninf i i nn _ _ __ 一
- - —■ Does the
aTibreytation 'CST' look reasonable ?— --
BvgM I
圔 2 』
25
我們在 Configuration Menu 所做的設定最後都會存放在 / etc / rc.conf 中’
如果日後有需要更改,可以經由修改 / etc / rc.conf 來完成。
最後就一直選 Exit ,最後 Exit Install 離開安裝程式’重新開機即完成
FreeBSD 的安裝。如果您在過程中遇到問題,可以到各大 BBS 的 386 bsd
版中發問。
33
2.3 第一次登入系統
安裝完 FreeBSD 後,重新開機,要知道的第一件事就是要怎麼使用
嘛°我第一次使用 FreeBSD 時,一開機看到 login : 時我當場呆在那裡,
完全不知如何下手。所以我一定要說一下這個,如何登入並更改密碼。
說了一堆好像很難的樣子’其實不會啦,開機後看到 login : 時,打 root 就
可以登入系統,如圖 2-26 。
FreeBSD/i386 [mydomain.com) (ttypG)
io^in: root|
圖 2-26
由於是剛裝好的系統,所以不需要密碼。這裡的 root 就是所謂的超級使
用者,擁有所有權限。知道了如何登入,當然也要知道如何登出囉。您
可以打指令 logout 就可以登出了。順便一提,要重開機就打 reboot 、要
關機就打 shutdown now °
2.3.1 更改密碼
第一次登入後要更改 root 的密碼,請執行 passwd 指令來改密碼。系統
會問您二次新密碼,以確認二次輸入的密碼相同。請不要使用太簡單的
密碼,以免造成安全的漏洞。
34
chapter 2
妾襄 FreeBSD
2.3.2 新增第一位使用者
接著要設定第一個使用者的帳號,使用指令 adduser 來新增使用者系
統會問您一些 問題:
輸入使用者的 shell ,我使用比較好用的 tcsh ’ 故輸入 tcsh
Enter your default shell: csh date no sh tcsh [tcsh]:
使用者目錄要放在哪
Enter your default HOME partition: [/home]:
是否要從 skel 目錄中複製使用者的預設設定檔 1 直接按 Enter
Copy dotfiles from: /usr/share/skel no [/ysr/share/skel]:
是否要送出訊息給使用者,直接按 Enter ,送出 /etc/adduser.message
Send message from file: /etc/adduser.message no [/etc/adduser.message];
是否要使用密碼,按 Enter ,預設是 y
Use passwords (y/n) [y]:
使用者的帳號,只能使用小寫的英文字母及數字
Enter username [a-z0-9_-]:
使用者全名_輸入您的真實姓名
Enter full name []:
要使用的 shell ,打 tcsh
Enter shell csh date no sh tcsh [tcsh];
使用者的目録,按 Enter 即可
Enter home directory (full path) [/home/john]:
使用者的編號,按 Enter 即可
Uid [1001]:
登入的等級,按 Enter 即司
Enter login class: default Q:
登入的群組,按 Enter 即可
Login group John [john]:
35
0_ FreeBSI»An 廳用 ]□ —
是否要該使用者加入其他群組,請注意,因 為第一 個使用者是您自己,所以在這裡要
打 wheel ,這樣您才可以 su 成 root ,也就是您的帳號才可以登入成 root 帳號
Login group is 'john". Invite asdf into other groups: guest no [no];
密碼
Enter password Q:
再輸入一次
Enter password again []:
以 上都正確嗎?
OK? (y/n) [y]:
最後還有一些問題,都是直接按 Enter 就可以了,等到它問您是否要再
增加7、一個使用者時,回答 no 即可回到命令列。
設定到這裡後,就可以不必在機器前作業了。通常我的習慣是設定到這
個地方後,就使用 telnet 的方式連線到機器來作其他的設定,這樣我就不
必一定要呆在機器前,可以在自己家中使用別的機器連線到 FreeBSD 中
做設定。
FreeBSD 自從 4.4- Rdease 起,預設就不開放使用 telnet 或 ftp 連線到機
器中,如果您想使用 tetaet 或 ftp 連線到機器,必須先編輯 / etc/inetdxonf
,將 telnet R ftp 前的拿掉,如下所示:
# $ FreeBSD: src/etc/inetd.conf,v 1.44.2.6 2001/10/09 07:47:47 jkh Exp $
#
# Internet server configuration database
#
# Define *both* IPv4 and IPv6 entries for dual-stack support.
# To disable a service, comment it out by prefixing the line with T.
# To enable a service, remove the W at the beginning of the line.
#
36
ftp stream tcp nowait root
ftp stream tcp6 nowaii root
telnet stream tcp nowait root
telnet stream tcp6 nowait root /usr/libexec/telnetd teinetd
#sheil stream top nowait root /usr/libexec/rshd rshd
#shell stream tcp6 nowait root /usr/libexec/rshd rshd
#login stream tcp nowait root /usr/libexec/riogind rlogind
#login stream tcp6 nowait root /usr/libexec/rlogind rlogind
接著,再使用下列指令來重新啓動 inetd 服務:
® # kill -HUP cat inetcLpid'
請注意這裡 v cat inetd . pid 、 所使用的、是鏈盤左上角的那一個符號’而非
單引號。不過現在大家都建議使用連線以取代 telnet ,因爲 ssh 是以
加密過的方式連線,比較不會以明碼的方式傳送賣料。您可以使用 putty
這個軟體在 MS windows 下連線到 FreeBSD 中。您可以從
http :// www . chiark + greenend . org + uky — sgtatham / putty / 卜載 putty ’ 也口 J 以在本
書光碟二的 wintools 目錄下找到該軟體。
您也可以在 FreeBSD 中使用 ssh 的方式連到別台機器
# ssh jack@123.456.78. 9
這個指令表示以使用者 jack 身份連線到123. 4 56^ 9 ,我們也可以使用
主機名稱的方式,例如 jack @ dns . abc . edu . tw ,或者也可以只打 ssh
diis . abaedu . tw 來登入,此時登入名稱會是您現在用的使用者名稱。
如果所連線的站台是第一次使用 SSH 連線,則會出現下列一堆東西’
表示接收到所連線站台 RSA key ,並詢問您是否要繼續連接。此時打
” yes ” 三個字即可:
37
jreeBSD 入 行靡_ 匚
□ □ □ □
The authenticity of host'123.456.78.can 1 ! be established.
RSA key fingerprint is 13:96:8a:61:31:cf:32:3f:7a:0a:77:ad:7e:49:e7:3f
Are you sure you want to continue connecting (yas/no)? yes
系統會將所接收到的金鎗 ( key ) 存放在使用者家目錄下的
_ ssh / known — hosts 檔案中。如果日後在 knownJiosts 目錄中所記錄的站台
金鑰有變更時,我們可以編輯該檔案以刪除舊的金鑰。
23.3 基本指令介紹
爲了一開始的使用,在這裡我們先說明一些簡單的指令用法,以利之後
的設定,更詳情的指令介紹請參考本書第十八章「指令應用」,或使用指
令 man 來查詢指令的用法。如果您是 UNIX 初學者,先閱讀「指令應用」
可以讓您對 UNIX 指令及系統管理有更多的了解。
cd
改變所在位置,和 DOS 中的用法類似,如果要到 / etc 下,就打 cd /etc 。 !
pwd
直接打就會顯不目前所在目錄的名稱: ■
Is
看目錄中的檔案清單°打 is 或 Is / etc ,就像 DOS 中的 dir 。
w
查詢目刖在線上的使用者
ee
文書編輯軟體 — ^ — - -
date
看目前的曰期及時間
mkdir
建個目錄 , mkdir a be 就可以建立一個目錄叫 abc 。
rm
刪除檔菜或目錄。刪除檔案時 rm file.txt * 删除目録時要加參數 -「 f ,如 rm <f abc
cp
複製擋案 * 就像 DOS 中的 copy ° cp file newfile
man
查詞線上使用手冊,如 man cp 就可以看到 cp 這個指令的詳細說明。
su
變成超級使用者即「00卜
38
2,3,4 FreeBSD 的目錄結構
chapter 2
^WreeBSD
在 Windows 作業系統中,在檔案總管中可以看到 Windows 的"樹狀”目
錄結構 。而 FreeBSD 中的目錄也是像一顆樹,一個目錄下還有很多個目
錄,和 Windows 不同的是在 UNIX 系統中,每一個目錄都有一定用途。
我們了解 FreeBSD 目錄結構的用意就是讓我們知道每個目錄的用途,日
後我們要安裝新軟體或使用 FreeBSD 時,能按照這種規則來做,這樣一
來在管理維護上比較方便,目錄也會比較有條理。
以下我們就簡單的說明 FreeBSD 的目錄結構,您也可以使用指令 man
hier 來查看目錄結構說明°
/
UINX 系統的根目錄,是目峰的最上層。
/ bin /
放置基本的使用者指令,是開機時必備的。
/ boot /
系統開機時必需用到的設定卜
/ dev /
UNIX 系統將週邊設備視為檔案來管理,這個目錄就是放置裝置節點檔
[device node 卜
/ dev /
MAKEDEV 就是用來管理這些節點檔的工具。
/ etc /
放置系統的設定檔 * 例如使用者密碼、群組等。
/ etc/defaults
放置預設的系統設定檔。請 man rc 。
/ etc / gnats /
gnats 的設定檔,請 man send - pr 。
/ etc / isdn /
isdn 的擊定檔,請 man isdnd °
/ etc /
kerberoslV / kerberos version IV 的設定檔,請 man kerberos 。
/ etc / mail /
Sendmail 的設定檔。
/ etc / mtree /
目錄權限的設定擋,請 man mtree °
/ etc / namedb /
DNS 同服器的設定檔 * 請 man named 9
/ eic / periodic /
每天、每週、每月定時要執行的設定,請 man periodic 。
/ etc / ppp /
ppp 的設定檔,請 man ppp °
/ etc / ss !/
OpenSSL 的設定檔。
/ etc / uucp /
uucp 的設定檔,請 man uucp 。
/kernel
開機時系統會載入的核心 ( Kernel ) 。
39
— 0 . FraeBSD 入 M 應坩 ]
/modules/
Kernel 可以載 TV 的模組,膚 man kldstat 5
/mnt/
空目錄,我們可以用它來作為暫時 mount 檔案 系統&
/proc/
系統執行中程序 ( process ! 資料,請 man proofs mount procfs 。
/roof/
超級使用者 root 的家目録。
/sbin/
系統程序及管理工具的目錄。
/stand/
這是安裝磁片上的指令。
/tmp/
暫存目録,許多程式都會需要暫存目錄來存放資料。開機時會清除。
/usr/
包含主要的使用者工具及應用軟體。您珥以把它看成 Windows 中的
windows 目録及 program file 目錄的集合。
/usr/bin/
一般的使用者指令及應用軟體。
/usr/games/
—些小游戲。
/usr/include/
標準 C 語言的標頭檔 。
/usr/lib/
系統函式庫。
/usr/llbdata/
一些系統工具的資料庫。
/usr/Iibexec/
系統服務程式 (daemons) 及工具^
細 /local/
非 FreeBSD 所附的軟體扁會安裝在這個目録下,我們在安裝軟體時最好都
安裝在這個目錄。您哥以將它視為 Windows 作業系統中的 program file
目錄。這個目錄中也有 bin sbin etc Ito 等目錄。
/usr/objV
在編譯 FreeBSD 系統時存放過程中暫存檔的位置。
/usr/ports/
FreeBSD ports 移植軟體的原始程式目錄,我們可以從這個目錄中找到
自己想要的軟體來快速安裝。
/usr/sbin/
可以讓使用者執行的系統服務及工具。
/usr/share/
系統軟體共享的資料庫。
/usr/src/
放置 BSD 或其他軟體原始程式碼的目錄。
/usr/Xl 1 R6 /
X Windows 的目錄。
/var/
放置系統記録檔、暫存檔的目錄。
/var/account/
使用者執行過的指令記錄檔,請 man acct 。
/var/at/
定時執行排程的資料檔。請 man at ^
/var/backups/
系統重要檔案的備份區。
/var/cron/
使用者排程的資料表,請 man cron □
/var/db/
重要的系統資料庫。
/var/games/
内附的遊戲紀録檔。
/var/log/
系統記錄檔,我們可以在這裡查看系統狀況記錄。
/var/mail/
使用者信件暫存區 u
/var/preserve/
文件編輯時異常中止時,會將文件存到這個目錄,請 man ex 。
40
0
chapter 2
安裝 Freeisf
/var/msgs/
系統訊系的 資料庫 ,請 man
msgs &
/var/quotas/
檔案系統使用容量限制的記後
i 0
/var/run/
記録系統開機後執行狀態的暫存區。請 man utmp 。
/var/spool/
列表機或郵件輸出時的緩衝 U
/var/tmp/
系統暫存區,開機時不會清 P;
/var/yp/
the MIS maps 。
FreeBSD 入 H 應用 □ □
42
chapter
g:Fre®BSD 入門應用 □ □ 匚 □]
3.1 為什麼要重新編譯核心
女裝元成時’所使用的核心是一般性的核心,稱之爲 GENERIC
kernel 。爲了要支援常見的軟硬體,因此 GENERIC 核心中可能包含了許
多我們用不到的驅動程式,也可能不支援一些特殊的硬體。
在硬體方面,核心中包含了太多的東西不僅會佔去記憶體的空間 ,不同
程式間也有可能造成衝突。 GENERIC 中並未包含音效卡的驅動程式,因
此如果你有音效卡的話,也必須重新將音效卡的驅動程式編譯進去。
在軟體方面,如果要啓動 FreeBSD 的防火牆功能,或是使用 ADSL 連
線 ( 4 . 4 以前的版 本)’ 都需要重新將支援這些功能的參數加到核心中。另
外,如果要改變系統的效率,你必須修改核心中的參數,例如增加同時
上線的人數、或最大同時開啓的檔案數等。當然,有的功能在 FreeBSD
中可以經由 sysct ! 這個指令來修改,而毋需修改核心,但大部份的功能是
一定要 修改核心的。所以我們還是要來了解一下如何爲自己量身訂做一
個新的核心。
請放心,編譯核心並不難,其實只有幾個步驟,只要依下列的方法去
做,相信您對於系統核心將有更深入的了解。
44
3.2 修改核心
chapter 3
編譯核心
首先,您必須確認你在安裝 FreeBSD 時,有將 src 裝進來。 cd /usr/src/
sys/i386/conf/ 確定該目錄存在,這個自錄中有二個檔案,一個是 GENER-
1C ,一個是 LINT 。 GENERIC 就是安裝時用的一般核心,而 LINT 是完整
的核心及說明。如果你對核心中的某一個參數有任何問題,可以去 LINT
中找它的說明。以音效卡爲例,由於 FreeBSD 主要的用途是作爲網路伺
服器,因此內定的核心 GENERIC 中並未包含音效卡的設定。因此如果我
們要使 FreeBSD 支援音效卡的話,我們必須從 LINT 中找出正確的音效卡
設定來加入核心中。
首先,我們要做的就是將 GENERIC 複製一份,並修改複製的那一份
® #cp GENERIC MYKERNEL
上面那一行指令就是把 GENERIC 複製一份叫做 MYKERNEL ,新的
KERNEL 要叫什麼名字你可以自己取。接著就要來修改 MYKERNEL
了,用文書處理軟體打開 MYKERNEL 後
把不必要的移除。必須要注意的是
就是說某些參數的存在一定要有某一行的支援。現在使用指令 ee 來修改
剛才複製的核心。
再依文件中的說明來修改,
核心中有的參數是互相依賴的,也
® #ee MYKERNEL
在核心中,如果在一行的開頭有 1 卞 1 表示該行爲註解,以下我們針對
GENERIC 核心中每一個參數的說明。
45
IFr ❹ eBSDAH 廳用 □]
3,2.1 基本的設定
# 這一 行是必備的,代表的是使用1386的機器,也就是旧 M 相容個人電腦
machine i 386
#這裡是指 CPU 的類型,最近的 CPU 都是 I 686 _CPU
# 有些 GPU 50 Cyrix 233 Hz CPU 或 Pentume Pro 也都是 686 的
# 我們可以使用 dmesg 指令來看 CPU 類型
cpu 1386一 CPU
cpu I 486 _CPU
cpu I 586 _CPU
cpu 16 B 6 _CPU
# 這個可以說是核心的名字,把 GENERIC 改成 Alex 或 BBS 或 Webserver
idem GENERIC
# 這是用來控制系統内部表格 ㈣ emat system tables ) 大小的參數,這個値一定要
#設定大於四, maxusers 的値決定了處理程序所容許的最大値, 20+16 *maxusers
#就是你將得到的所容許處理程序系統開機就必須要有18個處理程序 ( process ) *
# 即便是藺單的執行指令 man 又會產生9個 process ^所以將這個値設為64應該是
# 一個合理的數目 D 如果你的系統會出現 proc table full 的訊息的
#話,就把它設大 一點, 例如128。
# 注意: maxusers 的値和同時可以上線的最大使用者人數並無關係,
#它只是決定你的 kernel 中一些資料結構的大小。
#真正影響上線人數的是 pseudo-device pty 16。
maxusers 32
46
chapter 3
編譯核心
3.2.2 —般選項
#makeoptions DEBUG=-g #以 gdb 除錯模式來編譯核心
#這個参數讓 kernel 用軟體的方式模擬浮點運算,如果你的 CPU 不
#含浮點運算器(或沒有 387) ,你就必須打開此參數。
# CPU 等級是 486 -DX 以上的人可以不需要暹一行。
#注意: FreeBSD 所提供的一般浮點模擬器並不是十分精準,如果你沒有浮點
#運算器卻又需要最好的準確度,建議你把這一行改成 GPL _ MAT>LEMULATE
#來使用 GNU 浮點模擬。因為 GNU 版權的關係,因此不以它來當作内定的模擬器。
options MATH_EMULATE
#網際網路溝通協定,就算你不打算連上網路也要保留 這一行
#因為大多數的程式都會要求 lookback 的網路
options 1 NET
options iNET 6 # IPv 6 溝通協定
# 處理程序檔案系統,讓你珂以使用像 ps 這個指令去得到執行中的
# 處理程序的資訊。
options PROOFS #Process filesystem
47
FreeBSD AH 應用
□ □
3.2.3 各種檔案系統的支援
#最基本的檔案系統支援 * 如果你是從硬碟開機的,你一定需要它。
options
FFS
#Berkeley Fast Filesystem
options
FFS_ROOT
#FFS usable as root device [請勿刪除]
options
SOFTUPDATES
#Enab!e FFS soft updates support
#記憶體映對檔案系統 (Memory-mapped Filesystem} 。基本上這是為了達到快速暫存
#用的 RAM disk »當你有許多 swap 空間的時候這很有用。 /tmp 是一個掛上 MFS
#的好地方,因為許多程式會利用 /tmp 建立暫時檔案。
options MFS #Memory Filesystem
options MD—ROOT #MD is a potential root device
# 網路檔案系統 (Network Filesystem) ,除非你想要經由網路存取
#其他工作站的檔案,否則你不需要它。
options NFS #Network Filesystem
options NFS_ROOT #NFS usable as root device, NFS required
# MS-DOS 檔案系統。除非你每次開機都要使用 MSDOS 擋案系統不然你可以將它
#搴掉,系統會在你使用到 MSDOS 檔案系統時自動載入。除此之外,(尔也可以使用
# mtoois 來存跟 DOS 的軟碟這並不需要有 MSDOS 檔案系統的支援 □
options MSDOSFS #MSDOS Filesystem
# ISO 9660 是 CD-ROM 的擋案系統,如果你只是偶爾用到 CD-ROM
#你可以將它拿掉,系統會在使用到 CD-ROM 時自動載入。此外
#用 CD-ROM 聽 Audio CD 不需要 CD9660 的支援。
options CD9660 #ISO 9660 Filesystem
options CD9660_ROOT #CD-ROM usable as root CD9660 required
48
chapter 3
f%J
3-2,4 軟硬體相容性設定
#和 BSD 4.3 相容[請勿刪除!! I
options COMPAT_43
#在找 SCSI 設備時要延邐多久 (MILLISECONDS) 有的 SCSf 需要一段時間來起始,
#如果你有 IDE 的硬碟可以開機*那麼你可以乎略這一行。如果你是以 SCSI 硬碟
#開機的你可以把這一行的數字調小一點以加快開機的速度。當然,如果因此
#抓不到硬碟,你就必須再把這個値調高一點
options SCSI JDELAY=1 5000
#允許使用者抓取 console ,對X window 使用者尤其有用。例如可以使用 xterm -C 來
#模擬 console ,以得到 talk,write 的訊息,或是任何從系統發出的訊息
options UCONSOLE
# 讓你在 開機時可以做些設定
options USERCONFIG #boot -c editor
# 這個選項讓你可以在開機時從開機選單啓動虛擬參數編輯
options V! SUAL U SERCON F)G#vts ual boot -c editor
# 允許核心除錯追蹤
options KTRACE
#ktrace(1) support
; 最常使用 SYSVSHM 的
的程式 用使用它來提高執行
#這個參數提供 System V共享記憶體的支援
#是X Windows 的 XSHM 功能,有些圖形化
#速度。如果你使用X Windows 或是 BBS ^ 你一定 要打開此參數
options SYSVSHM
49
Fr»eBSD 入 II 應用 □
#提供 System V semaphores 的支援,雖然不常用到,但是它只佔一
#點點 kernel 的空間。如果你架 bbs 站,這是一定要的啦。
options SYSVMSG
#提供 System V messages 的支援,雖然不常用到,但是它只佔 _ 點
并點 kernel 的空間。如果你架 bbs 站,這是一定要的啦。
options SYSVSEM
# Real-time extensions added in the 1993 POSIX. 有 些程式(如 star office} 會用 到它。
options P1003_1 B #Posix PI 003_18 real-time extensions
options _KPOSIX—PRIORITY—SCHEDUUNG
# 這個選項限制 ICMP 封包錯誤回應,可減少被 denial of service packet 攻擊的風險
options ICMPBANDL1M #Rate limit bad replies
# install a CDEV entry in /dev
options KBD 」 NSTALL_CDEV
# 如果要支援多個 CPU 的話,要把下列二行前的 # 搴掉
#options SMP # Symmetric Multiprocessor Kernel
#options APICJO # Symmetric (APIC) 1/0
50
3-2.5 匯流排及軟碟機
device isa # 支援 ISA 匯流排
deviceeisa # 支援 EISA 匯流排,在 586 以後就沒用到了
device pci # 支援 PCI 匯流排
# 軟碟機,如果只有一個軟碟機,可以把 fdl 拿掉
devicefdcO at isa? port 10 一 FD1 irq 6 drq 2
device fdO at fdcO drive 0
device fdl at fdcO drive 1
共
# 如果你使用的是 Toshiba Y-E Data PCMCIA 軟碟機,
# 不要使用上面那一個 fdcO 那一行,改用下画這_行:
device fdcO
3.2.6 IDE 介面裝置
# ATA and ATAPF devices ,就是 IDE 介面的東西
device ataO at isa? port I0_WD1 kq 14
device atal at isa? port I0_WD2 irq 15
device ata
device atadisk #IDE 硬碟 <ATA disk drives)
deviceatapicd # IDE 光碟機 (ATARI CDROM drives)
device atapifd # IDE 軟碟,如 MO( ATARI floppy drives)
deviceatapist #1DE 磁帶機 (ATARI tape drives)
options ATA—STATICJD # 靜態的分配裝置代號
51
\种逸费兹兹©入忾應用][]口厂- . ~
3.2.7 SCSI 裝置
# SCSI Controllers , SCSI 介面的控制
# 以下是不同廠脾的 SCSI 卡,可以使用 dmesg 指令表看你的 SCSI 卡是哪一種型號
device ahb # EISA AHA1742 family
device ahc
# AHA2940 and onboard AlC7xxx devices
device amd
# AMD 53C974 (Tekram DC-390(T))
device isp
# Qlogic family
device ncr
# NCR/Symbios Logic
device sym
井 NCR/Symbios Logic (newer chipsets)
options SYM 一 SETUP J_P—PROBE JVIAP=0x40
# Allow ncr to attach legacy NCR devices when
# both sym and nor are configured
device advO at isa?
device adw
device btO
at isa?
device ahaO
at isa?
device aicO
at isa?
device ncv
# NCR 53C500
device nsp
# Workbit Ninja SCSI-3
device stg
#TMC 18C30/18C50
# SCSI 週邊設備
device scbus # SCSI bus 卜定要有 )
device da
# Direct Access 直接存取 ( 硬碟)
device sa
# Sequential Access 循序存取 ( 如磁帶等)
device cd
#光碟機
52
chapters
編譯核心
device pass # Passthrough device (direct SCSI access)
# RAID controllers interfaced to the SCSI subsystem
# SCSI 的磁碟陣列裝置
deviceasr # DPT SmartRAID V f VI and
device cfpt # DPT Smartcache - See LIN
device mly # Mylex AcceleRAID/eXtreme
Adaptec SCSI RAID
T for options]
RAID
# RAID cootrollers^CSI 的磁碟陣列裝置
device aac # Adaptec FSA RAID, Dell PERC2/PERC3
device ida # Compaq Smart RAID
deviceamr # AMf MegaRAID
device mix # Mylex DAC960 family
device twe # 3ware Escalade
3-2.8 基本遇邊設備
# atkbdcO 控制了鍵盤及 PS/2 滑鼠
device atkbdcO at isa? port fO_KBD
device atkbdO at atkbdc? irq 1 flags 0x1
device psmO at atkbdc? irq 12
# VGA 顯示卡
device vgaO at isa?
# 啓動時更新螢幕,螢幕保護程式會使用到它
pseudo-device splash
53
Fra ❹ BSD 入汽應用□匚!厂
□
# syscons is the default console driver, resembling an SCO console
# 螢幕
device scO at isa? flags 0x100
# 支援 vt200 相容終端機
# Enable this and PCVT_FREEBSD for pcvt vt220 compatible console driver
#device vtO at isa?
#options XSERVER # support for X server on a vt console
#options FAT—CURSOR # start with block cursor
# if you have a ThinkPAD, uncomment this along with the rest of the PCVT lines
# 如果你有 IBM ThinkPAD 筆記型電腦,或其他使用旧 M 鍵盤的,就要使用這一行
#options PCVT_SCANSET=2 # IBM keyboards are non-std
# 浮點數運算,一定要有
# Floating point support - do not disable*
device npxO bI nsxus? port IO_NPX irq 13
# 電源管理
# Power management support (see LINT for more options)
deviceapmO at nexus? disable flags 0x20# Advanced Power Management
# PCCARD (PCMCIA) support , PCMCIA 支援,筆記型電腦才有吧
device card
device pcicO at isa? irq 0 port OxSeO iomem OxdOOOO
device pcicl at tsa? irq 0 port 0x3e2 iomem 0xd4000 disable
# Serial (COM) ports , 序到焯 ,就是 CQM1 COM2 COM3 COM4
54
device
sioO
at isa? port \OJOOU
1 flags 0x10 irq 4
device
siol
at isa? port 10 一 COM:
2 irq 3
device
sio2
at isa? disable port 1C
) 〜 COM3 irq 5
device
sio3
at isa? disable port 10_COM4 irq 9
# Parallel port
5 並列埠,就是一般舊型列表機會用的連接埠
device
ppcO
at isa? irq 7
device
ppbus
# Parallel port bus (required)
device
Ipt
# 印表機 Printer
device
plip
# 在並列埠上使用 TCP/IP
device ppi
# 並列埠介画的裝置
#devfce
vpo
# Requires scbus and da
0
chapter 3
編譯核心
# The probe order of these is presently determined by i386/isa/isa_compat.c,
device ieO at isa? port 0x300 irq 10 iomem OxdOOOO
#tJevice
device IncO
device csO
IeO at isa? port 0x300 irq 5 iomem OxdOOOO
at isa? port 0x280 irq 10 drq 0
at isa? port 0x300
device snO at isa? port 0x300 irq 10
FreeBSD 入門應相 r ]
3.2,9 網路卡設定
# PCI 介面的網路卡 PCI Ethernet NICs.
林 你可以使用 dmesg 去看你的網路卡是哪一個型號
device de # DEC/intel DC21x4x ("Tulip")
devicetxp # 3Com 3cR990 (” Typhoon")
device vx # 3Com 3c590 f 3c595 {'"Vortex")
# 以下也是 PCI 介面的網路卡,使用 Mil bus ,如果你的網路卡型號
# 是下列其中之一,請匆將 miibus 移除
并 PCI Ethernet NICs that use the common Mil bus controller code.
# NOTE: Be sure to keep the 'device miibus' line in order to use these NICs!
device miibus #MII bus support
devicedc # DEC/intel 21143 and various workalikes
devicefxp # Intel EtherExpress PRO/100B (82557, 82558)
device pen # AMD Am79C97x PCI 10/100 NtCs
device r! # RealTek 8129/8139
device sf # Adaptec AIC-6915 (' StarTtre 11 )
device sis # Silicon Integrated Systems SiS 900/SiS 7016
deviceste # Sundance ST201 (D-Link DFE-550TX)
devicetl # Texas Instruments ThunderLAN
devicetx # SMC EtherPower 11 (83c170 "EPIC")
device vr # VIA Rhine, Rhine II
device wb # Winbond W89C840F
devicewx # Intel Gigabit Ethernet Card {''Wiseman")
devicexl 林 3Com 3c90x Boomerang' ''Cyclone")
# 〖 SA 介面的網路卡,如果很不幸的你的網路卡是旧 A 介面,
56
chapter 3
編丽 fur
# 建議你換成 PCI 的,否則你應該要先知道你使用的 irq 及 port
#如果你的型號是 edO ’ 則請匆移除上述的 miibus
# ’device ed’ requires ’device miibus'
device edO at isa? port 0x280 irq 10 iomem 0xd8000
device ex
device ep
device feO at isa? port 0x300
# Xircom Ethernet
device xe
# 無線 網路 , PR 旧 Ml IEEE 802.11b wireless NIC,
device awi
# 使用 PCMCIA 設備的無線網路
# WavaLAN/IEEE 802.11 wireless NICs. Note: the WaveLAN/fEEE really
# exists only as a PCMCIA device, so there is no ISA attachment needed
# and resources will always be dynamically assigned by the pccard code,
device wi
# Aironet 4500/4800 802.11 wireless NtCs. Note: the declaration below will
# work for PCMCIA and PCI cards, as well as ISA cards set to ISA PnP
# mode (the factory default). If you set the switches on your ISA
# card for a manually chosen I/O address and IRQ, you must specify
# those parameters here,
devrcean
57
FreeBSD 入 P! 應觸 □□□ 二 U
3.Z10 虛擬裝置
# loop 是 TCP/IP 的通用 loopback 裝置 a 這是必須的
pseudo-devic€ loop # Network 1 oopback
# 如果你有乙太網路卡,這個也是必須的,用以支援乙太網路
pseudo-device ether # Ethernet support
# si 用以支援 SLIP , SLIP 已經幾乎被 PPP 所取代
# ppp 可以更簡單、快速的建立 modem-to-modem 連線
# s! 後面的數字是要模擬多少條 SLIP
pseudo-device si 1
#支援撥接連線
pseudo-device ppp 1 # Kernel PPP
#tun 會被 PPP 所用
pseudo-device tun # Packet tunnel.
# 最大的 ttys ,如 telnet 同時上線最大人數,内定是 16
# 你可以在 pty 的後面加上數字來提高人數
# 最大是 256
pseudo-deviC6 pty # Pssudo-ttys (telnet etc)
pseudo-device md # Memory "disks' 1
pseudo-device gif # IPv6 and IPv4 tunneling
pseudo-device faith 1 # IPv6-to-IPv4 relaying (translation)
# 用來支援封包的監聽’你可以使用 tcpdump 柬查看封包
pseudo-device bpf #Berkeley packet filter
58
chapter 3
3,2.11 USB 裝疆
# Pseudo devices - the number indicates how many units to allocate.
# 支援 USB
# USB support
device uhci
# UHCI PCI->USB interface
device ohci
# OHCI PC!->USB interface
device usb
# USB Bus (require<
J)
device ugen
# Generic
device uhid
# ''Human Interface Devices' 1
device ukbd
# Keyboard
device ulpt
# Printer
device umass
# Disks/Mass storag
\o - Requires scbus and da
device ums
# Mouse
device uscanner
# Scanners
# USB Ethernet,
requires mn
device sue
# ADMtek USB ethemet
device cue
# CATC USB ethernet
device kue
# Kawasaki LSI USB ethernet
59
: rg^FraeBSD 入 rt 膣坩 r l — _
3.2.12 音效裝置
在原本的 GENERIC 設定中並未將音效卡的驅動程式放入,如果您需要
加入音效卡,您可以參考 LINT 中關於音效卡的選項。如果您的音效卡是
PTC 或支援即插即用 ( PnP ) ,在設定上會比較簡單’以 SoundBlaster 16 ^
64、128等爲例,只要加入下列 選項:
device pcm
device sbc
如果沒有支援 PnP ,如 ESS 1868 則使用下列設定 :
device pan
device sbcO at isa? port 0x220 irq 5 drq 1 flags 0x15
如果您的音效卡還是無法驅動,建議您參考 LINT 中的設定,找出適合您
的音效卡。在安裝完音效卡後,您必須在 /dev/ 中增加音效卡的裝置節點 :
(r^) # cd /dev
® # iMAKEDEV sndO sndl pcaudio
您可以使用下列的指令來聽 CD 音樂,不過要先將音樂 CD 放入光碟機_ =
# cdcontrol -f /dev/acdOc play
這裡我們假設您的光碟機代號爲 acdOc ,您如果不知道光碟機代號’可
以使用 dmesg 來找出 cdrom 的裝置節點名稱°如果耍停止播放,則使用
下列 指令:
# cdcontrol -f /dev/acdOc stop
60
3.3 編譯與安裝
chapters
編譯核心
編譯新的核心
修改完核心之後,接著要來編譯了 D 編譯核心有二種方式, 第— 種是使
麵統的編譯方式,細下列指令,請將 MYKERNEL 改成您的核心檔名:
#config MYKERNEL
# cd ././compile/MYKERNEL/
# make depend
(r^) # make
h 上面的指■^完成後,應該就完成了核心的編譯。如果在過程中出現錯誤
的訊息’注 L 觀倾’並再次修改。 - 般常見_職就是網路
^驅動程式要永 miibus 5 而卻將它移除了。完成了上述的步驟確定沒問
題時,就要安裝新的核心了。使用下列指令加以安裝
# make instalf
在 FreeBSD 4.2 -STABLE 2 000年2月取後的版本,我們可以使用新的方
式來編譯及安裝新的 核心:
# cd / usr/src
® # make buildkemef KERNCONF^MYKERNEL
® # make install kernel KERNCONF=MYKERNEL
安裝完成後,將編譯過程中使用的檔案刪除,並重新開機。
61
FreeBSD 入 P1 酿用 □口
□ □
® # cd /; rm -rf /usr/src/sys/compiie/MYKERNEL
® # synG ; sync;sync;reboot
如果您使用新的方式安裝核心,編譯過程所產生的檔案會放在
u Sr / S n :/ S y S 中,請使用下列指令 刪除:
# rm -rf /usr/obj/usr/src/sys/MYKERNEL
3.3,2 新的核心有罔題
萬—很不幸的,你發現編完核心後,無法開機進入 FreeBSD ,這時候就
要使用舊的核心來開機了。在開機時看到倒數計時的時候,按 Enter 以外
的鏈,會出現 bod 這時候就先打 unload 來將已載入的資料移除,再打
/ kemeLold 以使用舊的 核心。
boot: unload
boot: /kernel.old
萬一連舊的核心也無法使用時,就使用安裝時的核心。
boot: /kernel.GENERIC
如果你想要刪除壞的核心,由於 kernel 檔有特殊的檔案屬性,因此必須
先使用下列指令修改屬性’之後才可以刪除。
(^) # chflags noschg /kernel
62
chapter
友善的界面
_j FreeBSD 入忾應 用口 □ □ □ □
4.1 使用者介面設定
4.1.1 為什麼要更改設定
FreeBSD 安裝好後,我們必須做一些設定讓 FreeBSD 使用起來更順
手。在預設的況狀下,系統並不支援中文檔名,對於使用中文的人不太
方便。另外,命令列的樣子也不符合我們的需求。如果你想要自製化一
些指令,也可以在這裡加 上去。 總而言之,在這個部份我們要做到的功
能有下列幾點=
加上一些設定來支援中文的檔名
_ 修改命令列指示,加上路徑名稱
M 更改預設的文書處理軟體及指令
鼷 建立中文終端機環境
FreeBSD 預設是使用 tcsh ,所以我們的設定都是以 tcsh 爲主。
4.1.2 csh.cshrc
首先我們要將命令列改成下面這樣:
mydomain [/home/john] -john->
就是開頭是機器名稱,再來是路徑名稱,最後是使用者名稱。然後我們
要將指令 is 變成 Is 不,就是每次打 is 時,系統會出現 Is - F 的效果。最
後,因爲 vi 文書編輯器對於初學者而言不太好用,所以我們設定文書編
64
chapter 4
_ 友善 的开面
輯使用 ee 。 要這麼做必須編輯 / etc / csh . cshrc 及 -/xshrc °
首先編輯 / etc / csh . cshrc 加入下列設定:
setenv EDITOR ee
alias Is fs -F
set prompt = [%/] -%n-> ,r
rll 於在 / etc 卜的設定是通用的設定,但如果使用者自己的設定和通用設
定一樣時,會以使用者的設定爲主。所以還要修改自己的設定,要這樣
必須先編輯〜 / xshrc ,並找到 se te nv EDITOR vi 換成 setenv EDITOR ee ,
並加入一行 alias Is Is - F 才能有效喔。
如果希望日後每個使用者旳設定都是這樣,必須修改
/ u S iAha re / S kd / d 0 t . csh rc 檔案,該檔內容的修改和修改 cs hrc — 樣,把 vi
換成 ee ,並加入 alias Is Is - F 。因爲在使用 adduser 指令新增使用者時,它
會問你是否要將 / usr / share / skel / dot , file 複製到使用者目錄下,因此我們就
修改這裡,讓日後新增使用者時能使用該設定。
4.1.3 csh.login
接著要設定支援中文的 console 環境。編輯 / etc / csh . lodn 並在最後面加
入以下的設定:
setenv ENABLE_STARTUP—LOCALE 2h_TW.Big5
# 若是使用遠端登入時,才能打出中文
setenv LC^CTVPE is 」 SJSO_8859-1
# 若是 console 下用,才能打出中文
setenv LANG zh_TW.Big5
65
FreeBSD 入 f! 應用 □ □□ = !];-]
4.1.4 使用中文終端機
如果要在 console 下(就是在機器前面)使用中文的環境,必須安裝
bi g 5 con 軟體才 可以。 怎麼安裝呢?您可以將本書光碟二 / ports/distfiles §
錄中的所有檔案複製到 / usr / p 0 rts / distmes 中,或是將光碟放入光碟機中,
並使用指令 mount / cdrom 將光碟機 mount 進來。如此一來’在安裝 I 人體
時, 系統 就不會要求連上網路取回所需檔案(有的檔案不能從 CDR0M 女
裝,您必須至網路下載)。接著以 mot 的身份直接使用下列指令來安裝:
(^) # cd /usr/ports/chinese/big5con
(^) # make install clean
安裝完後,使用指令 et 就可以出現像 DOS 下倚天中文的環境,如圖 4*1
iete
undelete Hue
I delete uord
restore word
undelete cJiar
p prey line g preu page
A si next tine 、 page
A b b(trk chat "e next yon*
A r iorwarrt char
ESC-Enter: exit
中文沒問_
ne # file '' test "
t 注音 i 【半形 i
中鐘終鐘忠丧忪盅螽
圖 4-1
66
4.2 登入前後的訊息修改
chapter 4
建立友善的介囿
4-2.1 登入後的訊息
系統登入後’會自動秀出一'段文字’稱爲 Message Of The Day ( motd ) °
适一段文字是可以修改的,你可以編輯 / etc / motd 來製作自己的晝面。如
果你想使用像 BBS 中的文書編輯軟體,來畫 ANSI 圖的話,你可以安裝
ve 這個軟體。
# cd /usr/chinese/ve
井 make install clean
再使用 ve / etc / motd 來修改訊息。
4.2.2 登入前的訊患
在 teinet 到 FreeBSD 時,你會看到下面的 晝面:
FreeBSD/1386 (alexwang.com) (ttypO)
login:
我們在這裡要做的就是把它改成想要的樣子。更改 login 前的畫面有二
種方式,一種是修改 / etc / gettytab 及 / etc / issue ,另一種方式是修改
telnetd 。
方式一:
編輯 / etc / gettytab ,找到 default 的地方。
67
FreeBSD 入忾應用
defaults
: cb:ce:ck:lc:fd#1000:im-\r\n%s/%m {%h} (%t)\r\n\r\n:sp#1200:\
: if=/etc/issue:
其中的 %m %h %t 分別對應到 FreeBSD i 386 alexwang.com ttypO ,如
果你不想顯示 FreeBSD ,就把 % s 拿掉。最後一行 if =/ etc / issue 就是表如
果沒有 issue 這個檔的話,就執行 default 。
如果你不僅僅是要修改 FreeBSD / i 386 這個部份,還想要在 login 前秀出
一段文字的話,你可以新增 / etc / issue 這個檔,並編輯你想要的畫面。和
mold 一樣, issue 也可以使用 ANSI 畫面’所以你可以用 ve 來編輯 晝面。
如果你在該檔中加入 %h % t 等參數的話,也是會出現 FreeBSD
B 86 alexwangxom ttypO 等,如果不加就不會出現°
不過在 FreeBSD 4.5- RELEASE 中,必須重新編譯 telnetd 才能使用 issue
作爲登入前畫面。所以要先執行下列指令:
(^) # cd /usr/src/libexec/telnetd/
# make all install
方式二:
如果你想要在登入前執行一些指令,例如秀出開機時間等’必須要以更
改 telnetd 的方式來做。編輯一個可執行檔 / usr / local / libexec / tdnetd . sh 內容
如下:
#!/bin/sh
TTY=7usr/bin/tty I /usr/bin/cut -c9’
if [ ,T $TTY" ^ V ]; then
68
chapter 4
建立友 M 面开面
exec /usr/lfbexec/feJnetd
else
/bin/cat /etc/issue
echo ••顏色控制碼 7usr/bin/_me' 控制結束碼 n
exec /usr/libexec/telnetd
fi
上面控制碼部份,你可以使用 ve 來加入顏色控制碼,編輯完後要把該
檔變成可執行的檔案,使用下列指令:
® # chmod 755 /usr/local/llbexec/telnetd.sh
再編輯 /etc/inetd 細 f ,將原來的 7usr/libexec/telnetd telnetd " 換成
7usr/local/libexec/telnetd.sh telnetd.sh_ r :
telnet stream tcp nowait root /usr/libexec/telnetd.sh teJnetd.sh
最後重跑 inetd ,使用指令 kill-HUP'cat/va—etdpid 、 即完成設定。
69
FreeBSD 入 n 廉用] 口
70
]=^ Frs®BSD 入門廳 用;] □ □ □ = 二 I ":
5.1 帳號管理
5.1.1 新增使用者
新增使用者時,我們會以 adduser 這個指令來進行, adduser 指令其實是
將新增使用者所必須做的事以 pd 寫成一個執行檔來自動幫我們做。爲了
了解系統對於使用者管理細節,首先,讓我們來複習一下如何使用指令
adduser 來新增使用者。當執行 adduser 指令後,系統會問我們一些問題:
輸入使用者的 shell ,我使用比較好用的 tcsh ,故輸入 tcsh
Enter your default shell: csh date no sfi tcsh [tcsh]:
使用者目録要放在哪
Enter your default HOME partition: [/home]:
是否要從 skel 目錄中複製使用者的預設設定檔,直接按 Enter
Copy dotfites from: /usr/share/skel no [/usr/share/skelj:
是否要送出訊息給使用者,直接按 Enter. 送出 /etc/add user, message
Send message from file: /etc/adduser.message no [/etc/adduser.message]:
是否要使用密碼,按 Enter * 預設是 y
Use passwords (y/n) [y]:
使用者的帳號,只能使用小寫的英文字母及數字
Enter username [a-z0-9_-]:
使用者全名 * 輸入你的真實姓名
Enter full name G :
要使用的 shell ,打 tcsh
Enter shell csh date no sh tcsh [tcsh]:
使用者的目錄,按 Enter 即可
Enter home directory (full path) [/home/asdf|:
72
cha pter s
fXjJmmmm
使用者的編號,按 Enter 即可
Uid[1001]:
登入的等級,按 Enter 即可
Enter login class: default []:
登入的群組,按 Enter 即可
Login group asdf [asdf]:
是否要該使用者加入其他群組,請注意,因
打 wheel ,這樣你才可以 su 成 root ,也就是
Login group is “asdf T . Invite asdf into other g
為第一個使用者是你自己,所以在這裡要
你的帳號才可以登入成 root 帳號
roups: guest no [no]:
密碼
Enter password □:
再輸入一次
Enter password again []:
以上都正確嗎?
OK? (y/n) [y]:
最後還有一些問題’都是直接按 Enter 就可以了,等到它問我們是否要
再增加下一個使用者時,可以答 y 來增加下一個使用者,也可以答 n 回
到命令列。
看了 adduser 指令的過程,您對於新增使用者應有的步驟應該已經有初
步的了解了,接下來我們要介紹 adduser 這個指令到底做了哪些事。
_在 /etc/group 中加入使用者的群組
_ 在 /etc/master, passwd 中加入使用者
在 /home 中建立使用者目騄,並建立 dotfile
_在 /var/mail 中建立使用者郵件目錄
驪 送出訊息給使用者
73
]
FreeBSD 入 rs 應用 ] □ □ □ □ _
知道了以上的流程,我們也可以自己做上述的步驟,但我們必須先知道
group 及 master . passwd 等檔案的格式°所以我們接 F 來要介紹這些檔案 55
5丄2 /etc/group 介紹
在使用者的管理方面, FreeBSD 大致上可以分爲群組管理及帳號管理。
每一個帳號至少屬於一個群組,這樣子有利於權限控制。例如學生的帳
號就有一個學生群組,而老師的帳號就靨於教師群組,某幾位老師屬於
管理者的群組。這樣一來,我們除了可以針對個人設定權限外’也可以
針對不同群組給予不同的權限。
/ etc / group 這個檔案就是記錄群組的檔案,這是一個文字檔,我們可以
使用 ee 等文字編輯軟體打開它。在 group 檔案中,其格式如 T :
wheel :*:0: root, alex
students:*: 1000:
teachers:*:1001:
每一個欄位以冒號分開,以最後一行爲例,第-個攔位代表群組名稱爲
teachers ? 而群組代號 ( gid ) 是1001。我們可以自行使用文編輯器加入想
要的群組名稱及 gid ,但要注意的是群組名稱和 gid 不能重覆。
第一行的最後面是 _ t , alex ,在 FreeBSD 中,如果其他使用者要能使用
su 變成超級使用者的話,必須將其帳號加入 wheel 群組中。除了使用文
字編輯外,也可以使用指令 pw 來新增群組:
(^3 # pw groupadd newgroup
(^) # pw groupshow newgroup
newgroup:*;1002:
74
chapters
fXJ 使用善 ¥連^
第一個指令是以參數 groupadd 來新增群組 newgroup ,再以參數 group -
show 來顯示 newgoup 的賣訊 。
5.1.3 /etc/master,passwd 介紹
FreeBSD 使用 shadow password 的方式來保護密碼檔,只有 root 才可以
讀取編碼後的密碼檔 / etc / master.passwd 。但是這並不是系統用來驗証的檔
案,爲了加快速度, FreeBSD 將該檔做成資料庫 / etc / spwd.db 及
/ etc / pwd.db ? 因此在修改完 master.passwd 後,必須使用指令 pwd_mkdb
來將 master.passwd 做成寶料庫檔案。不過一般而言,我會使用 vipw 這個
指令來修改 master.passwd , vipw 會先將 master.passwd 以預設的文書編輯
軟體打開,修改完存檔後,它會視需要自動更新資料庫。
執行 vipw 後、會出現:
root:$1$K9ooyz50$b3DJTTe,IWiwQMxolUft/:0:0::0:0:ChBrlie &:/root:/bin/csh
nobody:*:65534:65534::0:0:Unprivileged user:/nonexistent;/sbin/nologin
tom:Bk5Al4MiRKCJ2;1000:1000::0:0:Tom ChBng:/home/tom:/bin/tcsh
它的格式是 : name : password : UID : GlD : dass ; change : expire : fullname : home : shell
75
訪入門應明□□二
|g name :使用者帳號名稱,最多可以使用8個字元,不可重覆>
_ password :可以是空的,代表不用密碼就可以登入,這樣很危險;也可 以是* ,表
示不可以登入;上面 vipw 顯示出來的項目中,以使用者 root 而言,他的密碼是使
用 MD5 編碼過的,特徵是開頭為$1且看起來比較長;而使用者 tom 的密碼是使
用 DES 編碼週的, DES 會將密碼編 成一串 13個字元的符號。
gg UID :使用者代號,每個使用者都不_樣,不可重覆,如果有多個帳號使用同樣的
UID * FreeBSD 會將它當成同一個帳號。編號從0到65535。 UID 0為系統中超
級使用者的代號,内定只有 root 和 toor 的 UID 為0。 toor 帳號是 bash 所建立的
使用者,内定不能使用該使用者登入。
H GID: 群組代號,編號從0到65535。
class :除了群組外, class 是更有彈性的控制方法,可以針對 /etc/login,conf 中不
同的使用者設定來調整每個使用者的可使用的資源設定。
H change ^強迫使用者變更密碼的時間,以從1970年到所要變更曰期所經過的秒數
來表示你可以使用 date +%s 來求出從1970年到現在時間所經過的秒數,每天為
86400秒,以現在時間的秒數加上 86400* 天數即為你要設定的時間。
你可以使用指令
expr 'date +%s' + 86400 \* 30
來取得30天後的秒數,再將其填入即可。若設為0則表示不使用此功能3
H expire :帳號的有效曰期,一樣是以從1970年到到期曰所經過的秒數來代表若設
為0則表示不使用此功能 =|
H fullname :使用者 全名, 你可以在此鍵入真實姓名。
home :使用者的家目錄,即使用者登入後的所在目錄。
_ shell - 使用者的 shell 。如果使用 /sbin/nologin 表示該名使用者不可以登入。
76
5_ 1.4 刪除使用者
chapters
知道了新增使用者的步驟後,您大概已經知道要怎麼刪除使用者了吧。
只要把新增使用者的步驟反過來即可 D
矚 先移除使用者目錄 / home/tom * 使用指令 rm -rf / home/tom
再移除使用者郵件目錄 / var / mail/tom
再移除使用者 crontab 檔案 / var / cron/tom
19 再以 vipw 來移除使用者帳號
若該群組已無人使用,則編輯 / etc / group 來移除 群組,
更簡單的方法是直接使用 rmuser 指令來移除 , 如 rmuser tom 0 使用
rrnuser 可以快速的移除使 用者, 其執行結果如下:
iome / tom :/ bin/tcsh
要移除這一個使用者嗎?
V _是否要移除使用者家目錄?
file , updating databases , done .
Matching password entry :
tom : J 7 kPK 0 pKTn 2 oQ :1001:1001;;0:0: Tom:/h
fs this the entry you wish to remove ? y _ 真的
Remove user's home directory (/ home / test )?
# 移除使用者正在執行的程式及更新系統資料
Removing user’s at jobs:Updating password
# 移除使用者群組
Updating group file : (removing group test - personal group is empty ) done
# 移除使用者家曰錄
Removing user T s home directory {/ home / test ):
#移除使用者信件
Removing user's incoming mail file / var / maii / test : done .
# 移除使用者暫存目録
Removing files belonging to test from / tmp :
done .
one .
77
]
jJHb FreeBSD 入 M 應用 ]
]
Removing files belonging to test from /var/tmp: done.
Removing files belonging to test from /var/tmp/vLrecover: done.
5.2 磁碟配額
當系統中有多位使用者時,如果其中一個擁有大量 檔案, 那麼其它使用
若便無法有足夠的空間來使用。如果系統有許多使用者,而又不限制他們
對磁碟的使用量,那麼磁碟很容易就會爆掉,因此我們必須對使用者加以
限制。您可以限制系統中每個使用者可使用的硬碟大小 ( quota ) 。步驟如下:
^在核心設定中加入 options QUOTA 這一行,並重新編譯核心。
■在 /etc/rcxonf 中加入一行 enable—quotas=’ T YES%
茌 /etc/fstab 中要啓加磁碟限制的分割區中加入參數 userquota ^ 您也可以加入
groupquota 來限制群組的配額°
# Device
Mountpoint
FStype
Options
Dump
Pass#
/dev/adOsIb
none
swap
sw
0
0
/dev/adOs la
/
ufs
rw
1
1
/dev/ad 1 si f
/home
ufs
rw.userquota
2
2
/dev/adOsle
/usr
ufs
rw
2
2
/dev/adlsle
/var
ufs
rw
2
2
H 重開機並設定使用者的 quota 限制。
完成了上述的步驟並重新開機之後,我們就可以使用指令 edquota 來編
輯磁碟配額。首先,以指令 edquota -u tom 進入文書編輯’我們通常會加
入二行,一行限制檔案大小,一行限制檔案數:
78
Quotas for user tom :
/ home : blocks in use : 65, limits (soft =
inodes in use : 7, limits {soft = 5000, ha
共中 blocks 代表使用者使用檔案大小總合,而 i nD des 代表檔案數目。
soft limits 代表使用量到多少時提出警告’而 hard limits 代表使用量達多
少時立刻禁止寫入。
上面的範例中,使用者 tom 目前使用的檔案大小爲 65 K ,在檔案大小
總合爲 50000 K 時提出警告, 55000 K 時禁止寫入。目前該使用者有7個檔
案,在檔案數達5000個時提出警告,達6000個時禁止寫入。
我們也可以使用 edquota tom 2000^3000來以使用者 tom 的設定爲範
例,將 UID 爲2000到3000的使用者設定爲和 tom —樣。或者使用指令
edquota tom jack rose 來以使用者 tom 爲範例,將 jack 及 rose 的設定變
成和 tom —樣。
您可以使用 quota -v tom 來看使用者 tom 目前的使用情形,或使用
repquota 來査看所有使用者目前的使用情形^
在 4.5 -RELEASE 中,開機內定會檢查所有使用者的 quota ^但這必須要
花上一段時間’如果您不想在開機時自動檢查 quota 的話,請在
/ etc / rc.conf 中加入 check — quotas =" NO f _ 。在 FreeBSD 3.2 版以前,開機內
定是不撿査 quota 的,如果你想在開機時即撿查的話,請在 / e t c / rc . con f 中
加入 check __ quotas = r, YES ,f
79
FreeBSD 入 《應_口 .[: .
5-3 大量新增帳號
對於大型主機的管理者而言,要大量新增帳號時’若沒有一套 n 撇步 1 •的
話,使用 adduser 指令來新增帳5虎將會非常累人’所以我們必須要想出一
個大量新增帳號的方法。
大量新增帳號的方法有很多,最簡單的就是寫一個程式來處理’只要依
照之前提及的新增帳號步驟使用程式來一步步建立或在程式中呼叫
FreeBSD 系統中新增帳號的指令並經由迴圈來完成。但是 adduser 指令會
問-堆問題,不適合拿來作程式中要呼叫的指令’所幸在 FreeBSD 中還
有一個管理使用者帳號及群組的程式 pw ,所以筆者就以指令 pw 加上一
些控制來寫成 script 。
一般而言,如果要新增的帳號是沒有規則性的’那麼就必須先將帳號做
成一個文字檔,再以程式讀入。若帳號是有規則性的,則可以給定參數
來完成。您可以在本書所附的第二片光碟中的 examples R 錄中找到筆者
所寫的「新增大量帳號」程式,檔名是 adduser . tar.gz °
這個程式可以使用檔案匯入帳號及密碼,或只給帳號並自動產生密碼’
最後將帳號及密碼存成一個檔案(預設是 adduserJog ) ^我們也可以使用連
續產生帳號的方式,產生一堆連續的帳號,產生的結果同樣會放成
adduserJog 中 °
首先,將第二片光碟放入光碟機中,並使用下列指令將檔案複製到 mot
的目錄下:
(^) # mount /cdrom
# cp /cdrom/examples/add user.tar.gz /root/
80
chapters
WmmWm
將檔案放到硬碟中後,請切換目錄到 / root 並以下列指令解壓縮:
#cd /root
# tar zxvf addusentar.gz
解壓縮後,進入 adduser 目錄,再將 addusenpl 更改權限爲可以執行
# chmod 700 adduser.pl
addiiser . pl 這個程式的使用方式如下:
odduser.pl -f users.txt
參數 -f 或 -file 表示使用檔案匯入,檔案名稱可以自由
命名,擋案每一行内容即一個帳號的設定,每一行的
格式可以是只有帳號或者是有帳號及密碼,帳號和密碼
間使用逗點 1 \_"隔開 & 本範例中將以檔案 usertxt 來產生
帳號。
addusenpl -u aiex 001 00:
i
參數 -u 或 -user 表示使用連續帳號,此範例將產生
alexOOl alex002 alexOOS 三個帳號。
5.4 備份與移轉
在了解了新增使用者的步驟後,您對於備份使用者的作法 a ; 心中應該也
有個譜了吧。在更新系統時,使用者的資料需要備份 的有:
驪 /etc/master, passwd
圔 /etc/group
M 使用者目錄 /home
|g 使用者郵件目錄 /var/mail
^使用者定時執行的檔案 /var/cron/tabs
81
FreeBSD 入 n 應用 □ □
5A1 備份
除非我們和使用者間已有共識,不幫使用者備份其郵件及檔案’否則
平常想要備份使用者資料的話,這是一件麻煩且費時的工作°不管是外
在因素或是硬體固障,系統都有可能寶料 流失。 對於一個公眾伺服器的
管理者而言,事前明白告知使用者系統管理的原則是一件+分重要的
事。如果未事前請使用者自行備份個人的檔案及郵件的話,首先,備份
的工作將非常耗時,尤其是使用者擁有大量檔案時。再者,若未備份檔
案,當系統資料流失時,容易和使用者產生爭議,就算平常每天都有備
份,也只能保住備份當時的檔案,從備份到系統出問題的時候所產生的
檔案就無法回復了。
如果不必備份使用者個人寶料的話,就只需把 / etc / master.passwd R
/ etc/group 存在別的儲存設備或電腦中,要回復時只要依下列移轉的步驟
做即可。
5.4.2 移轉
如果系統中已有其它使用者,要先編輯 / etc/group ,加入和備份的 group
檔案有差異的地方,再使用 vipw 來將加入和備份的 mastenpasswd 有差異
的地方。如果新系統中無其它使用者,則將所備份的 master.passwd 及
group 放到新電腦的 /etc 下,再執行下列指令以將密碼檔轉成資料庫格式
即可:
# pwd_mkdb -p -d /etc /etc/master.passwd
如果沒有要移轉使用者個人資料的話,也必須建立使用者家目錄及郵件
82
chapters
目錄 ° 如果要移轉使用者目錄的話,記得移轉後要撿查一下該目錄的所
有人是不是該使用者。如果不是,就必須使用下列指令來將使用 者目錄
擁有者更改爲所屬的使用者:
# chown -R user.group /home/user
上面這個指令是將 / home/user 這個目錄及其下所有目錄的所有人變成使
用者名稱爲 user ,群組爲 group °
我們也可以在密碼檔及群組資料移轉後,將舊的硬碟存放使用者資料的
磁區(假設是 / home ) mount 到 /mnt 下,再到 /mnt 下存放使用者資料的目
錄中使用指令
# tar elf ' 丨 tar xvpf - -C /home
來將使用者資料複製到 /home 中。並依此方法 mount 使用者郵件目錄
磁區並複製到 / var/mail 下。
5.5 使用歷程記錄
5.5.1 記錄使用者指令
爲什麼要記錄使用者下過的指令?並不是爲了要監視使用者,而是在系
統有問題時,可以找出原因。找出使用者曾經使用過哪些指令,以了解
問題的所在。 FreeBSD 提供指令 lastcomm 讓你查看系統中使用者執行的
指令,但是你必須先修改 / etc / rc . conf ,1
J 卩上下列一行設定:
accountfng _ enable = ,, YES f,
83
^^Fr@®ES© 入鬥應 L:=
系統會將使用者的歷程記錄在 / var / account / acct * 中’最新的記錄是
acct ,隨著資料越來越多,系統每天會將該檔案移成 acctl ,而 accl 將變
成 acxt 2 ,依此類推。如果站上使用者很多的話, acct 的檔案將變得非常
大,所以你必須確保該目錄有足夠的空間存放資料,爲了避免檔案過
多,系統內定只會保留最近四天的資料。
當下達指令 lastcomm 時,如果我們未使用任何參數,則系統會以 / var /
account/acct 爲參考’印出所記錄的 資料。 你也可以使用 lastcomm -f acctl
來查看前一天的資料。
5.5.2 監看使用者
當使用者登入系統後, root 可以使用 watch 指令來取得線上使用者的視
窗畫面。也就是說當下達指令後所看到的畫面就會和該線上使用者
一樣。我們可以觀察該使用者在做些什麼事,輸出的結果又是什麼°
這個指令並不是要給人拿來彳故壤事用的。如果有不友善的使用者登入系
統時,可以使用它來觀察該使用者的動作,並適時阻止。
只有超級使用者 root 可以執行 watch ,且在執行前必須先在 kernel 屮加
人下列的設定並重新編譯核心:
pseudo-device snp
並使用下列指令新增 snoop device :
# cd /dev
# ./MAKEDEV snpO snpl snp2 snp3
84
chapters
运丽麵
接下來就可 watch 指令了。首先,先下指令 w 來看一下站上有哪些使
用者。指令結果的第二個欄位部份,有使用者的 tty ’例如 pO 、 vO 等,選
定要監看的使用者後,使用 watc h ttypO 來監看該使用者,其中 ttypO 即該
使用者的 tty 。你可以使用 CTRL + X 來切換不同的 tty ,也可以使用
CTRL + G 離開回到自己的畫面^
5.5.3 控制 root 的使用
如果有在 wheel 群組中加入一般的使用者,則該使用者可以使用指令
su 並輸入 roo t 的密碼後變成超級使用者。但如果系統中有多位使用者具
有 root 的權限,我們根本不知道是誰使用了 root 的權限、執行了哪些指
令:如果我們想針對不同人給予不同的權限,例如一個人只有備份的權
限、另一個人只能觀看系統設定, S u 也無法達成我們的要求。因此有人
發展出 sudo 這個軟體來支援系統的管理。
不過 sudo 並不是 FreeBSD 系統內定指令,我們必須自己安裝。所幸
FreeBSD 己將該軟體移植到 ” por f 中,我們只要執行下列指令即可輕鬆的
安裝了。不過您必須先將所附光碟二 / ports/distfiles 目錄中的檔案複製到
/ usr / ports/distfiles 中,或者先將光碟 mount 進來,否則電腦必須先連上網
路喔!由於在 port 中 sudo 的安裝設定並未打開 su do 執行指令記錄,如果
你希望它能將執行 sudo 的 log 記下來的話,必須先編輯 / usr / ports / securi -
ty / sudo/Makefile ,將 CONFIGURE 一 ARGS 中的參數 — disable - log-wmp 拿
掉。
# cd /usr/ports/security/sudo
(® # make install clean
85
Fr_BSD 入 PI 麻用 □ □ □ □
安裝完後,要先執行 / usr / local / sbin/visudo 以設定 sudo 的設定檔
(/ usr / loca / etc / sudoers ) °以下簡單說明該設定檔如何設定’詳細說明及範例
# Host alias specification ( 如果你只有一台機器,可以不 ■ 設)
Host_Aiias CUNETS ^ 126.138.0.0/255,255,0.0
Host_AliBS SERVERS = master, mall, www, ns
# User alias specification ( 把使用者分成群組,也可以不用分)
User_ANas PARTTIMERS = millert, mikef, dowdy
User Alias WEBMASTERS = will, woody, wim
User_alias BACKUP = tom, jack
# Cmnd alias specification ( 把可以執行的指令分成一個個群組)
CmncLAIias READ=/bin/ls , /bin/cat,/usr7bin/tail,/usr/bin/head
Gmnd_Aiias BACKUP^sbin/dump./usr/bin/tan/usr/bin/find, \
/usr/birVcpia/bin/cp,/sbin/mounUbin/dd
# User privilege specification ( 設定使用者的權限)
root ALL=(ALL) ALL
%wheel ALL » (ALL) ALL
# 表示 jack 在 CUNET 中所有機器都可執行指令群組中 BACKUP 指令
jack CUNETS ^ BACKUP
# 表示使用者群組中 PARTTIMERS 群組的人,只能在 SERVERS
# 群組中的機器裡執行 READ 群組的指令
PARTTiMERS SERVERS = READ
設定完後,使用者即可執行 SUdo <允許的指令>,使用者只要輸入自己
的密碼即可,不必知道 root 的密碼,而且5分鐘內再次執行 sudo 時不需
再輸入密碼。如果你有打開 log 記錄功能, sudo 執行成功或失敗的 log 都
將被記錄到 / var / log / sudo . iog 中。詳細說明請閱讀說明 man sudo 。
86
chapter
路設定
FrMBSD 入 n 應用 ] □ □ J
6.1 固接網路
如果您的網路連結方式是固接網路,如學校的宿網、固接式 ADSL 、固
接式 Cable ^恭喜你,這種設定最簡單,而且你的連線速度應該令人羨
慕。這樣的網路設定 m 以經由下列方式 達成:
M 使用 / stand/sysinstall
^手動設定
6.1.1 使用 /stand/sysinstall
以 root 身份,執行 / stand / sysinstall 進入安裝時的畫面。
~ ~ ^tand^sy^rnstall Ha in neim
Uelcme to the rreelSI Installation and coi»fIfttration tool. Please
select one of the options heluu ly «sing the arrow keys or typing tftc
first character Df Dpt Inn dare ycu'pe Interested in. LTitM)S<e an
DpUon uLtli ISPBCEl or【EKTEBh to exit, use HAB] tu ioue to Exit.
Jsage
tandard
inf Lgtire
nc
Eynap
ptions
LkII
Quick start - Kdm tQ use this iteiMi sustpia
Begl^ a stdnddN fnstdLUtian (TEQdXiefldctn
Begin a qiic)t IvstdlidUon CFor the inpatient)
J ■--* ---- iertsl
fnsUllaUtm Instruct ions > etc .
Select keyboard type
Uteu/Set uarious InsUMatlan apt Lons
Repair mile iilth CDHan/BUD/fltippy or start shell
pgradf ; Upgrade an Existing syst^n
]ad ConrJg Load default install configuratiaii
SLuS'^ry of functioifis
UBQQDD
f press FI for Installitlo
n Guide J ---
團 6-1
88
選擇 Configure 進入,出現圖 6- 2
FreeBSD Conf IguifatIon Hum
: t J I laA __
yo U U e d.re.dy ind ued r 「 时 二 ㈤ s _ t0 仙 「 t _ ?p
It S o. e «h a t to suit your particular cpnfigZt^n lost |- ; Drl^t?N
,严"證 + 加 ^mtyto ip fld St ™ ;° K y " p rlaBtlyj
software nut prctgided m the base distributions.
L u(
[Kit
Bkstrlbutluns
Packages
Boat FissuaH
TdisJf
Labe]
llsetf ndiiagencnit
Console
rise Zone
㈣ U
louse ;
letuorking
Exit this neitti Crfiturnihg to pr^u i ous)
instdU dddjtionaL distribution sets
pstall 和 d software for FreeBSD
Set thtr system _anagcr‘s pdssuor^
J; e dish Slice CPC-stgJe parUtinnl Editor
The disk Label editor
Ad 在 user and group 〖nfornation
CustujiLze systen console bthdtiiar
Set tilt iLh titte zone you're in
Change the InslallattDd nedia typt
Conripre mmr nouse _
W
_ [rflSS Fl_ for ware hafprudt
:ton on t]
■hese oj Units
圈 6-2
接著選擇 Networking 進入,進入圖 6-3 :
. «M- vmjj A aciMlCS^ I
5 卿 air _y coBfiftrei one netiiari device (ana tie otter
U p r J™f fiostiMB B >gatRK,iy^na*[? server j) 4 ra«EterHl Js Lhc: vnn
of IfistdJHnfl FrecFSB This hetiu d 1 1nws 4jau to cunfirurp ntHtr
a^^ts of youf $4istcn 5 nettiark Lonf ipurat Lgit
[ hl 批 wants to run the ^utD-iioiiDter serulte
Set flags to AMD service {jf en^hiein
m thine uishes to atlou diinit^Hou^ FTP.
; J[ S ui,J rnate Packets tetttecn inlerfaccB
Tills idehine i*iTUs to run the Inet dacnon
IhJs nachliie will be dn Hfs cUent
IhJs uclilnc ulll he an firs sprver
fleet a nloch syi^Jirotii^tion semer
JJJ authenticaUan server for clients uith PC-MFS,
inis n^chlne Whitts to mu the portvidpper daenoii
<<<
Exit
l 3 (tE;rfilCRS
l J
VID
m
Mill Flags
r ]
ft El mu FTP
m
^Ateuay
IX)
Lnetit
[i
ITS client
r I
ITS seruer
m
ItpdAte
e 1
PCHrSD
t j
; Ki.rt_ap
圖 6-3
chapter 6
89
FreeBSD 入 f! 廳用 G :] r
n □
接著選第一個 Interfaces ’ 出現圖 6-4 :
圏 6-4
上圖中的 vrO 即是您的網路卡, vrO 可能會因爲網路卡的不同而有不同
的代號,如 edO 、 fxpO 等。如果有多張網路卡,還會有 edl 、 wl 、 fxpl
等^通常第-個就是網路卡,而 IpO 、 slO 及 pppO 都不是°選擇您想要設
定的網路卡後按空白鏈進入,程式會先問是否要使用 1 Pv6 ,回答否。接著
會問您是否要使用 DHCP ,視您的網路決定,如果不是動態取得 IP 的
話,擁有固定 IP 就不要使用 DHCP 。接著會出現圖 6-5 :
厂 _ _ _- Hetuork CuriF iguration ~
Host.
uuu 」 mgdo 时 iu 側 ray:d ⑽ a Jn 工 oift
IPu4 Gateuay : Name semer :
H0.11S .1.254 HO . 115.1,31
-- Configuration foi* Interface orG -—
IP 战 4 Address: Metmask:
1 HQ.115.75.1 Z5E,Z5S.O.O
Extra options to Ifconfiff :
睡 6-5
90
網路設 危
我們要先知道我們的 Domain Name 及 IP 等,如果沒有 Domain Name
的話,就隨便輸入吧^假設我們的機器 www . mydomain . c_ , Host — 攔
屮就輸入 www . my - doniain . com ,在 Domain 中就輸入 mydomain . com 。我
的機器在中央大學,所以 Gateway 就輸入140.1〗5丄254 , Name server it
入 140.115.1.31 , IPv 4 Address 就輸入我的 IP 也就是 140.115.75.2 ,
Netmask 也就是子網路就輸入 2 55.2 5 5.0.0。接著按 OK 離開就完成了,它
會問你是否用立即使甩新的網路設定,回答是就會立即更新網路設定
了,接著就可以離開程式了。
雖然 sysinstall 有問我們是否要立即使用新的網路設定,但它不一定會
立即更新設定,所以我們需要重新開機或是使用指令來將網路立刻更
新。至於如何不重開機而更換 IP 設定,我們在下面手動設定時將提及。
6.1.2 手動設定
手動設定比用 / stand / sysinstall 設定還要快且簡單。只要知道我們的網路
卡代號、 IP 、 Netmask 等資料就可以開始設定了。您可以使用指令 dmesg
I grep Ethernet 或是 ifconflg 去看網路卡代號爲何。首先,爲了在一開機即
設定,必須在 / etc / rc . conf 中依你的資料加入下列 幾行:
#Gateway
defau(trouter= ,, 140.115.1.254"
#Host » 機器的 Domain Name
hostna me=’_www. ba^ncu, edy.tw 11
# 網路卡代號是 vrO ,設定 IP 為彳 40.115.75.2 ,子網路遮罩為 255,255.0.0
ifconfig—vrO=’’inet 140.115.75,2 netmask 255. Z55.0.0"
: gjFroeBSU 入 P1 應 《!] □=
接著編輯 /etc/resolv.conf =依您的資料加入下列幾行:
# 網域 (domain >
domain ba,ncu.edu.tw
#DNS 伺服器位址
nameserver 140.115,1.31
以上資料都設定好了之後就耵以重新開機使用新的設 定了。 或者你也可
以使用下列指令來更新 IP °下面的指令中,網路卡代號爲 vtO ’ IP 是
140. 1 15.75.2 ,子網路遮罩是 255.255,255.0 。
# ifconfig vrO down
# ifconfig vrO 140.115.75.2 netmask 255,255.255,0
(^} # ifconfig vrO up
6.2 ADSL
如果家裡有多台電腦要上網,使用 FreeBSD 來做連線分享是一件很棒
的事。 ADSL 的撥號是使用 PPPoE (PPP over Ethernet) 的方式,由於撥接
式 ADSL 只有一個 IP ,因此家中其他的電腦必須使用保留 IP 再經由
FreeBSD 的 NAT (Network Address Translation) 功能來將保留 IP 轉成可以
在網際網路上出現的 IP 。
在這一部份我們將說明如何將 FreeBSD 使用 ADSL 連上網路,並擁有
NAT 功能。如果您只有 FreeBSD 要上網,你只需要使用一張網路卡,再
加上下列關於 PPPoE 的設定即可。如果你有多台電腦要經由 FreeBSD 上
網,除了 ADSL 的設定外,還要再加上 NAT 的設定。你必須準備二張網
路卡,一張連接到 ADSL Modem ,另一張連接到區域網路的 Hub 。
92
6.2 J 編譁核心
fZ\ chapter 6
如果您使用的是 FreeBSD 4.4- Release 以後的版本,您不需要修改核心
設疋就 pJ 以支援 PPPoE 了,因爲當系統要求使用 PPp 0 E 時,會以動態的
方式載入。如果使用的是 4.4 以前的版本,還是要加上關於 PPP 0 E 的設
定。昌先我們要先確定在核心中已經有加上網路卡的設定,也就是開機
時已經有抓到網路卡了 a 接著請先在 kernel 中加入下列幾行:
#PPPoE 方面 (FreeBSD 4.4-RELEASE 以後的版本不需加入下列三行)
options NETGRAPH
options NETGRAPH_PPPOE
options NETGRAPH 一 SOCKET
#NAT 方面 < 如果不使用 NAT 珂以不加 )
options IPFIREWALL
options IPDIVERT
options IPRREWALLJDEFAULT_JO_ACCEPT
接著要重新編譯核心
($) # config KERNEL
($) # cd ../../compile/KERNEL
(*^) # make depend
# make
(S) # make install
93
FreaBSDAflM^Q
6.2,2 修改 /etc/ppp/ppp.conf
這裡我們以 Hinet 的 ADSL 爲範例說明,其他家的 ADSL 設定大都差不
多。首先,將 /etc/ppp/ppp.conf 更名爲 / etc / ppp / ppp . conf.old ■
(^) # mv /etc/ppp/ppp.conf /etc/ppp/ppp.conf.o!d
再來,使用文書編輯軟體來新增並編輯 / etc / ppp / ppp.conf >加入下列的
設定,請記得要修改下列設定中的 ” set device PPPoE :-」 那一行’在那
一行設定連接到 ADSL 的網路卡代號,範例中是使用 vrO 。接著要修改
authname 及 authkey 成爲你的帳號及密碼。
# /etc/ppp/ppp.conf
default:
set log Phase Chat LCP IPCP CCP tun command
nat enable yes
nat same—ports yes
natuse_sockets yes
set redial 15 28800
set reconnect 15 28800
pppoe:
set device PPPoE:vrO:
set mm 1492
set mtu 1492
set speed sync
enable Iqr
set Iqrperiod 5
94
set cd 5
set dial
set login
set timeout 0
set authname b1xxxxxx@hinet.net
set authkey yourpassword
set ifaddr 10 皿 1/0 10.0,0,2/0 255.255.255,0 0.0.0.0
add default HISADDR
enable dns
# end of ppp configuration
完成後即可存檔離開。
chapter 6
6.2.3 修改 /etc/rc.conf
再來是修改 /etc/rc.conf ,在這裡我們^樣是以 vr 0 爲連接到 ADSL 的網
路卡代號,以 vrl 爲連接到區域網路的網路卡代號(如果沒有要使用 NAT
則可以不必設定),請記得要修改成你的網路卡代號。然後請在
/ etc / rc . conf 中加入下列幾行:
# /etc/rc.conf
#設定自動選擇連線裝置
networkinterfaces -^ auto 11
ifconfig_vr0= ,, inet 10.0.0.1 netmask 255.0.0,0 -arp up"
# —開機就執行 PPPoE (建議)
ppp — e _ le =_ YES "
#ddai 表示只要斷線便自動連線(建 議) ,或設 0Uto 表示有資料要
95
_ Fr ❹ eBSDAri 應用 =]□] 二
# 出去則自動連線,也可以設為 background 只連一次後放到背景
ppp_mode- , ddial ,T
ppp_profile= 1, pppoe"
defaultrouter=_’1 0.0.0+1 u
gateway_enable= Tr YES T,
# 以下的設定如果不使用 NAT 則可省略
ifconfig_vr1- f inet 192,168.0.1 netmask 255.255.255,0"
firewall_enable= ir YES ,r
firewall_type= h OPEN t,
natd 」 nterface="vrO"
natd—enable="YES"
#end of /etc/rc + conf
完成了上述步驟之後,就可以重新開機以啓動 PPPoE T 。如果您在
/ etc / rcxonf 中並未設定一開機就自動連線的話,可以在重開機之後使用以
下的指令來連上 internet :
(P^) # ppp -background pppoe
96
6-2.4 分享網路運線
chapter 6
如果我們要將 FreeBSD 的網路連線分享給家中其他電腦使用,除了上
述的 NAT 設定外,在其他電腦還要再做一些設定。首先,我們的網路架
構應該如圖 6-6 所示:
192 , 138,03
Fr^aRSD
m 6-6
在客戶端其他的電腦設定方面,我們必須將其他電腦的 1P 設定爲
192.168.0.X 、子網路遮罩是 255.255.255.0 , gateway 設定爲 FreeBSD 連到
區域網路的網路卡 IP ,在此範例中是 19Z168,0.1 。然後再設定 DNS 爲您
ISP 的 DNS ,以 Hinet 而言是 168.95.1.1 。
完成上述的設定後,我們就能享受以 FreeBSD 爲連線分享器快速上網
了。
97
Fr#oBSD 入 n 應用 ]□ G 二 =
6.3 Cable Modem
如果你是使用 Cable Modem 來連上網路’你只需經由 DHCP 動想取得
IP 即可。同樣的,你也可以和 ADSL 一樣將 Cable Modern 的網路連線分
享給家中其他電腦使用。分享的方式也是經由 NAT 。在這裡我們將以 vrO
爲連向 Cable Modem 的網路卡代號,而以 vrl 爲連接區域網路的網卡代
號。
6.3.1 核心設定
首先,你應該確定開機時已經有抓到網路卡了,如果沒有請重新編譯核
心。而且爲了使用 DHCP ,原本核心設定中的 " pseudo-device bpf 不可以
刪除喔。如果要將網路分享給家中其他電腦使用,必須在核心中加入下
列設定:
#NAT 方面 ( 如果不使用 NAT 可以不加)
options IPRREWALL
options 1PDIVERT
options IPRREWALL—DEFAULT-TO 一 ACCEPT
接著要重新編譯 核心:
(^) # config KERNEL
(^) #cd ../ 」 compile/KERNEL
# make depend
# make
# make install
98
chapter 6
網路設定
接著要檢查一下 /dev 中是否有 bpf* 的檔案,如果沒有,請執行下列指
令以建立:
#cd /dev
® # ./MAKEDEV bpfO bpfl bpf2 bpf3
6-3.2 設定 /etc/rc.conf
首先’將網路卡和 Cable Modem 連接好,假設網路卡代號是 vr 0 。我們
先執行 T 列指令來連接到 internet :
# dhclient vrO
接著打 ifconfig vrO ,你應該可以看到下列畫面
vrO: flags=8843 mtu 1500
inet6 fsSO i '250; bBffrfoOOidcdd%vrO prefixlen 64 scopeid 0x1
inef 61.58.76.14 netmask OxffffffOO broadcast 61.58,76.255
上面畫面中的 61.58.76.14 是我們動態取得的 Ip ,如果有出現 IP 就表示
正常了。然後試一下可不可以 ping 到杯面的網路:
® # ping 216,136.204,21
都沒問題後就可以開始編輯 / etc / rc.conf 了,請在 rc . conf 中加入下列設
定:
99
# Cable Modem 的設定
ifconfig_vrO =,, DHCP ,r
l^Fre ❹ BSD 入門應 ] □二二
#以下的設定如果不使用 NAT 則可省略
ifconfig_vr1- H inet 192.168.0.1 netmask 255.255,255.0 n
gateway 一 enable^YES 1 ’
firewall_enable= ,, YES 11
firewalLtype^OPEIT
natdJnterface=’VrO_.
natd^enable^'YES"
完成上面的步驟就可以重新開機使用 Cable Modem 卜 Ji 了
6.3.3 運線分享
如果你要將 FreeBSD 的網路連線分享給家中其他電腦使用’除了上述
的 NAT 設定外,在其他電腦還要再做一些設定。首先,你的網路架構應
該如圖 6-7 所示:
192 168 0 3
FreeBSD
接著,在其他的電腦設定方面,我們必須將其他電腦的 [ P 設定爲
192 J68AX 、子網路遮罩是 235.255.255.0 , gateway 設定爲 FreeBSD 連到
100
^7\^ h ^Pter6
mmmm ~
區___卡 IP , 龇_帽 192.168.0.1 0 縫醜定 DNS 爲你
ISP 的 DNS 。 "心
完成上 述的設 定後’就能享受以 FreeBSD 爲連線分享器使用 Cable
modem 快速上網了。
6.4 Modem 撥接
如果你是使用 modem 撥接上網的話,你同樣可以在 FreeBSD 中設定。
只要是用需要謙_線方式, ㈣ 醜 ppp 來連接。 酣就 算使用
modem 撥接一樣可以分享給區域網路中其他電腦使用。
641 編輯 /etc/ppp/ppp_ con f
這裡我們以 Hi _ 爲例加以說明。首先,先將原本的解 conf 更名爲
ppp . conf . old ,再編輯 / etc / ppp / ppp . conf ,如下:
default:
set _ phase chat connect LCP IPCP CCP tun command
#設定使用哪—個 com , 聊 1 是 ouaao 、 com 2 是 cuaa1
set device /dev/cuaal
set speed 115200
deny Iqr
set dial _,ABORT BUSY ABORT NOWsCARRfER TIMEOUT 5 VY \
101
FreeBSD 入 應 W] ill
AT OK-AT-OK ATE1Q0 OKWdATDTWT TIMEOUT 40 CONNECT 11
hinet;
set openmode active
#1 § 定撥接的號碼
set phone 4125678
# 設定共撥 3 次 , 每次隔 5 秒
set redial 5 3
#設定閒置幾秒就自動斷線 , 0表示不會自動斷線
set timeout 1200
#設定可以使用 PPP 的系統使用者帳號
allow users xxx
deny chap
disable chap
accept pap
#Hioet 的撥接帳號 xxxx
set authname xxxx
#Hinet 的撥接密碼 xxxx
set authKey xxxx
set ifaddr 10.1.1.1/0 10.2,2.2/0
設定完後存檔離開進入下一個 步驟。
102
6_4.2 編輯 /etc/p 叩 Jink 叩
接者編輯 / etc / ppp . linkup 如下:
chapter 6
丽晒 f
defete ALL
add 0 0 HISADDR
存檔離開,現在可以使用指令 ppphinet 來撥接了。
6-4.3 網路分享
如果你希望將 modem 的連線分享給其他區網中的電腦使用,您必須要
有- 張網路 卡連到區域網路中。並設定其 IP 爲 192.168.0.1 -子網路遮罩
爲 255.255.255.0 °在區網中的其他電腦要將 gateway 設定爲 192.168+0.1 ,
IP 就設定爲 192.168.0.2 ,子網路遮罩爲 255.255.255.0 。 接著使用指令來撥
號,就可以了 :
( 全 9 # ppp -nat hinet
6_5網路相關指令
這裡我們將介紹一些常用到的網路相闢指令,如果你想知道更多、更詳
細的彳曰令’ a 青參考指令應用篇’或使用指令仍⑽來查詢相關使用方法。
在 it 裡我們的目的只是告訴你有這些工具可以使用,並未針對每一個指
103
FreeBSD 入門應 坩 G ;」
令作詳細的使用方法說明,你應該使用 man 來查詢該指令更完整的參
數。我只列出較常用的幾個方法°
6-5.1 telnet
大家都知道這個指令吧!如果你要連線到別台 UNIX 主機或是連到
BBS ,就使用 telnet 這個指令。例如,要 telnet 到 sparc20.cc.nciLedu.tw 這
台機器:
$ telnet sparc20.cc,ncu.edu.tw
如果你在登入時想離開,可以按 CTRL +] 回到自己的主機,再打 quit 離
開 telnet ° 如果你在 telnet 時想輸入中文的話’必須加入參數 -8 :
(^) $ telnet -8 bbs.ba.mgt.ncu.edu.tw
6.5.2 ftp
FreeBSD 中也有提供命令列的 ftp 工具’如果你要連到
freebsd . csie , nctu . edu,tw IS 台機器的§舌 :
$ ftp freebsd,csie.ncu.edu.tw
允許暱登入的 ftp 主機’帳號只要輸入 anonymous 即可’密碼可以隨便
輸人,或者在 ftp 指令之後加上參數 - a 即耵。進入 ftp 站台後,你可以使
用下列指令:
104
chapter6
網福瘡〜
!
列出所有指令。
Is
查看所在目錄的檔案
,使用万沄和茌 FreeBSD 機器癀。
cd
适八杲一個目録,如 cd pub 。
get <fifename>
取回某一個檔案,如 Qe t ve-l.ninyo
reget <fitename>
薄某一檔案。
put <fifename>
上 傳擋案,如 put homeworkOI .zb °
send <filename>
上傳檔案 ,和 put — j
竈。
size <filename>
查看檔案 大小。
^ ^—^——
less 〈 filename 〉
觀 看文字擋内容
"" -- - - - --
6.5.3 ping
送出 ICMP 封包’用以査看網路上主機的連線狀況。
@ $ ping 216,136.204.21
你也可以加入以下的 參數:
-c count 只計算 count 次。
- s size 不使用預設的64 bytes 當作封包大小,而改用新的 size 。
® $ Ping -c 10 -s 108 216.136,204.21
Fr«0BSD 入 《靡《 □ □ □ □ H
6,5,4 nslookup
查詢網路主機資訊。此指令可以用來查詢網路主機的 Domain name ’或
以 Domain name 反查 IP 位址°
$ nslookup 216.136.204.21
(^) $ nslookup www.freebsd.org
63-5 netstat
顯示網路狀況。可以用來看網路的組態及各項服務的情形。
參數 =
-a 顯示所有資訊
-n 以 number 方式顯示 IP 位址
-i 顯示網路介面
(^) $ netstat -a
(^) $ netstat -ni
6.5.6 traceroute
追蹤網路路徑,用這個指令,你可以知道從你的主機到某一台主機的過
程中經過了哪些機器。
使用方法 : traceroute www . freebsd.org
106
6.5.7 sockstat
chapter 6
查看主機 internet 或 domain socket ^ 你可以用來查詢有誰連到你的機器
中,由哪一個網路服務接收,該網路服務的 nD 是多少等。還可以查詢
本 機開放了哪些 port 、提供了哪些服務。
6.5.8 ifconfig
的資訊。
參數:
-a
詳細顯示所有介面
-y
顯示目前使用中的裝置
interface
顯該 interface 的資訊,此 int!
down
停用某一裝疆
up
啓用某一裝龎
ifconfig -a
顯示所有介面的資訊
ifconfig vrO
顯示網路卡 vrO 的資訊
ifconfig vrO down 停用網路卡 vcO
ifconfig vrO
192 ■ 1 68.0.1 netmask 255.255 2
ifconfig vrO
up 啓用網路卡 vrO
為你的網路卡代號或其他代號。
255.0 設定網路卡 vrO 的 ip
707
g^Fr««BSD 入 n 應用 ] □ J
6.5.9 tcpdump
列出所有到達本機的 tcp 封包°
6.5.10 lynx
文字瀏覽器。這並不是 FreeBSD 內定的指令’所以必須先使用 port 安裝:
(^) # cd /usr/ports/www/lynx
(^) # make install dean
安裝完就可以使用 lynx 来上網瀏覽網頁
$ lynx www.freebsd.org
我們也可以使用 lynx 來下載網頁上的檔案^例如,我們要檔案位置是
http :// www . apache . org / dist / httpd/apache 一 1.3,22. zip ’ 可以使用 F 列指令來卜
載它,並存成 apache . zip 這個檔名:
(^) $ lynx -dump mtp://www.apachB.org/dist/httpd/apach8j -3.22.zip > apache.zip
108
l^^"」FraeBSD 入忾應用口 □□□:_][」 _ ""
/etc 是 FreeBSD 系統主要設定檔所在,了解這個目錄下的檔案及其格
式,對於我們管理及使用 FreeBSD 將有更深入的認識°因此,以下我們
就分別說明一下這些檔案。
7.1 aliases
用以告知 sendmail 要將信轉給哪個使用者或是交由哪個程式處理 。請
注意,修改完這個檔案後,必須使用指令 newaliases 來讓所做的修改在
sendmail 中發生作用。這個檔案是用來設定郵件的別名,也就是可以設定
要將某人的信件轉給其他地方(人員或程式 ) °你也可以將某人的信轉給很
多人,這個檔案的位置是由 sendmaiLcf 檔案中的 AliasFile 這個選項所決
定的。當 sendmail 收到信時,會一行行比對,當第一行符合後,就不會
再繼續下去,所以應注意優先順序°
語法:開頭的代表該行是註解’大小寫都視爲一樣
1 . root : alex
2.webmanager: aiexjackjim@other.hostname.com
3,nobody:
/dev/null
4.homework:
|/usr/local/bin/homework.sii
5 .old user:
: include: /usr/local/oldyserjist
| g 範例 1
是將寄給 root 的信轉給本機中的使用者 alex °
驪範例 2
是將寄給 webmanager 的信轉給本地的使用者 alexjack 及
別地的 jim@other.hostname.com 。
圃範例 3
是將寄給 nobody 的信直接丟掉’丟入 /dev/null 這個無底
深淵。
110
chapter 7
/etcmmrmwmfm
驪 範例 4 是將寄給 homework 的信交給 /usr/local/bin/homework.sh
這支程式處理。
驪 攀 S 例 5 是將寄給 old user 的信轉給檔案 /usr/local/olduser list 中所
列出的所有使用者。 olduserjist 為使用者清單的文字擋。
當設定了一堆複雜的別名之後,我們要看最後信會寄到哪裡時,可以使
用下面指令來看寄給 username 的信最後寄給誰:
($) # sendmail -bv username
aliases 擋中將很多東西都轉向 root ,因此你可以去讀 root 的信箱或是將
root 的信轉給別的地方,下 面這一 行是將 root fi 勺信都轉給 my @ my.doraam :
root : me@my.domain
當郵件無法送出被退回時給使用者時,都是以 MAILER-DEAMON 爲
帳號寄出。因爲使用者可能會回覆那封被退回的信,所以這個別名是必
備的。而 postmaster 則負責處理所有關於郵件問題的信件,因此也是必備
的,一定要保留下面二行,這是必要的系統基本 設定:
MAILER-DAEMON: postmaster
postmaster: root
111
, ro«BSD 入 H 謹用 ] 匚
7.2 crontab
讓系統管理者設定定期執行的工作 ° 你也可以用 root 執行 crontab - e 來
取代這個檔。
# 設定使用的 shell , 路徑
SHELL=/bin/sh
PATH=/etc:/bin : /sbin:/usr/bin : /usr/sbin
HOME=/var/log
#
#分 小時 天 月
#minute hour mday month
#
*/5 *
星期幾
身份
wday
who
command
*
root
/usr/libexec/atrun
_ minute : 代表一小時内的第幾分,範圍 0-59
hour : 代表 _ 天中的第幾小時,範圍 0-23
^ mday : 代表一個月中的第幾天 * 範圍 1-31
H month = 代表一年中第幾個月,範圖 1-12
H wday : 代表星期幾,範圍 0-7 (0 及 7 都是星期天)
_ who :要使用什麼身份執行該指令
command -所要執行的指令
小時的欄位中如果是*,表示每小時,天的欄位中如果是 * ,表示每
天,依此類推。欄位中也耵以使用^來表示範圍’例如,在小時的欄位
112
0
chapter 7
中塡 m ,表示執行的時間是 8, 9 , iaii ,共四次。
欄位中也可以用逗點來表示,以分的攔位而言, mg 表示將在
1, 2 ,5, 9 分時各執行一次。我們也可以寫成像這樣1_2, 12 ^14 ^表示在
1 , 2,12,13,14 分各執行一次 &
=另外,也可以用/後面加數字表示每幾分鐘要執行一次。如在分的襴位
塡0-23/ 2 ,表示分之間,每隔二分鐘執行一次,也就是
0,2,4^8,10,12,14,16.18,20,22 0 如果在分的攔位是切,表示每五分鐘—
次。
除此之外,也可以用一個開頭爲@的字串來表示各種意義:
字串
代表意義
1-
◎reboot
開機時跑一次 u
©yearly
每年跑一次,等於 "00 ] 1
* ,r o
©annualfv
和 @year[y —樣。
-- -
©monthly
每月跑一次,等於 -'0 0 M ;
O
©weekly
每週跑一次,等於 'DO
卜
©daily
每天跑一次識 V0 …
pc
©midnight
和 ©daily 一樣。
" 5 — ' —
©hourly
每小時跑一次I等於 |( 0 * ^
^ *" O
我女排 crontab 時’ 應該要 錯開每個程式的執行時間,才不會有一
大堆程式同時執行,造成系統負荷過高。
113
入 P 1 應用 □ □ □ □.] -
13 csh.cshrc
這是 SheH csh 、 tcsh 用的內定 , c: S hrc 檔案,也就是進入該 Shdl 時會載
入的設定。
#檔案權限設定
umask 022
# 設定内定使用的文字編輯器為 ee
setsnv EDITOR ee
# 設定當使用者打 Is 時,出來的結果是 Is -F 的結果
alias Is Is -F
# 設定當使用者打 ccL 時,變成是打 ccU
alias cd.,"cd
# 設定命令提示符號為 n 主機名稱 [ 所在目録 ]- 使用者名稱 -V
set prompt = ” % B%m [%/] -%n-> n
114
chapter?
7.4 csh.logiri
這是 Shell csh 、 tcsh 用的內定 . login 檔案,也就是進入該 Shell 時會載
入的設定。
# 要讀取系統訊息則將下面 一行的 #拿掉
# msgs -f
林 允許終端機訊息,設為 y 才可以使用 write 的指令,傳送訊息給其他使用者
# mesg y
#設定支援中文的終端機
setenv ENABLE_STARTUP_LOCALE zh_TW.Big5
setenv LC_CTYPE is_ISJSO_8859-1
setenv LANG zh_TW.Big5
# 登入時顯示 FreeBSD Tip
[-x /usr/games/fortune ] && /usr/games/fortune fraebsd-tips
7.5 csh.logout
這是 Shell csh 、 tcsh 用的內定 Jogin 檔案,也就是離開該 Shell 時會載
入的設定。在離開 Shell 時, Shell 會載入 / etc / cslLlogout 及 -/. logout 的設
定 0 請 man csh °
115
0 - Fre®BS0 入門應 ffl ] 匚—
7,6 defaults/makexonf
內定的 makexonf 檔案,我們一般不要直接修改 / etc / defaults / make.conf ,如果
你要設定,請將 / etc / defaults / make.conf 複製一份到 / etc / make,conf ’ 並修改
/ etc / make^nf 來加入你的 設定。 這樣一來,日後升級時,我們的設定才不會
被覆蓋掉°如果 / etc / defaults / m ^ e*conf 中的設定和 / etc / make.conf 重覆時’會以
/ etc / make.conf 爲主 0
如果這個檔案存在的話,會被指令 make 所讀取。它可以讓你在 make
時覆蓋一些設定而不必去修改 source tree 。 make.conf 檔案一定要使用有
效的 Makefile 語法。一般而言,我們會修改一些關於下載擋案的 FTP 站
台設定,以從 port 安裝軟體 而言, 當下達 make install 指令時’ make 會去
抓一些必要的檔案,如果要去國外抓的話實在太慢了,所以我們會將
FTP 站台設定爲離我最近或最快的站台。讓我們直接看
MASTER — SITE_BACKUP 的部份:
#當使用 port 安裝軟體時,優先使用中央大學資工系及交大資工的 FTP
MASTER_SITE_BACKUP?= \
ftp://freebsd.csie.ncu.edu,iw/distfiles/${DIST_SUBDIR}A
ftp :〃 freebsd csie.nctu.edu _tw/pub/distfiles/${D 1ST—SUBDIR}/
IVIASTER_SITEJOVERRIDE?= ASTER 一 SITE—BACKUP}
# 使用的 X window 版本是 4 《預 設是 3,3.6)
XFREE86 VERSI0N=4
11 defaults/rc.conf
這是內定的 rcronf 檔案,如果要修改,請新增 / etc/raconf 來加入你的設定’
這樣在日後升級時我們的設定才不會覆蓋。如果 / etc / defau ! ts / rc.conf 中的設定
]}6
chapter 7
/etc 目錄下
和 /etc/rcxoirf 重覆時,會以 /eto te. CO nf 爲主。另外,當我們執行 / st and / Sy — lall
鋪做的設定,也會放在驗 .c 0 nf 0
7,8fbtab
大多數的人都是使用虛擬的終端機彳我們登入系統時所使用的 tty 是虛
擬的終端機 ttyvO 、 ttyvl 等。 FreeBSD 將系統裝置視爲檔案,放在 /dev/ ,
而 console 就是 / dev / console 這個檔,但該檔的擁有者是 root 。有的應用
程式用要求使用 / dev / console 的存取權限, fbtab 這個檔案是用來定義當你
從虛擬的終端機登入時,能自動取得某個裝置的權限^詳細說明請 man
fbtab 0
7.9fstab
這個檔案用來定義開機時要掛入的檔案分割區。
#裝置名稱
/dev/adOs lb
/dev/adOsla
/dev/ad 1 si f
/dev/adOs 1e
/dev/adlsle
/dev/acdOc
proc
掛入點
none
/
/home
/usr
/var
/cdrom
/proc
擋案系統
swap
ufs
yfs
ufsrw
ufs
cd9660
proofs
參數
sw
m,noautoO
Dump
0
1
2
2
2
0
0
Pass#
0
1
2
2
2
117
: ^Fsr®®BSD 入 H 镰用 □ □□匚 C :
_裝置名稱是要掛入的來源 , 最常用的是 /dev/ 的檔案,我們說過 FreeBSD 將裝置
視為檔案,所以這裡填的是 /dev/* 。裝置也可以是 NFS 或是其他的虛擬裝置,如
procjinpro 等 3
^掛入點就是你要將來源掛到什麼地方,其中 swap 沒有掛入點,所以是 none 。
H 檔案系統就是要掛入的類型,必須在 kernel 中有定義。一般 FceeBSD 的檔案是
ufs ,硬碟要掛入的設定就是 ufe 。如果是 cdrom 就是 cd9660 。
ufs
本地的 UNIX 擋案系統。 —
mfs
本地的 memory-based UNIX 檔案系統 °
nfs
和 Sun Microsystems 相容的 "Network File System °
swap
用來作 swapping 的擋案系統。 -
msdos
DOS 相容的檔案系統。
cd 9660
CD - ROM 的檔案系統。
procfs
用來存取執行程 S ( process ) 的檔案系統 & 一
kernfs
用來存取核心參數 (kernel parameter ! 的檔案系統。 -
^參數依各裝置而有所不同,如果開機時不掛入的話(如 cdrom ) ,就必須加入參數
noauto defaults 設定為 rw ' ㈣ 、 exec 、_、 nouser 、 async 。可用的參數如
下,加上 no 則為相反,如 nouser 、 noauto :
---
rw
可讀可寫
ro
只可讀不可寫 &
async
所有資料以非同步方式完成°
atime
每次存取動汗都更新檔案時間。
auto
能被 mount -a 自動褂 A 系統°
dev
解譯檔案系統特性與儲存裝置規格 &
exec
允許檔案系統中的一進位元檔被執行°
user
允許一般 user 掛入。
sync
所有資料以同步方式完成°
118
chapter 7
VetcmmTmMmnm
sw
swap
noauto
開機時不掛入。
userquota
使用者磁碟配額限制(須 kernel 支援 quota ) 。
groupquoto
群組磁碟配額限制(須 kernel quota ) 。 ^ ^
^ dum P 表示使用指令 dump 時要備份的檔案系統,0表示不要^表示要。
_ pass 這個 瀾位是 給栺令 fsck 用的,是檢查的順序。/的數字應該是1而其他的檔案
系統為2。不需檢查的就是 0( 如 cdrom,swap 等)。
7.10ftpusers
這個檔案用來定義哪些使用者不可以使用 ftp 登入,只要將使用者登入
的帳號加入這個檔案中,該使用者就不能使用 ftp 登入系統了。例如,我
們要讓使用者 tom 無法使用 ftp 來登入系統,只要在 fupusers 檔案開頭加
入該使用者名稱:
#$FreeBSD: src/etc/ftpusers,v 1 .6 1999/08j
#
# list of users disallowed any ftp access.
# read by ftpd(B).
tom
root
toor
daemon
operator
bin
119
C"gyFro«BSD 入 P1 廳用 □—二
tty
kmem
games
news
man
bind
uucp
pop
nobody
7.11 gettytab
終端機模式設定檔。例如登入前的提示訊息設定等。我們直接來看
default 的部份 :
# im - 就是別人連上你的機器時會看到的字串,其中 Wn 表示換行
# 其中的 %3 %m %h %t 分別對應到 FreeBSD 〖386 alexwang.com
# ttypO ,
# 如果你不想顯示 FreeBSD , 就把 % s 拿掉。最後一行 if=/etc/issue
# 就是表如果沒有 issue 這個檔 的話, 就執行 default 。
defaults
: cb:ce:ck:lc:fd#1000:im=Vr\n%s/%m (%h) {%t)\An\r\n:sp#1200i\
: if=/etc/issue:
120
chapter 7
/etc 目錄下的搶案介組
7.12 group
設定使用者群組。在 FreeBSD 中,如果使用者要具有 su 成 root 的權
限’必須將該使用者加入 wheel 群組中。我們要注意的是每一個群組的編
號 ( gid ) 不可以重覆。請參考第五章「使用者管理」
7.13 hostxonf
這個檔案用以設定 DNS 査詢的順序。內定是先査詢 hosts 這個檔,再
由 bind 向 DNS Server 査詢。如果有 NIS 的話,還要再加入 nis 那一行。
# $FreeBSD; src/etc/host.con^v 1.6 1999/Q8/27 23:23:41 peter Exp $
# First try the /etc/hosts file
hosts
# Now try ttie nameserver next,
bind
# If you have YP/NIS configured, uncomment the next line
#nis
7.14 hosts
定義常用機器的 hostname SIP , 以節省向 DNS Server 査詢的時間 。 如
果你的主機有多個 domain name ,將你最喜歡的放在最前面,這樣寄信時
才會出現該 domain name °檔案中最好最少要有 localhost 和自己的
domain name 0
121
—_:FiwBSD 入 « 應用 □ □ □ □ I
127,0,0,1
192.168.0.1
192,168.0,1
192.168.0.2
140.115.83.240
140.115.75.5
localhostcom localhost
mydomain-com mydomain
mydomain.com.
malLmydornain.com mail
bbs.mgt.ncu.edu.tw bbs.mgt
bbs.ba.mgt.ncu.edu.lw bbs
7.15 hosts.allow
設定允許或拒絕使用本機服務、連線的主機。例如你可以在這裡加入拒
絕某台電腦使用 tdnet 連線到你的機器。我們將在第十七章「系統安全篇」
中會詳細的說明如何使用這個檔案來讓我們的主機更安全。
7_16hosts_equiv
設定遠端信任主機及使用者,詳細說明請 man hosts.equiv ^
7.17 hosts.Ipd
可以使用本地列表機的主機,只要加入主機名稱或 ip 即可。
122
chapter 7
Tetc 目錄下 的撞_7^
7.18 inetd.conf
設定 inetd 所要提供的服務,要和 / etc/services 搭配設定。如果要開放某
一項服務,只要將開頭的#符號移除即可。當修改這個檔後,必須重跑
inetd 才會生效
($> kill -1 'cat /var/run/inetd.pid v
7.T9 localtime
追個檔記載你所在的時區資料,你可以經由 / stand/sysinstall 來設定時
區。該程式會自動將 / usr / share/zoneinfo 中合適的檔案複製一份成爲 local ¬
time °
7.20 locate.rc
用來設定 local database 的設定 。詳 細的說明請 man updatedb 、 man
locate 0
7.21 login-access
用來設定登入系統使用者的權限,我們可以在這裡設定是否允許使用者
從 console 登入、從不同區域登入的權限等。
123
0 FroaBSD 入 P1 應用] □ ] 一
當某個使用者登入後,會先依本檔中的設定來控制使用者的登入來源。
這裡所使用的規則是由上往下比對,先符合者優先,也就是 first match
wins ^來決定該使用者可以登入或是被拒絕。它的格式是以 V 1 分割成三
個攔位 :
(^) permission : users : origins
_ 第一個髑位應該 是% ” (可以 登入) 或 ( 拒絶 登入) 的其中之 一 。 f
|g 第二個欄位是一個或多個登入的名稱、群組名稱或是 ALL ( 永遠符合)。
H 第三個欄位是一個或多個 tty 的名稱清單 ( 非網路登入用)、主機 名稱、 所屬網域(開
頭是 的)、主機位址、網際網路編號 ( 結尾是的)、或是本地的機器(任何沒有
包含 w 的字串)。如果你有跑 NIS * 你可以使用 @netgroupname 在主機或是使用
者的格式中。
我們也可以使用 EXCEPT 的運算符號寫出非常簡潔的規則。群組的設
定只有在使用者名稱不符合規則時才會被用到,而且這個程式並不會去
査使用者主要的群組是什麼。
7.22 loginxonf
這個檔案用來控制不同帳號可以使用的系統資源,它會依照使用者在密
碼檔中的 login class 來尋找相對應的 class 設定,如果沒有分類則使用
default 的預設値 42 修改完該檔後 1 請記得要執行 cap_mkdb / etc / login.conf
重建系統寶料庫。
124
chapter 7
^%/7etc@mTg|MW^
7.23 mail.rc
用來設定 mail 的參數。當 mail 指令執行時,它會先讀
/usr/share/misc/mail.rc " /usr/local/etc/mail.rc 及 /etc/mail.rc ^ 最後再讀使用
者的〜 /maiirc 這個檔。請 man mail ,您不必動到這個檔。
7_24 manpath.config
設定 man 指令的參數,如 man 的文件所在等。
7.25 master.passwd
FreeBSD 使用 shadow password 的方式來保護密 碼檔, 只有 root 才可以
讀耳 5( 編碼後的密碼檔 / etc / master.passwd 9 而一般使用者只能看到 passwd
檔中的資料。但是這並不是系統用來驗証的檔案,爲了加快速度,
FreeBSD 將該檔做成資料庫 / etc / spwd.db 及 / etc / pwd.db ,因此在修改完
mastenpasswd 後,必須使用指令 pwd_mkdh 來將 master.passwd 做成資料
庫檔案不過一般而 g ’我會使用 vipw 這個指令來修改 master.passwd ,
vipw 會先將 master.passwd 以預設的文書編輯軟體打開,修改完存檔後,
它會視需要自動更新資料庫。
它的格式是: name:password:UID:Gro : class:change:expii'e:fuIliiame:home:sheIl
_ name - 使用者帳號名稱,最多司以使用 8 個字元,不马重覆。
M password : 可以是空的,代表不用密碼就可以登入,這樣很危險;也可以是 * ,表
示不苟以登入 :上面 vipw 顯示出來的項目中,以使用者 root 而言,他的密碼是使
125
gjFr®©BSDAH 應用 =1 □□口
用 MD5 編碼過的,特徵是開頭為 $1 且看起束比較長;而使用者 tom 的密碼是使
用 DES 編碼過的, DES 會將密碼編成一串 13 個字元的符號。
H LMD :使用者代號,每個使用者都不 一樣, 不可重覆,如果有多個帳號使用同樣的
UID , FreeBSD 會將它當成同一個帳號。編號從 0 到 65535。
_ G 旧:群組代號,編號從 0 到 65535 。
|g class :除了群組外, dass 是更有彈性的控制方法,可以針對 /etc/
login.conf 中不同的使用者設定來調整每個使用者的芎使用的資源設定。
H change :強迫使用者變更密碼的時間,以從 1970 年到所要變更 B 期所經過的秒數
來表示。你可以使用 date +%s 來求出從 1970 年到現茌時間所經過的秒數,每天為
86400 秒,以現在時 間的秒 數加上 86400* 天數即為你要設定的時間。你可以使用指
令 expr 'date +%s + 86400 \* 30
來取得 30 天後的秒數,再將其填入即可。若設為 0 則表示不使用此功能。
_ expire :帳號的有效曰期,一樣是以從1970年剖剖期曰所經過的秒數
來代表。若設為0則表示不使用此功能。
fullname ^使用者全名,你可以在此鍵八真霣姓名。
|g home =使用者的家目録,即使用者登入後的所在目錄。
_ shell : 使用者的 shell " 如果使用 /sbin/nologin 表示該名使用者不可
以登入。
7.26 motd
系統登入後,會自動秀出一段文字,稱爲 Message Of The Day ( motd ) 。
這一段文字是可以修改的,你可以編輯 / etc / motd 來製作自己的晝面。如
126
chapter 7
7etcmmT&§Wmm
果您不希望 motd 內容出現 FreeBSD 的版本資訊,您可以在 rc . conf 中加
入下面內容:
(^) update _ motd = T , YES M
如此一來,下次您更新 mold 的內容時,系統就不會自動將版本寶訊加
入 niotd 中。
7,27 namedb/
如果你有架 Name Server 的話,你必須設定該目錄下的檔案。詳細說明
請參考第+二章 DNS 伺服器的說明。
7.28 netstart
這個檔案並不會被其他程式所使用,它只是讓你在單人模式下執行,用
以啓動網路。而多人模式的網路設定在於 / etc / rc*network °
7.29 networks
用來設定本地網路的寶訊。
12
y FreeBSD 入 門 瞻用 ] □] —
7.30 newsyslog-conf
這個擋用來定期檢查 / var / log / 的檔案,設定當 log 到一定大小或是定期
的將舊的檔案壓縮備份,並刪除太老舊的檔案。
語法 : logfilename [ owner : group ! mode count size when [ ZB ] [/ pid _ file ]
[ sig — num ]
logfilename
log 檔名稱
[owner :group]
log 檔擁有人:群組
mode
該 log 檔的權限(檔案屬性)
count
最 多計算到多少,例如 aon 是 3 表示將有四個壓縮檔: cron.agz,
cronJ ,gz, cron,2,gz, cron,3.gz °
size
檔案最大到多少即壓縮備份,以 KB 計
when
什麼時候做備份,請 man newsyslog 來看詳細說明。以 ® 為首代表
用 ISO 8601 結構的時閩格式^以$為苜代表使用每天、每週、每月。
一些例子=
$D0 每天半夜十二點
$D23 每天 23:00 時
$W0D23 每週日 23:00
$W5D 16 每週五 16:00
$MLD0 每月最後一天半夜十二點
$M5D6 每冃第五天6:00
岡
1 表示要將該檔以 gzip 壓縮 起夾 , B 表示該擋是 binary 檔。
[/pid.file]
pid 檔的絶對路徑,如果有設定,則會送出 sig num 給該 程式。
[sig_num]
要送給該 daemon 程的 signal number ,預設是 SIGHUP 。
128
7.31 passwd
chapter 7
FreeBSD 使用 shadow password 的方式來保護密碼檔,只有 root 才可以讀取編
碼後的密碼檔 / etc / master.passwd f 而一般使用者只能看到 passwd 檔中的資料。但
是這並不是系統用來驗証的檔案,爲了加快速度, FreeBSD 將該檔做成資料庫
/ etc / spwd.db 及 / etc / pwd.db ’因此在修改完 mastenpasswd 後,必須使用指令
pwd_rakdb 來將 tnaster.passwd 做成資料庫檔案。不過一般而言,我會使用 vipw
這個指令來修改 mastenpasswd , vipw 會先將 mastenpasswd 以預設的文書編輯軟體
打開,修改完存檔後’它會視需要自動更新資料庫。你不需要改 passwd 的內容,
只要改 master.passwd 即可。詳細說明請參考 mastenpasswd 的說明 。
7.32 pccard^ether
用以啓動或停用 PCCARD 網路設備的執行檔。
7.33 periodic/daily
設定每天要執行一次的程式。該 H 錄下放的是 shell script ,如果你想
自行增加的話,只需在該目錄下編輯新的 shell script 並將權限設爲可執行
即耵’或者編輯 / etc / daily.loc jl ,加入想要執行的指令。在
/ etc / defaults / periodic . coof 中定義了定期執行的設定, 以下即 爲即爲每個檔
案所執行的動作:
129
FreeBSD 入門廳用 □□ □
I ~ ]
檔案
動汗
預設執行
100*cSean-disks
清理磁碟,要清除的檔案頻型可以在
peiiodic.conf 中 設定。
否
1 lO.clean-tmps
清除 /tmp
否
1 2 O.c!ean-preserv 0
刪除 /var/preserve 中它舊的 檔案。
是
130,clean-msgs
清除舊的系統訊息。
XE
140+clean-rwho
清除 /var/rwho 中的舊資料 °
是
1 SO.clean-hoststat
清除 /var/spool/.hoststat
是
200.backup-passwd>
備份 /etc/masler.passwd S /etc/group
並比對是否有更動。
是
210,backup-aliases
備份 /etc/mail/aliases
白
疋
220,backup-distfile
備份 /etc/Distfile
白.
疋
SOO.calendar
執行 calendar -a
否
310.accounting
移轉 /var/account/ 的檔案
是
320.distfile
執行 rdist
是
330. news
執行 /etc/news,expire
白
340.uucp
執行 /etc/uuclean .daily
是
400 f status~disks
執行 df 及 dump -W
是
410.staius-uucp
執行 uustat -a
是
420.status-network0
執行 netstat -i
是
430,status-rwho
執行 uptime
曰
JB
440,status-mailq
執行 mailq
是
450,status-security
執行 /etc/security
是
460.status-mail-rejects
統計 /var/log/maillog 中記録拒絶的信件 數置。
是
470.status-named
統計 DNS 拒絶記錄。
是
500.queuerun
手動執行 mail queue
是
999Jocal
執行 /etc/dailyJocal 中使用者自行定義的 指令。
130
chapter 7
/etc 目録卞丽撞蘖开癖
7.34 periodic/weekly
設定每週要執行-,次的程式。該目錄下放的是 shell script ,如果你想自
行增加的話,只需在該目錄下編輯新的 shell script 並將權限設爲可執行即
可。在 / etc / defaults/periodicxonf 中定義了定期執行的設定,以下爲每週
會執行的 工作:
動 fP
預設執行
1 20.dean kvmdb
清除過期的 /var/db/kvmj.db
是
300.uucp
執行 /usr/libexec/uucp/clean.weekly
是
SlOJocate
執行 /usr/libexec/locate+updatedb
是
320.whatis
執行 /usr/libexec/makewhatisJocal
^=1
330.cafman
執行 /usr/libexec/catman .local
否
340,noid
找出沒有擁有人或群組檔案。
否
400*stafus pkg
使用 pkg version(1) i
龙出老舊的 package
否
999Jocal
■7 其 tY 土 /etc/weeWy
「.bed 中使用者自行定義的指令
7.35 periodic/monthly
設定每月要執行一次的程式。該目錄下放的是 shell script ,如果你想自
行增加的話,只需在該目錄下編輯新的 shdl script 並將權限設爲可執行即
可。在 / etc / defauits/periodicxonf 中定義了定期執行的設定,以下爲每月
爲執行的檔案:
檔案
動作
預設執行
20(1 accounting
執行 ac 指令, 統計使用者登入時間
是
99?Jocal
執行其他 /etc/monfhlyJocal 使用者自行定義的指令
131
FreeBSD 入 flil 用]□□二 1
7.36 phones
用來設定遠端主機電話的資料庫,以供指令 tip 使用,詳情請 man tip 。
7.37 ppp/
設定 ppp 及 pppd 的設定檔。請參考第六章網路設定中的 ADSL 及
modem 的設定 0
7.38 printcap
這個檔案定義了列表機的設定,我沒有使用 FreeBSD 列印過,所以請
S 行參考 man Iptcontrol 。
7.39 profile
這個檔案是當你使用 bash 爲 shell 時,進入 shell 會讀取的設定。就像
tcsh 所使用的 cshxshic 一樣。
132
7,40 rc
chapter 7_ —
7^1 錄卞的撞動语
當系統開機時, kernel 會先去載入 / sbin / init ,然後 / sbin / init 會去執行
/ etc/rc ’而 rc 會去執 fr / etc / rC 的檔案。幾乎所有的設定都在 rc . conf 中,
所以你只要去修改 rc . conf 就好了。
7.41 rc.firewall
這個檔案是作防火牆的設定。你可以在該檔中加入你想要的設定,不過
前提是你的系統已經準備好防火牆的相關設定了。詳情請參考! 3 .3防火
牆的設定。
7_42 rc.local
這個檔案是讓你設定開機要執行的程式。你可以在該檔中加入啓動程式
的指令,如果 rc . loca ] 不存在,請自行新增。你也可以在 / etc / rc . d 的目錄
中,放在你一開機想要執行的 shell script ,並將權限改爲可執行。
7.43 rc.«
/ etc / 的其他 rc , 的檔案,如 rcJ 386 - rc . network 等,你不必去更動它
們° 一般而言,你想做的設定都可以在 / etc / rc . conf 中達成。如果你想要
知道更多它們的資訊,請 man rc 。
133
P FreeBSD 入門應 用口 □] 二 ,
7.44 resolv.conf
設定你 DNS 查詢的主機 順序。 nameserver 的後面加上的 IP 就是 DNS
Server 的位址。
7.45 services
這個檔案定義了每個網路服務所使用的 port 及名稱。
7.46 shells
這個檔案定義了使用者可以使用的 shell 。只要是可以使用的 shell 都要
在該檔案中加入。有些程式爲去撿查使用者所使用的 shell 是否在 shells
中,例如 FTP 就不允許非使用 shells 中定義的 shell 的使用者登入。
7-47 syslog.conf
這個檔案定義了系統記錄檔所儲存的位置。
7.48 ttys
定義 tty 的形式及某些 tty 允不允許 root 登入 。例入 root 就不能從 ttyp * 登入
有的 tty 後面有加 secure ,表示 root 可以從該 tty 登入。
134
chapter
FreeBSD 入 P1 廳埔 □
8.1 槪論
傳統上,要在一個 UNIX 系統上安裝其他軟體時,有幾個步驟:
_下載該軟體,有可能是 binary 檔或是原始碼
_解壓縮該檔案,通常是以 compress 或 gzip 壓縮的
_譎一下該巨錄中的說明檔,可能是 readme 或是 doc / ,來了解如何安裝該軟體
_如果所下載的是原始碼,可能要先編 輯一下 Makefile ^接著再編譯該軟體
矚 最後再測試與安裝
當然,我們可以在 FreeBSD 上使用傳統的方式來安裝軟體,但是還有
更簡單的選擇。 FreeBSD 提供了 package 和 ports 這二種簡單的安裝軟體
方式。
所謂的 pakcage 是別人幫你將程式編譯成 binary 檔,並定義了該安裝在
什麼地方。我們只要下載一個壓縮檔,並使用 pkg_add 這個指令就可以快
速的將軟體安裝在 FreeBSD 上。這是安裝軟體最簡單的步驟,所安裝的
東西也是最標準的,和自己依需求修改並編譯原始碼比較起來較缺乏彈
性。
而 port 就是使用原始碼來安裝軟體。我們只要進入 /usr/ports/ 裡想要安
裝的軟目錄中,打指令 make install 就可以安裝完成了。 FreeBSD 己經幫
我們定義了所要安裝讓軟體所須的步驟、所要求的軟體。不管是 package
或是 ports ^當安裝的軟體需要依靠其他軟體才能繼續安裝時,它們會自
動幫你安裝該軟體。所有安裝好的軟體都將記錄在 /var/db/pkg 中,口後
如果我們想要移除軟體時,可以用一個簡單的指令 P kg_dd e te 加上軟體名
稱就可以了。
136
chapter 8
即然 port 這麼好用,爲什麼 FreeBSD 要同時有 package 和 ports 呢?我
們來比較一下 ports 和 package 的 優點:
package 的 優點:
|g 一個己經編譯過的壓縮擋通常比包含原始碼的檔案還要小。
H 使用 pakcage 並不需要再做任何的編譯動作,如果你的電腦速度很慢,在安裝像
KDE 、 GNOME 等大型軟體時,不用編譯可以省下很多時間。
胃使用 package 來安裝軟體時,你不必事先了解在 FreeBSD 上編譯時所使用的軟體
及其過程。
ports 的優點:
|g package 為了要茌多數的電腦執行,考慮相容性問題,通常編譯的比較保守。而使
用 ports 你可以依自己的系統修改,例如選擇使用 Pentium III 或是 Athlon 的處理
器。
_在編譯 package 時,就已經限制了該軟體的功能,無法再依自己需求擴充。例如
Apache 這套軟體就有許多的功能司以在編譯時掛進寐,使用 ports 來安裝時,你
| g 可以依自己的需求來加以修改。
M 有些軟體不允許使用 binary 檔的方式敷播,只能下載原始碼。
_有了原始碼 * 你可以自己修改並加以應用。
M 有的人喜歡擁有原始碼,他們可以讀它、從中學習。
接著我們就針對 package 及 ports 來說明它們的使用方式。
137
! 0」 FreeBSD 入 P1 鏖用 □ □□□[— — : 1
8.2 使用 package
8.2-1 安裝 Package
安裝 package 有二種方式,第一種是使用 / stand/sysinstall (也就是我們安
裝 FreeBSD 時所看到的畫面)來安裝,另一種是使用手動安裝。使用
sysinstall 安裝時,我們必需選擇安裝的來源,最常使用的來源是網路及
光碟片。而使用手動安裝必須自行抓回所需的檔案,並以指令安裝。以
下我們就分別針對這二種方式來說明:
方式一:使用 / stand/sysinstall
假設我們要安裝在 FreeBSD 上收信的軟體 pine ,首先我們要執行 sysin-
stall 以進入安裝時的畫面:
# / stand/sysinstall
_8」
138
chapters
一 軟體彌—
接著選取 Configure 選項,進入圖 8-2 的畫面
FreeBEB Canfigutatian Hebu
ir you"ue already installed FreeBSB, you nay use tjils nemi to custanizE
it sDNCKhat ta suit your partloilar c^onfiiurdtloo. Host iHpurtATitly-
you can use the Packages uUllty to load extra ~3r4 party"
software not proulfled in the fcase iliatri hut Jans.
Exit
Exit tliis kbh Cte turning to preuiottsl
Distributions
InstdLJ additional distribution sets
Packages
Al imilMAlUi j J
Boot Passuori
^et tht systeR password
FdisJt
The dlsfc SI tee (I!C atyie pirtitian) Editor
The disk Label editor
L^bel
osef natigQp^ift
Bdd user end group itffornatlon
C(J(5S0l(?
CustoHizE stjstei cma&ole behAUtor
Tirae Zone:
Set ithlch tine ^tjne yoq're Lb
led ii
Chdnge the liastalletLPii Media type
House
Configure your nanse
*— 1
Netuurklng
i( + ) -
Configure additional nEtyark seruices
IS
ore ini
?r ess fl Far hdfe inforwatian on these optlous ]-
圖士 2
我們選 Packages 選項來安裝 package :
Choose Installiition KedU
free 耶 D can be Ls^ta L led froit a uariety of SiffErent instailation
ranging fru_ nopptes tfl an Fnternet HF seruer. If you're
inst^J]ing FreeBSD fron a Sttppnrted CD^DUB SrJiue then tliis is genera]ly
the best nedia to use If you liaue m ouerriding reaspn far using other
nedia.
CD/DUS
FTP
FTP Passive
HTTP
麗
MFS
File Sydte*
floppy
Tape
QptioTts
Install fron a Freg&gJ CB/BUD
an FTF server through
【阳 tall frail ad F1F seruer through a
Install fron a D03 partition
tnstalL B«er MFS
Install frov ah «(isUng f UesysteR
InsUll fron a floppy disk set
Install fron SCSI or QIC tape
Go to the OpUans screen
f1reua LI
littji pro 叫
__
■E Pfkss FI fnr mire 〖nfnrufltimi
wmm
nn thp. uar
iniiR jiKdi fl typps
國 843
在圖 8-3 中,我們必須選擇安裝來源,在這裡我們選擇 FTP ,從 FTP
中我們可以找到較多的軟體。選擇了 FTP 之後,將出現圖 8-4 的畫面,讓
我們選擇要使用哪一個 FTP 站台:
139
FreeBSD 入 忾 應用
ms-4
我們選擇 「 URL 」 來自訂要使用的 FTP 站台。接著便會出現一個要求
我們輸入站台位址的視窗,如圖 8-5 所示,假設我們要使用交大資工的站
台,則輸入 freebsdxsie . nctu . edu , tw / pub / i 3 86/ :
Choose Ensta] 1 atian TicffTd
Free BSD can be insUllud frow a uariety af different instaHdtian
media, ranging fvon flupples to an Internet FTP seruer, IT you're
instfllUng FreeBSU frow a supnnrted CB/DUD driue then this is rjeiteraJly
tlie --- Ud Iue Required
raed
Please specify the URL of a FreeBSII distribution on a
renotp ftp site. Tit Is sitE mist accept either anaiujitm 旧
ftp Qt gou should haue set an ftp usErnane and password
in the Options screEii.
(t URL Inoks like this: ft|)
Where <patl)> Is relative to the dnQnyrious ftp dlirectory or tlie
hone directory of the user being logged in as.
f t p : reebsd.csie r edu.tu/pub/i3B6/
r
-E Press fl for wore
fnformat
[uti mi t 3 if? various me dia types
圔 8-5
輸入站台後,會問您是否要使用目前的網路設定。如果我們己經連上網
路,則選 YES ,否則請選 NO 來設定網路。接著會出現一個軟體分類選
單,這一份分類選單將各個軟體分門別類放在不同的選項下,其中 All 是
所有軟體的所在,如圖 8-6 。
140
chapter 8
軟體安裝
le[timu
SPACE, If the patkafe is
deleted Uf installed).
PiCKaiesel
To nark a patkdgs, noye to it and press
a I ready narked, it ulll be unnark^d or
I tens narked uUh a U are dependencj^ which uill bt au to-loaded.
Tu scarLli for a package bg nan^. press ESC. Tq select a category,
press flETum noiE: Hie All r.^tegort| SElEction creates a uery large
subnmiu! If you select it. pJtrase be : patient uhile U coses up.
ite
Dredn
汉 mi
inux
a tli
botte
isc
n
BUS
mx
Jain
Software far the It Desktop EnulrQiment r
Ported snftuare for the Korean market.
Co mp liter Unp 叩托 .
Linux prog raws that can be run under hiTtaru conp^tlbil f
ridthendticii] computation saftuare.
Applications and utilities ror the nBDriE.
niscelIdiieoas utilities.
netuQrklny uttlJtles.
USEKET neuB support sotftMare,
fin off ice autonstIon 別 ite of sorts.
Sortuare support for the 3Con: Pain Pi latCtnJ series.
[I 】 MM—
18-6
我們以安裝郵件軟體 pine 爲例,由於 pine 位於 mail 分類下,所以我們
選擇 mai 卜如果您要安裝中文版本的 pine ,應該選擇 Chinese 選項而非
mail 。選擇了 mail 之後,將出現 mail 分類下的所有軟體,我們選 pine-
4.44 這一項,如圖 8-7 :
Electronic
i-i — — -
-nallStats-8,ez
mtJNltt-B. 4 . B
atliallas-5.i6
erdltion-e.i.8
nopuRi- 8 . 3 . 0 ^
gen-G. 2
9 ip 1 pine-l, 76 ^
gpseiid»dn^l ,4
ine-m
Hdi i-0 f 5
op 3 g«d-l ,Z
Dp 3 nte-&. 2 r ia
^U) i- ~~ —
Hdl ]
packages and utilities.
[/isr^ports/aa I I/p 5 -f!a II-Ha US
【 ^»srxport£/nai 1 /pantonine]
Onsr/ports/_ail/pdthalias]
l^isr/ports/naLt/)erdit ion]
L^Hsr/p(jrt 5 ^fiaJ Flog sunn]
t^sr^rts^iai 1 /pgenJ
[^usr/ports/iail/pgp 4 pine]
[/asr/ports/iail/pspsendnaill
BB 8 MIBillM.ll
Oasr/p[)rts/_ai i/p,ai l 】
[^isr/]H)rts,_ai l^pop 3 gud 1
[^usr/portsyiiai l/pop 3 Hte 】
bhi
H &7
選了 pine 之後,就可以選 OK 回到前一個分類畫面,接著按照這種方式
選了其他我們要安裝的軟體之後,就可以選 「 Install 」 來安裝了。選了
Install 之後,將出現所有我們已選取的軟體列表,如圖 8-8 ,如果要繼續
141
J } u u U
[xt
Fr ❹ eBSD 入忾 應用 —
安裝則選 OK 即可。
Package Targets
These are the pacK«ges you'we selected for extractian.
If you J re sure of tliese choices, select OK,
If not, select Cance! to go back to tlie package selection neuu.
3ine-m
[^nsr/ports/Tiai
m)wm
■ 8-8
方式二:使用手動安裝
如果以手動的方式安裝,我們必須先取回所要安裝的 package 。只要是
package ,它的副檔名就是, tgz 。我們可以用 pkg _ add 這個指令來安裝
它。 F 面是一個簡單的範例,使用 package 來安裝 lsof -4.45 Atgz :
# ftp -a ftp.FreeBSD.org
Connected to ftp2.FreeBSD.org.
220 ftp2.FreeBSD.org FTP server (Version 6.00LS) ready.
331 Guest login ok T send your email address as password,
230= The FreeBSD mirror at Tele Danmark Internet
230-
230- Contact: beastie@tdk.net
230-
230- Use wisely. Remote system type is UNtX.
Using binary mode to transfer files.
ftp> cd /pub/FreeBSD/ports/packages/sysutils/
250 CWD command successful.
ftp> get lsof-4.56.4.tgz
142
■ ■
chapters
local: lsof-4.56 Atgz remote: lsof-4.56 Atgz
200 PORT command successful.
150 Opening BINARY mode data connectic
nfor 1sof-4.56.4.tgz' (92375 bytes).
1 0 0% | ^ Hrif'k'k if ********* ******* * * -k *******:
226 Transfer complete.
如一 1 92375 oo:00 ETA
92375 bytes received in 5.60 seconds (16.1
ftp> exit
# pkg—add lsof-4,56.4,tgz
1 KB/s)
要使用 package 安裝軟體,首先必須取得想要安裝的軟體。我們可以先
ftp 到各大學 FTP 站台去取得。 packaeg 的副檔案是,可以在各 FTP
站台的 i 386 /packages 中取得。以交大資工的 FTP 站而言是放在 ftp :// freeb -
sdxsie . nctu . edu * tw / pub / i 386 /packages : 而中央資工的 FTP 是放在
ftp :// freebsdxsie . ncuxdu . tw / i 386 /packages 0 當進入該目錄後,我們會發現
還有一堆目錄,您可以依您的系統版本選擇要使用哪一個目錄。例如系
統是 4.5 -Release 或是 4.5 -STABLE ,我們就可以選擇進入 packages -4.5-
release 這個目錄。進入這個目錄後,又有一堆目錄,這裡的目錄結構和
你系統中 / usr / ports / 下的目錄一樣,每個目錄都是軟體的分類,而 All 這
個目錄是所有軟體。 |
如果您只知道想要安裝的軟體名稱,卻不知道版本及完整的檔名,例如
您要下載 popa 3 d 這個軟體,但不知道是哪一版的,你可以先進入 All 的
目錄下,再以下列方式査詢:
ftp> Is popa3d*
227 Entering Passive Mode (140,113,209,200,159,54)
150 Opening ASCII mode data connection for /bin/ls.
- 卜卜 1 FTP CSIE 22259 Sep 16 07:31 popa3d-0.4,tgz
143
iBSD 入 n 應用 _
226 Transfer complete.
ftp> get popa3d-0Atgz
找到了想要下載的版本是 0.4 ,接著就以 get 指令去取回該軟體,最後
下 exit 離開。
接著你就可以使用 pkg_add popa 3 d -0.4, tgz 來安裝該軟體。
8,2_2 管理 Package
如果我們後悔了,想要移除該軟體,耵以下指令 pkg_delete popa 3 d -0.4
來移除 popa 3 d -0.4 這套 軟體, 所有我們安裝過的軟體都會出現在
/ var / db / pkg 的自錄中。
我們可以使用 pkg ^ info 這個指令來得到軟體的寶訊。例如在我們下載
完一個 package 後,你想要知道這個軟體的資訊,以 popa 3 d - CL 4. tgz 而
言,如果我們想知道它的資訊,你可以下:
# pkgjnfo popa3d-0Atgz
您也可以只打 pk ^ info 來得知所有你安裝過的軟體有哪些。
144
chapter 8
8.3 使用 ports
如果你要使用 ports 安裝軟體,你必須先確認 / usr/ports 這個目錄是否有
安裝° 如果沒有的話,使用 / stand/sysitistall 來安裝 ports 的目錄:
1 ,以 root 執行 /staod/sysinstall
2. 選擇 Configure 後按 Enter
3. 選擇 Distributions 後按 Enter
4. 選擇 ports 後按空白鍵
5. 選擇 Exit 後按 Enter
6. 選擇你要從 CDROM 或 FTP 安裝等
7. 跟著選單照做,最後離開 sysinstall
或者我們也可以到 http :// www . freebsd . org / ports / 去手動抓回 porttar.gz 這
個檔案,將它放在 / usi / 下。並以下列指令來安裝:
cd /usr
(^) tar zxvf port.tar.gz
現在可以進入 / usr/ports 的目錄中,安裝軟體了。
通常每一個軟體都有一個獨立的目錄,而目錄中都存在著一些檔案,每
個檔案都有其特定用途,我們簡列如下:
^ _
Makefile
安裝軟體的編譯設定,您可以修改這個檔案來設定我們在編譯即安裝
軟體時的參數。
dstinfo
說明安裝所需要的檔案及其 MD 5 的檢查資料^
pkg-comment
簡單的軟體描述。
pkg-descr
較詳細的描述,我們通常可以在裡面找到該軟體網頁的位置,使我們
能到該網頁得到更多資訊。
pkg-pHst
列出軟體將安裝的清單,安裝
後會放在硬碟中的什麼地方。
145
FreeBSD 入 n 應用 □□ □
□
如果您想安裝某一個軟體,卻不知道它的目錄位置,您可以使用
whereis 這個指令來找出它來。例如我們想安裝 qpoppei : ,可以使用
whereis qpopper 來找出它所在的目錄。或者果我們只知道某個程式的關
鏈字,確不知道它放在哪個目錄,我們可以使用下列指令:
(^) cd /usr/ports
make search key =爛鍵宇
進入該目錄後,最簡單的安裝方式是直接打 make install ^系統就會自
動去網路上抓取需要的軟體回來安裝。安裝 ports 時, make 時找檔案的順
序是:先去 / usr / ports/distfiles ^ 再去找 / cdrom / ports / dLstfiies 、 最後是網路
中下載。如果您不使用網路安裝的話,您可以自己去抓回軟體,並將它
放在 / usr / ports / dislfUes / 下 , 這樣子在我們打 make install 時,就不會去網
路上抓取檔案。如果您所需檔案存在光碟中,在安裝軟體之前,必須先
將光碟機 mount 在 / cdrom 中。例如,本書的使用者只需將所附的第二片
光碟放入光碟機,並使用指令 mount / cdrom 就可以安裝本書所提及的軟
體了。或者,您也可以將光碟中 / ports / distfiles 目錄內容複製到
/ usr / ports/distfiles 目錄中。
當使用網路取得檔案時,預設抓取檔案的伺服器通常在國外,因此,您
可以修改 / etc / make . conf 來指定使用國內的 FTP 站台,例如編輯
/ etc/makexonf 並 加入:
MASTER—SrTE_BACKUP?= \
ftp://freebsd.csie.ncu,edu s tw/distfiles/${DIST_SUBDIR}/ \
ftp://freebsd.csie.octu.edu.tw/pub/distfiles/${DIST_SUBDIR}/
MASTER—SITE 一 OVERR 旧 E?= ${MASTER_SiTE_BACKUP}
146
chapters
爾噩妄裝—
當安裝完 ports 後,我們可以再下指令 make clean 來清除編譯過程產生
的檔案,建議最好這麼做,否則有的過程中產生大量檔案可是很驚人
的。如果您安裝了一堆軟體之後,才想到之前沒有 make clean ^沒關係,
在安裝 ports 時,編譯過程的檔案都存在於該軟體目錄下的 work 目錄
中。 我們可以使用下列指令乘找出所有未 make clean 的軟體,並將暫存
資料刪除:
# find /usr/ports -depth -name work -exec rm -rf {} \;
如果您使用網路安裝,它會將所下載的原始碼存在 / usr / ports/distfiies
中,當你下 make clean 後,並不會將它們清除。
當你安裝完後,想要移除該軟體時,只要在該軟體的 ports 目錄中打
make deinstall 即可。請注意,不要在 / usr/ports 的目錄中打 make
deinstall ^這樣可是會將"所有”軟體都移除喔。
還有一 些較不常用的 make 方式,簡述如下:
make fetch
make fetch-list
make checksum
make extract
make configure
make all install
make reinstall
make package
抓回所需的原始檔心
顯示安裝所需的檔案。
抓回原始檔並以 MD5 檢查其正確性。
抓回並解開原始檔。
進行組態,但不繼續編譯。
抓回原始檔、編譯且安裝。
若先前發生意外中斷,以此命令繼續嘗試安裝。
將做好的 ports 打包製作成 packages 。
如果安裝完新的軟體之後,如果使用的 Shell 是 Csh 或 Tcsh ,我們可能
必須執行指令 rehash 來重建 hash table ^之後才能在所設定的指令路徑中
147
❼ 兹 0 入門應用匚 □ □ □ :
找到剛安裝的程式,不然的話就必須輸入該程式的完整路徑或重新登入
才能使用。
我們可以在 / var / db / pkg 的目錄中看到我們己安裝的軟體,每一個軟體
有一個目錄,目錄中存放著軟體安裝的資訊,包含了軟體說明、安裝到
哪些目錄中。有的軟體要安裝前,會要求先安裝某一套軟體,如果你事
先沒有安裝它所要求的軟體,通常該軟體會自動幫你安裝。所以我們會
在 / var / db / pkg 下看到一些不是我們主動安裝的軟體。既然軟體之間可能
會相互依賴,我們要如何得知這些軟體彼此間的關係呢? pkg _ tme 這套軟
體可以讓我們撿視軟體間的關係。我們可以使用 port 來安裝這套軟體=
cd /usr/ports/sysutils/pkg_tree
(r^) make install clean
之後我們就耵以使用 pkg_tree I more 來看各個軟體之間的關係了 (別忘
了要 rehash 喔 ) 0
148
]Fr®#BSD 入門廳 用 0 [1 □ □
9.1 安裝 X Window
X Windows 是在 UNIX 系統下的視窗軟體,目前的版本 4. L 0 。另外我
們會再加裝視窗管理軟體,如果沒有了它, X Wmdows 就只能看到白白
一片。在眾多的視窗管理軟體中,我們選用 KDE ,因爲它提供了很多常
用的工具,例如瀏覽器、 Office 軟體等。因此,我們將安裝 X Windows +
KDE 2 及並將其介面中文化。
Stepl * 安裝 X Window
首先安裝 X Window ,請先編輯 / etc / make.eonf ,加入下面這一行:
XFREE86 一 VERS10N= 4
接著使用 ports 來安裝 x Window :
® #cd / usr / ports / x 11/ XFree 86-4
# make install clean
安裝的時間需要很久,以 CPU 233 Hz 的速度要五個小時左右。
Step 2 :安裝 KDE 2
我們同樣使用 ports 來安裝 KDE 2 :
# cd /usr/ports/x11/kde2
# make Entail clean
安裝 KDE 2 需要更長的時間, CPU 速度慢一點的大概要花了+幾二+
個鐘頭吧。當然,所需的硬碟空間也不小,筆者在安裝完 KDE 2 之後,
chapter 9_
xwindoWmmm
尙未 make clean 時要 2.2 GB ,安裝過程中有將近 1 GB 的暫存檔,所以一
定要 make clean 。安裝到一半時會問您要支援哪些列 表機, 您可以加入
你的列表機。
Step 3 ^安裝中文化字型
接著我們要將 KDE 中文化,到
Window 中看到中文的選單,必須先
arphicttf (文鼎字型),及中文訊息檔 (il
這裡速度會快很多。如果要在 X
裝中文字型 kcfont (國喬字型)及
8 n ) =
# cd /usr/ports/chinese/kcfonts
(r^) # make install dean
(^) # cd /usr/ports/chinese/arphicttf
(r^) # make install clean
# cd /usr/ports/chinese/kde2-i18n
(^) # make install clean
Step 4 : 產生設定檔
我們接著要執行 XFree 86 - configure 來產生設定檔 XF 86 Config . new ,然
後將它搬到 / etc / Xll / :
($) # XFree86 -configure
® #mv -/XF86Config.new /etc/Xll/XF86Config
接者編輯 / etc / Xll / XF 86 Config ,在 Section ’’ Module 1 ’ 中加入 load " xtt " 。
並在 FontPath 區段最前面加入下面二行,以期使 X Window 能找到正確
的字型路徑:
151
I^.FreeBSD 入門廳用 □ □ 「 I —
FontPath 7usr/X11 R6/lib/X11 /fonts/TrueType"
FontPath "/usr/X11 R6/iib/X11 /fonts/locar
再來設定螢幕的解析度等,先設定一下螢幕,找到 Section lf Monitor ^ 的部份:
Section "Monitor"
Identifier ” MontorO”
VendorName ''Monitor Vendor”
Model Name '"Monitor Model”
Horizsync 30-70
VertRefresh 50-120
我們在這個區段加入了最後二行關於螢幕水平及垂直更新 頻率。 接著要
設定螢幕的解析度,我希望以 16 bit 色彩顯示, 800 x 600 而且不要虛擬桌
面,找到 Section " Screen ” 的部份:
Section ,f Screen T,
■…" fig ...
DefaultColorDepth 16
……. m
Subsection "Display"
Depth 16
Modes H 800x600 ,f ,r 1024x768"
Virtual 800 600
ViewPort 0 0
EndSubSection
我們加入了 DefaultColorDepth 〖6 ’ 表不內定以 16 bit 的色彩顯示’並找到
Depth 16的部份,加入了 Modes 、 Virtual 、及 ViewPort °這三行表示口 J 以用
chapter9
800x600 或 1024x768 的解析度、虛擬桌面爲 800x600 。接著存檔離開。
Step5 :設定字型
再來新增 々. fontguess ,內容如 K ,以使 Qt]ib 在替代字型時不會發生 錯誤:
[big5-0][gb2312.1980-0][ksc5601.1987-0]
Helvetica
ming
ming
gulim
times
ming
ming
batang
courier
ming
ming
dotum
utopia
ming
ming
gulim
clean
ming
ming
gufim
ming
helvetica
helvetica
helvetica
kai
helvetica
helvetica
helvetica
編輯 〜 /.xftconfig s 加入:
dir M yusr/X11 R6/lib/X11/fonts/TrueType M
# Danny:
# set the AA for different fonts
#
# most TT fonts do not need to be aliased between
# B and 15 points,although this might be a matter of taste,
match
any size > 8
any size <15
edit
antialias = false;
153
j
FreeBSD 入 n 應用 □ □[][:
Step 6 : 進入 x Window
爲了一進入 x Window 即有 KDE 要先編輯 nUinkrc 加入下列 六行:
#!/bin/sh -
export LC_ALL = zli—TW.Big5
export LC_CTYPE=zh_TW.Big5
export LANG=zh_TW*Big5 # 設定使用中文
export QT_XFT=true # For Anti-Alias function
exec /usr/local/bin/startkde
接著執行 rehash ; start?c 進入 x Window ,進去後看到字都是? ?? 沒關係’
在下方工具列中有一個登出的按鈕(在鎖頭的下方小小的圚形)來登出,或
者是同時按 Ctrl + Alt+backspace 鏈(倒退鏈)求離開。然後編輯
~/» kde / share / config/kdeglobaIs ’ 找到 [ Locale ] 的段落改成如卜 如果沒有
[ Locale ] 區段則在文件最卜方白 tl 增加 :
[Locale]
Charset=big5-0
Country=tw
Language=zh—TW.BigS
存檔離開後就可以再一次以 s tartx 來進入 X Windows 。現在應該可以看
到完整的 KDE 了。
154
chapter 9 一
WindowKlMffl
如果您在 X Window 中無法使用滑鼠’請執行 / stand/sysinstall 來設定滑
鼠,設定的位置在 [ Configure ]->[ Mouse ] ^先設定 [ Type ] 選擇滑鼠的類
型,再選 [ Enable ] 讓一開機即驅動滑鼠。在 KDE 2 中有許多的附屬軟
體’從簡單的文字編輯器、繪圖軟體,到常用的辦公室軟體、灑覽器及
郵件軟體都有。由於是圖形介面,您可以自行摸索嘗試。 KDE 的瀏覽器
是 Konqueror ,它的使用介面和 IE 差不多,除了是網頁瀏覽器外,也結
合了檔案總管的功能,圖 9-2 即 Konqqeror 的畫面:
國? -2
155
gy FreeBSD 入 P1_m ] 二 |
您也許會發現 KDE 簡直可以和 MS Windows 抗衡,它的辧公室軟體功
能齊全,不論是 KWord 、 KExcel 、 KPowerPoiiit 都是威力強大的軟體。
19-3
9.2 X Window 下的中文軟體
9.2.1 中文終端機
KDE 所附的終端機 Konsole (位於桌面下方有貝殼的黑色螢幕圖示)並不
支援中文的顯示,如果您要使用中文的終端機來連上 BBS 站,必須安裝
其他軟體。 FreeBSD 中收錄了許多中文終端機軟體,例如 Eterrn 、 crxvt
等,這裡我們將安裝 crxvt :
# cd /usr/ports/chinese/rxvt-big5
(^) # make install
接著請在 ~/. cshrc 中加入下面這一行來使 rxvt 能看到中文檔名:
alias rxvt 'env LC_CTYPE=en_USJSO_8859-1 rxvt'
156
0
chapter 9_
XWmdowMWm
安裝完畢啓動 X 視窗後,我們可在[開始選單; h > [執行 命令] 中,輸入
rxvt 來啓動中文的終端機。如圖 9-4 所示:
■ 9-4
啓動 rxvt 後,就可以使用中文的終端機畫面了:
」卜_
C 3 爾子怖告檷 o
HP 叫 of KiecU ical Er^ireierir
‘:1 TaaHctfi If : ■
橡天 ▲
㈣ n 綠
http://bbs*
■ed by FreeBSD: tm 光臨 IM^SSL^.
/V 代號,一 ^tiUigusst (Entex)] 参額,以
l HJ ( 目前總興 W 124 人上蛾)
H 945
757
\」FreeBSD 入 P1 應用 □ □ □ □ □ T ":-
9.2.2 中 文輸入
我們安裝的 X Window 目前爲止只能看到中文,但無法使用中文輸入,
如果要使用中文輸入,必須安裝 Xcin 這套 軟體。 xcin 是 X Chinese Input
的縮寫,這個軟體提供許多輸入法,例如注音、大易、倉頡、簡易、酷
音、行列等。他們的網址是 http:v7xcin.Unux.org.tw ,您可以在這裡獲得更
多寶訊。
xcin 採用標準的 XIM 協定, XIM 協定是 X Window 下中文輸入的標
準,只要支援 XIM 的軟體,我們都可以使用 xcin 來輸入中文。而在
KDE 中,除了 Konsole 外,其他常用的軟體都支援 XIM 中文輸入。
安裝十分容易,我們可以使用 ports 來安裝:
# cd /usr/ports/chinese/xcin25
(r^) # make install
安裝完 Xcin 後,我們還要修改 ^.xinitrc 來加入中文輸入法的設定,請
使用文書編輯軟體來編輯〜 Axinitrc 這個檔案:
糾 /bin/sh -
export LC—ALL = zh 一 TW.Big5
export LCLCTYPE = zh_TW.Big5
export LANG - zh_TW.Big5
export QT_XFT = true
# 加入下列二行
export XMODIFIERS = @im = xcin
xcin2.5 &
# 啓動 KDE
exec /usr/local/bin/startkde
158
chapter 9
X Window 的使用
修改完後存檔,接著進入 X Window 您 畴看到 輸入法的視窗,如圖 9-6 :
IX ,關 m :}
J
1 " mmi
俊',人 戈金水 d
圖 9-6
然後我們就可以執行支援其他軟體來輸入中文了。例如我們開啓 rxvt
的視窗後,就可以使用 Ctrl + Space 來切換中英文輸入法。如果您發現開
啓 rxvt 時’無法切換輸入法,請在啓動 rxvt 時加上參數 rxvhim xcin 即
可:
H97
159
FreeBSD 入 fl 應用」
□
除了使用 rxvt 之外,其他像 Konqueror 或 Kword 卜的中文輸入也沒問題’如圖
鼷 9-8
在輸入法的切換方面,我們可以使用下列幾個預設的熱鏈來切換:
Ctrl+Space
中文 / 英文的切換
CM 十 Shift
依序切換輸入法(正向切換 h
Shift+Ctrt
依序切換輸入法(反向切換)。
Ctrl+Alt+ 數字
選擇輸 入法, 數字部份由1 〜 8
如果您覺得輸入法的視窗太大很佔空間,我們可以修改 xcin 的設定
檔,將視窗 縮小。 設定檔的位置是 / usr/X 11 R 6/ etc/xcinrc ’使用文書編輯
軟體打開後,找到 ” OVERSPOT „ W 〖 NDOW — ONLY " 的部份,並修改如
下:
(define OVERSPOT—WINDOW_ONLY "YES")
160
不過,在 xcin 中似乎有個小 bug ,就是使用了 xchi 後,要登出 KDE
時,可能會發現無法登出,最後只能以 Ctrl + Alt + Backspace 來離開 X
Window 。如果您也有這樣的問題,請修改 / usr / XllR 6/ etc / xcinrc 將 Root
OverTheSpot 的功能拿掉,也就是說我們不能使用小型的輸入法視窗了。
我們使用文書編輯軟體打開 / usrXllR 6/ etc / xcinrc 後,找到下面的內容:
; XIM Input Style Adjustments.
;在下面這一行前面加上一個符號" #•_
#(define INPUT_STYLE '(Root Ovei+TheSpot))
{define OVERS POT—USEJJSRCOLOR ''YES")
(define OVERS POTJJSEJJSRFONTSET "NO")
(define OVERSPOT_WINDOW_ONLY "NO”)
如果您發現只有在 rxvt 中可以輸入中文,而在其他的 KDE $义體下都無
法切換到其他的輸入法,很有可能是您 LCLCTYPE 的設定有問題,請參考
前一節中〜 Axinitrc 的設定內容,將 LC _ CTYPE 設爲 zh _ TW . Big 5 °
161
Fr«eBSD 入 P1 應坩匚
162
^ : Fr®oBSD 入 P1 廳用 □ □ □]
apache 是 UNIX 系統中普遍使用的網頁伺服器軟體。目前網際網路
中,有超過百分之五十的伺服器是使用 apache 來提供網頁瀏覽的服務。
這裡我們將介紹如何安裝一個功能完整的網頁伺服器。
如果你的網頁伺服器只要用來放純粹的 HTML 檔,不要執行其他的功
能,如 PHP 、 MySQL 、 SSL 等,你只需到 / usr / ports / www/apache 13的目錄
中,執行 make install 即可迅速的安裝 apache ^但是這樣的伺服器太過於
陽舂了,使用 apache 自然要使用 PHP 才有意思。 PHP 是一個用來寫網頁
程式的軟體,就像 ASP 、 JAVA servlet ^ CGI 等等有類似的用途。不同的
是 PHP 十分容易學習,程式碼也很簡潔,速度更是沒話說。如果你有些
微的程式語言基礎,不出二個禮拜,你就能對 PHP 有十足的認識,並且
可以自己寫出留言版、權限控制等簡單的程_式。
如果要使用 PHP ,那你一定也要使用 MySQL 。 MySQL 是一套資料庫
系統,它的功能及速度都令人讚賞。 apache + PHP+MySQL 是近年十分流
行的組合,使用 PHP+MySQL ,你可以製作出網頁的各式資料庫,如會員
管理、產品資料庫等等。總之,我十分建議使用 apache + PHP+MySQL 的
組合,就算目前不會用到,不久的將來也會使用它們的功能。全部一股
腦的裝起來,省得日後麻煩。在安裝 PHP 時,我也建議你順便安裝 GD
等軟體來付予 PHP 繪圖的能力,.例如從資料庫中取出資料來繪製統計圖
表等。
另外,如果你要在網頁上執行 CGI 的話,我們會介紹 suEXEC 的設
定。傳統上,當使用者執行 CGI 時,系統會以網頁伺服器執行者的身份
來執行 CGI 。內定的使用者是 nobody ^這樣的執行方式有-些缺點。因
爲所有的 CGI 程式都必須要設定爲可以執行,但是如果是以 nobody 的身
份執行的話,該 CGI 程式就必須要讓 nobody 有執行的權限。 UNIX 的權
限控制有三個等級,分爲檔案的擁有者、和權有者同一群組的人、其他
164
chapter 10
人,而網頁伺服器的執行者通常不是擋案的擁有者,如果系統中有其他
的使用者也要執行 CGI 程式,他們都必須把 CGI 程式的權限開放給所有
人’這樣子在系統中的所有人都可以執行該程式。更甚者,如果 CGI 程
式有要求讀寫檔案的話(例如留言版程式),那麼被讀寫的檔案也必須讓所
有使用者都可以讀寫’也就是說其他人都可以刪除別人的檔案。因此,
我們利用 suEXEC 來讓 CGI 程式在執行時是以擋案擁有人的身份執行,
也就是說 CGI 程式的權限設定只要設爲擁有者可以讀、寫及執行,不必
開放給其他的人使用。總而言之,如果你的網頁伺服器有必要執行 CGI
的話,最好安裝 suEXEC °
最後,我們也會加入 SSL 連線。一般的 hup 要求都是以明碼傳送資
料,寶料傳送的過程中很容易被竊聽。如果你有一些需要輸入密碼的網
頁,建議改用 https 連線,也就是用 SSL 連線的方式,將資料重新編碼加
密,來增加安全性。
這裡我們將介紹如何安裝 apache ,|同時使 apache 擁有 php 、 MySQL 、
ssl 、 suEXEC 的功能。如果你不需要某一項功能,你只需要跳過該項設定
即可。
10.1 安裝 MySQL
我們可以使用 pom 來安裝 MySQL ,但爲了使用最新版的 MySQL ,所
我們自行抓回原始檔來編譯。先到 http :// www . mysql.com 取得最新版的
MySQL Source Package ,本文撰寫時的最新版本是 mysql -3.23,46, tar.gz ,
讀者可以在第二片光碟的 / ports/distfiles 曰錄中 找到該檔案。你也可以在
國內的 FTP 站台去取得,例如 ftp :// freebsd . csie , ncu . edu . tw / distfiles / 取得
166
Fr«eBSD 入 《靡_口 □□匚
mysql -3,23.46 .targz ^ 檔案名稱數字的部份就是版本的名稱’數字越大表
示版本越新。
先新增一個使用者 mysql 以供 MySQL 使用,編輯 / etc/group 加入下列
mysql:*: 100:
執行 vipw ,加入下列 一 行:
mysql:*: 100:100: ;0:0:Mysql user:/usr/local/mysql:/sbin/notogin
取回檔案後,執行下列指令以解壓縮,並安裝,下列指令中最後有\表
示下一行接續該行:
(^) # far zxvf mysqi-3.23.49.tangz
# cd mysql-3,23.49
(^) # ./configure -prefix^/usr/looal/mysql -with-low-memory \
-wifh-narned-lhread-libs^-lc^r -with-charset=big5
# make
# make install
# scripts/mysqlJnstall—db
這樣就完成了 MySQL 的安裝了。上面指令中的 ./configure 的參數’
prefix 表示要安裝的目錄,建議安裝在 / usr / local/mysql 中。 接著更改
mysql 目 錄的擁有者:
# chown -R mysql.mysql /usr/local/mysql
接下來就試驗一下可不耵以執行。接著啓動 MySQL 並設定密碼:
166
chapter 10
網頁伺服
(^) #cd /usr/local/mysql/share/mysql
(r^) # , / mysql.server start
(r^) # cd /usr/local/mysql/bin
($) # ./mysql mysql
若安裝成功,你將看到以下畫面:
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Welcome to the MySQL monitor Commands end with ; or \g.
Your MySQL connection id is 14 to server version: 3.23.49
Type 'help;' or \h' for help. Type V to clear the buffer.
mysql>
MySQL 剛安裝完成時,並未設定! X ) Ot 的密碼,因此我們接著要設定
root 的密碼並即時更新設定:
mysql> UPDATE user SET password=password{. 密碼 ■)
where user =1 root';
Query OK, 0 rows affected (0.00 sac)
Rows matched: 2 Changed; 0 Warnings: 0
mysqi> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.02 sec)
如果您有其他使用者要加入也可以加入,最好不要讓使有人都有對所有
寶料庫有全部的權限。例如,我的網頁寶料庫名稱是 WWW ,而管理者是
167
^^戸『趣_03©入門麗用口 □ =1 □] ; —
jack , 我只要讓它對 www 這個寶料庫有某部份的權限&密碼是 mypwd ,
耵以使用下列的設定:
mysql> GRANT SELECT , INSERT 7 UPDATE t DROP,CREATE,DELETEJMDEX
ON www * TO jack@(ocalhost IDENTIFIED BY 'mypwd';
mysql> FLUSH PRIVILEGES;
以上指令及 MySQL 更詳細的設定說明,我們會在第十五章寶料庫系統
中加以說明。最後請以 exit ; 來離開 MySQL 。
開機時要自動執行 mysql 請在 / etc / rc . loca 〗 中加入:
/usr/local/mysq!/share/mysql/mysql.server start
建議您以後使用 mysql.php 來管理資料庫,這是一個可以從支援 PHP
的網頁上直接存取資料庫的程式。比起其他以 PHP 寫成的 MySQL 資料
庫管理程式,我最喜歡這一個,因爲只要將它放在網頁的目錄中,就可
以執 行了。 只需一個擋案,完全不須做任何設定。你可以在本書第二片
光碟 /examples 中取得°
168
/^\ chapter 10
10_2 安裝 apache
10.Z1 使用 ports 安裝
我們要開始安裝 apache 了。如果您所要安裝的網頁伺服器只是要具備
apache 基本功能,您耵以使用 ports 來安裝:
# cd /usr/ports/www/apache13
(^) # make install
如果您要安裝 apache 並令其支援 ssl 及 php ,可以使用下列指令
# cd /usr/ports/www/apachel 3-ssl
# make install
(S) # cd /usr/ports/www/mod_php4
(f^) # make install
但是這樣安裝出來的 PHP 並不能
多的網頁伺服器,必須使用自以編譯
使用 php 來繪圖,如果您需要功能更
的方法來安裝。
10.2.2 自行編譯
首先,在 / trnp 中建立一個目錄 work 並進入該目錄,取得以下檔案將它
們放到該目錄下,以便管理,這些擋案在光碟二的 / ports / distfiles 目錄中
都可以找到:
16 ?
@ F 『㈣ BSD 入門應 □ L : □ 1
apaohe_1 + 3.23,targz
mod_ssl»2.8.6-1.3 + 23,targz
openssl-0.9.6b,targz
mod_fastcgi 一 2_2, 12.tar.gz
以下爲 PHP 所需的擋案,除了 phpAU . tar . gz 外,其他的擋案是爲了要使 php
支援繪圖必須使用:
php-4-1.2.tar.gz
imap-200tBETA.SNAP-0106191041.targz
gcf-1 A4-tar.gz
zlib-1,1,4.targz
tl lib-1,3 J.tgz
freetype2-2.0.6.tgz
jpeg-6b_1 .tgz
png-1.2.1.tgz
1. 解壓縮 apache :
(S) # tar zxvf apache_1.3.23Jar.gz
2 、安裝 openssl :
(r^) # tar zxvf openssl-0-9 6b.iar.gz
(r^) # cd openssl-0.9.6b
{$) # ,/config
# make
(^) # make test
170
chapter 10
網頁伺服蘇
(^) # make install
(^) # cd ..
3 . 編譯 mod-ssl :
# tar zxvf mod_ssl-2 T 8.6-1,3.23.tar.gz
(^) # cd mod_ssl-2.8.6-1.3.23
(r^) # ,/ configure -™-with-apache-../apache_1.3,23
® #cd „
4 . 先做一次 apache 的 組態:
(^) # cd apache_1,3.23
(^) # ./configure --prefix=/usr/local/apache
# cd
5 . 安裝 PHP 之前先安裝 GD 及其所需檔案:
(^) # tar zxvf zlib-1.1.4.tar,gz
(^) # cd zlib-1,1.4
(^) # make ail install
#cd ■■
(^) # pkg_add -v jpeg-6bJ .tgz
(S) # pkg add -v png-1.2.1.tgz
(^) # pkg_add -v tl lib-1.3.1.tgz
# pkg_add -v freetype2-2.CX6.tgz
(H^) # tar zxvf gd-1.8,4.targz
171
FraeBSD 入門應用:
# cd gd-18.4
(r^) # make install
(^) # cd..
(S) #tar zxvf imap-2001 .BETA,SNAP-0106191041 .tar+gz
# cd imap-2001.BETA.SNAP-0106191041
(r^) # make bsf
# cd ..
# tar zxvf php-4.1.2.targz
(r^) # cd php-41,2
# ./configure -with-mysqN/usr/local/mysql \
-with-apache=.7apache_1.3.23 -enable-track-vars \
■™wrth-imap=../imap-2001,BETA.SNAP-0106191041 \
-with-gd=/usr/local -enable-gd-native*ttf \
—with-t1lib\
-with-jp 0 g-dir=/ysr/focal -with-png-dir \
-with-freetype-dir \
-with-zlib-dir
(r^) # make
# make install
(^) #cp php.inhdist /usr/local/lib/php.ini
# c d ..
6 .安裝 apache :
(S) # cd apache_1,3.23/src/modules
chapter 10
疆貢
(^) # tar zxvf *»/.*/../mod_fastcgh2.2.12.targz
(r^) # mv mod_fastcgi-2.2,12 fastcgi
# cd 」」
7 + 設定 openssl 位置
設定 openssl 的目錄,如果您使用的 Shell 是使用 tcsh 的話 :
# setenv SSL_BASE './openssl-a9+6b IF
如果是使用 bash 的話 :
® # export SSL_BASE= ,, ../openssl-0.9.6b ,1
8, 安裝 apache
# ./configure -prefix-/usr/iocal/apache \
-enable-shared^max \
"-activate-module=src/modules/php4/libphp4.a \
--activate-module-src/modules/fastcgi/libfastcgi.a \
-enable-module=ssl -enable-suexec \
-suexec-calier=nobody \
-suexec-docroot-/ysr/local/apache/htdocs \
-suexec-userdir=public_html \
-suexec-logfile^/usr/local/apache/logs/suexecjog \
--suexec-uidmin=10 -suexec-gidm'in=10
# make
# make certificate TYPE=dummy
173
FreeBSD 入 P1 嫌用 □ □□匚
(^} # make install
($) # cd ..
大致上完成了,接著要設定 / usr / local / apache / conf / httpd.conf 來使 php 可
以運作。找到 httpdconf 中 php 的部份 如下:
# And for PHP 4,x, use:
#
AddType application/x-httpd-php .php .phtml .php3
AddType appSication/x-httpd-php-source .phps
將 AddType 前的 # 拿掉並改成上面的樣子,存檔離開,如果沒有這一
段文字則自行在 httpdxonfff 案最後自行加入。詳細的 httpdconf 設定我們
會在下一節說明。接下來執行以下指令來啓動 apache :
(^) # /usr/local/apache/bin/apachectl start
啓動後,我們就可以使用瀏覽器連到該伺服器看看是否看得到網頁。如
果可以的話,請使用 / usr / local / apache / bin/apachectl stop 來停止 apache 服
務’再使用 / usr / local / apache / bin/apachectl starts si 來啓動具有 SSL 的
apache 。並改以 ssl 連線到伺服器看看 https :// your . server / 來看是否成功。
我們接著要試試 php 可不可以運作。在 / usr / local / apache / htdocs / 編輯一
個檔名爲 test.php 的文字檔,內容 如下:
<?
phpinfo();
?>
再 使用薦 覽器連到該檔案,看看 php 是否正常: http :// youserver / test,php
174
chapter 10
網頁伺服器
都完成之後,若開機即要執行 apache 的話,請在 / etc/rclocal 中加入:
/usr/local/apache/bin/apachectl startss/
10.2.3 後績系統設定
後續的設定就是要修改 / usr / local / apache / conf / httpd.conf 及
/ usr / local / Ub/phpini ,將它們依你的需要修改。休息一下,我們接著幾章
便要說明這些檔案的設定。
103 httpxonf 說明
/ usr / local / apache / conf / httpd.conf 是 Apache 的主要設定檔。檔案中有 # 爲
開頭者是註解,用以說明設定的情
話,該行對 Apache 就不會產生作用
段是全域設定,用來設定 apache 執行
主機的設定,針對主要對外提供服務
擬主機的設定,你可以在一台機器上設
並針對不同的 domain 來設定不同的目
那麼還有第四個部份是 ssl 的設定。
形及方式,如果一行的開頭有#的
全文可以分成三個部份,第一個區
時的重要設定。第二個部份是主要
的主機加以設定。第三個部份是虛
定多個 domain name 或多個 IP ,
錄及相關參數。如果你有安裝 ssl ,
修改完 httpd.conf 後,記得使用 / usr / local / apache / bin/apachectl restart 來
重新啓動 Apache 。
175
FreeBSD 入 n 應用
10.3.1 全域設定部份
# ServerType 可以設定為 inetd 或是 standalone ^ standalone 是採镯立常駐的方式 ^
# 即開機時就常駐於系統中。若是設定為 inetdB 寺,則是由 inetd 這個 deamon 來啓動
# 相關服務程式。一般來說以 standalone 的方式 Server 的效率會比較好 *
# 除非您有特別的需要,否則建議以 standalone 的方式即可。
ServerType standalone
# apache 的根目錄,就是你安裝 apache 的目錄
ServerRoot 7usr/local/apache f,
# 使用 NFS 時才會用到這項設定
#LockFtle /usr/local/apache/fogs/httpdJock
# apache 啓動時會記録 process id ,並將它寫在下列設定的檔案中。
PidFife /usr/local/apache/Iogs/httpd.pid
# 設定 apache 程序的相關資訊記錄檔
ScoreBoardFile /usr/local/apache/logs/httpd .scoreboard
# 在 apache 1.3.6 版以前,還多了二個設定檔,就是 access.conf
# 及 3 「 111.03 咁,新版己經不需要了
#ResourceConfig conf/srm.conf
#AccessConfig conf/accessxonf
# 設定和 client 幾秒内仍無法連上即切斷和 client 的連線
Timeout 300
U6
chapter 10
f ^ J 匿頁伺服器
# 可以設定為 On 或 Off ,表示在完成 client 的運線要求後,是否要立即切斷連線。
# 一般會保持連線,以服務 下一次 的連線請求。如果設為 Off ,每一次的連線要求
#結束後,都會關閉連結,下一次的請求則要再開一個新的程序,這樣速度較慢。
#除非你的硬體真的很差,每法同時有太多的程序,否則都設為 ON ,以增加速度
KeepAlive On
#同時保持連線要求的上限。如果你 KeepAlive 設為 On ,這裡才會有 fP 用。你可
#以依照自己的備配提高逼個値,以提高效能。如果設為0表示不限制
MaxKeepAliveRequests 100
#設定持續連線時等待客戶端下一個請求的畤間,超過此時間則視為連線中斷
KeepAliveTimeout 15
# Apache 會動態的依照系統系統的負載來調整所需的程序
# Apache 會定期檢查有多少連線要求茌等待中
#會在這個範 圜中自 動啓動適當數目的程序乘等待請求
#這裡的設定己滿足大多數網站的需求,你不必做更改
MinSpareServers 5
MaxSpareServers 10
#如果你是以 standalone 的方式啓動 Apahce
#這裡是設定啓動時要同時啓動多少個程序來等待連線請求
StartServers 5
#同一時間可以連線的 client 數目,這個數 目不應 該太小
#你可以依自己的硬體來調高這個値
MaxClients 150
1;7
j : I^FrMBS0 入門廳用 ]□] 二
#每個請求子程序 (child process ) 的最大數目。太多的子程序會佔用記憶體
#及資源,如果設為0表示不限制
MaxRequestsPerChild 0
#如果有設虛擬主機的話,你可以設定 Apache 要 listen 的 IP 或 Port ,當所架設的虛
#擬主機若不在80埠號時,您就必須在這指定其他埠號提醒 Apache 監看某個庳號。
#Listen 3000
#Listen 12.34.56,78:80
#虛擬主機的相關設定,設定 Apache 可以接受連線請求的 P 位址或
# Domain Name ^其設定値可以是 * 位址或是完整的 Domain Name °
# BindAddress *
# Dynamic Shared Object ( DSO ) Support : 動態分享物件模組 "
# 可使 Apache 在執行時直接加入某些需要的模組,使 Apache 在執行上更具彈性。
#下列的各模組順序很重要,最好不要隨意更動
# Example :
# Load Mod ule foo_module [ ibexeG / mod _ foo.so
Load Module env 一 module lrbexec / mod _ env,so
■… J 各■■…
# 是否要允許以 http :// yourserver / server-status 乘顯示
#同服器的設定狀態,預設是 Off 。如果要設為 On ,還必須
#要設定下面 《Location / server » status > 的部份
#ExtendedStatus On
178
103,2 主要主機股定
chapter 10
福伺服 f
### Section 2: ’ Main ’ server configuration
# 如果你是以 inetd 的方式啓動 Apache , i 下的部份設定並不會發生作用
#設定 standalone 要傾聽的 port * 如果 port 小於1023
#必須要以 root 才能啓動 Apache
Port 80
## SSL 支援
##如果有使用 SSL ,設定 SSL 要聽的 port
<lfDefine SSL >
Listen 80
Listen 443
</ lfDefine >
# 如果你希望啓動 Apache 的使用者和跑 httpd 的使用者是不同人的話,
#必須以 root 來啓動 7 這裡的設定就 是你盖 使用的使用者名稱及其所覊群組。
#所設的使用者必須是真的存在於系統干萬不要設成 root ,這對於安全上非常重要。
User nobody
Group nobody
#
# ServerAdmin : 你的信箱,這個信箱位址當網頁出現錯誤訊息時將出現在該頁面上
#
ServerAdmin www@mydomain,com
179
@F 『 mBSD 入門廳用
#
# Sen / erName 讓你可以設定一個主機名稱,該名稱和使用者連線
#的名稱不同時,會傳回去給使 用者。 你可以設和你真實的主機
#名稱不同,例如你可以在你的主機名稱前多加一個 WWW
#
#請注意:你不能自己發明 一個主 機名稱並希望它可以運作,
#這個主機名稱對你的機器而言,必須要是一個有效的 DNS name
#如果你的主機並未擁有主機名稱,你可以使用 IP address
#例如, 123.45,67.89 0 如果你真霣的 IP 都沒有,你可以使用 127.0.0.1 ,
# 這是 TCP/IP local loop-back 的位址,通常用來作 localhost
#
ServerName www . alexwang-com
#
# DocumentRoot ; 這個目錄是你放網頁的地方,你也可以放超連結
#來將首頁指向其他地方。
DocumentRoot 7 home / www "
#
#所有 Apache 存取的目錄都可以對它們的屬性加以設定
#
#苜先我們先設定預設的權限
#
(Directory />
Options FollowSym Links
AllowOverride None
</ Directory >
180
chapter 10
顧茼 MIT
#
# 這裡的設定是針對你網頁存放目錄及其子目錄
#
#這裡可以使用的選項有 "Air, "None : 或者是混合下列各項 :
# Indexes", includes"/'FollowSymLinks^/'ExecCGr'
# "MultiViews 11
# Indexs 表示如果若找不到目錄中預設的首
# 設定的檔案)時, Apache 會自動產生 index
# FollowSymlinks 表示允許符號鏈結 (Symbolic Link)
匿 (Directory Index
列出目錄中的檔案
功能,
# 如果沒有此選項, Server 會忽略系統中的連結檔案。
# Includes 允許 SSI (Server Side include ) 可以在該目錄下執行
# ExecCGI 允許執行 CGI ,若無此選項 則該辆 録中無法執行 CGI 程式
# Multi Views 允許内容協商的 MultiViews 。
# None 關閉所有的選項,只允許 Read 。
# All 開啓所有的選項,除了 Multi Views 之外。
# 請注意, M MultiViews ,r 一定要明確寫出乘,使用 "Options A[l rt
# 並未包含 Multi Views li
#
《Directory 7home/www ,T >
Options Indexes FollowSymLinks Multi Views ExecCGI
#
# 這個選項是用來控制目錄中的 .htaccess 權案可不可以覆蓋原本
# 對該目録所設的權限。這個選項可以是 All 或是下列混合 各頂:
# "Options 1 ., Tilelnfo' ” AuthConfig' and .■Limit .,
# Options 允許該目録位置在 .htaccess 檔中使用 Options 功能
# Filelnfo 允許該目錄位置在上 taccess 檔中使用 AddEncoding 、
# AddType 、 DefauftType ' ErrorDocument 等指令。
181
FrMBSD 入 n 應用 _]
□
# AuthConfig 允許該目錄在 .htaccess 檔中使用 AuthDBMGroupFiie 、
# AuthDBMUserFile * AuthGroupFile 、 AuthMame 、 AuthType 、
#AuthUserRle... 等 功能。
# Limit 允許使用 Limit 功能。
# Hone 停止 .htaccess 的功能。
# AH 允許 .htaccess 所有功能。
#
AllowOverride None
#
#控制誰可以運到這個伺服器
# Order 表示先處理 allow 或是 deny 。這裡是先 allow 再 deny
# 這裡 allow 跟 deny 的上下順序必須跟 Order 中所設定的順序
# 是一樣才可以。
# Allow from all 表示任何人都可以連到伺服器的逼個目錄來瀏覽
# 若是設為 Allow from freebsd.org 的話,則表示只有網域是
# 在 freebsd.org 的人才句 " 以連到該目錄中觀看。
#當然若不想讓某些人連過乘觀看這個目錄的網頁
# 可以加一行 Deny from bad.Domain.com ^當然您也可
# 以使用 〖 P 來代替 Domains
#
Order allow, deny
Allow from all
</Drrectory>
#
# UserDir : 機器中的使用者預設放網頁的地方是在使用者
182
chapter 10
網頁伺服器
#家目録的那個目録下使用者可以用
# http://www.hostname.com/-user 來運到 user 的首頁
#
<lfModule mod_userdirc>
UserDir public_htmi
</lfModule>
#
# 控制 UserDir 目錄的權限,和上述的差不系
#< Directory /home/*/public_htnnl>
# AllowOvarride File Info AuthConfig Limit
# Options Multi Views SymLinksffOwnerM^
# <Limlt GET POST OPTIONS PROPFIN
# Order aliow,deny
# Allow from ail
# </Limit>
# <LimitExcept GET POST OPTIONS PR0PFIND>
# Order deny,allow
# Deny from all
# </LimitExc6pt>
#</Directory>
itch IncludesNoExec
D>
#
# Directorylndex: 當連到目錄時^預設的網庫
# 你可以用空白作為間隔,設定多個檔案
# 最好加入 index.htm 及 indsx.html * 如果育
# 應該要再加入 index.php
是哪一個
雖依所設的順序尋找
■ 使用 PHP 的話
183
j^yFreoBSD 入 n 躧用 □ □ □
#
<lfModule mod_dir.c>
Directorylndex index.html index.php mdex.htm
</lfModule>
#
# AccessFileName : 目録中放置控制資訊的擋案名稱
#
AccessFileName f htaccess
#
# 下列的設定是用來避免 .htaccess 檔案被客戶端使用者看到
# 既然 .htaccess 是用來控制權限的,你當然不會希望他被看到
# 另外,還有 .htpasswd 等檔案是用來控制該 S 錄密碼的,
# 這裡的設定也會影響其他上 t 開頭的擋案
#
<Fi[es 〜 HA \.ht n >
Order allow,deny
Deny from all
</FiIes>
#
# CacheNegotiatedDocs: 這個設定是用來告訴外面的 proxy
# 不要保留我的檔案,預設是註解掉,以降低流量
#
#CacheNegotiatedDocs
#
# UseCanonicalName: 使用這項設定以供 Apache 在需要時可以重
# 建自己的 URL ( 回應該文件是從哪個 URL 出來的)。它將使用
# hostnameiport 去回應要求,這個設定會影變 CGI 中的
# SERVER_NAIVIE 及 SERVER^PORT
chapter 10
網寊肩1服
#
UseCanonicalName On
#
# TypesConfig 用來描述要去哪裡找 mine.types 的檔案
#
<ifModule mod_mime.c>
TypesConfig /usr/local/apache/conf/mime.types
</lfModule>
#
# DefauItType 是網頁文件預設的 MIME type ,你可以將它定義為
# next/plam n 代表文件是 HTML 格式。如果你大多數的文件是
# binary 檔或是圈形,你可以使用 °applicat on/oct©t-stream ,T
#
DefauItType text/plain
#
# mod_mime_magic module 使伺服器司以自己決定使用什麼 MIME type
# MIMEMagicFile 就是告訴該 module 要 5
# Tnod__mime_magic 並不是内定的 module
#這裡的 MIMEMagicFile 只有在包含了該模 I
#
<lfModule mod_jnime 一 magic.c>
哪 裡找這些定義
你可以重新編譯自行加入
:組後才有作用
185
Fr®«BSD 入忾 臞用 —
□匚
MIMEMagicFile /usr/local/apache/conf/magtc
</[fModufe>
#
# HostnameLookups: 定義在 [og 檔中要記錄 IP 或是 hostname
# 例如: www.apache.org (on) or 204.62,129.132 (off).
# 不要打開以節省向 DNS Server 要求解析的時間
#
HostnameLookups Off
#
# ErrorLog: 設定錯誤訊息的 log 要放在哪個檔案
# 如果你有設定在設定虛擬主機時另外指定它的 log 擋的話
#該虛擬主機的 log 會在你所設定的地方
#
ErrorLog /var/iog/apache—error Jog
#
# LogLevel: 控制錯誤訊息的記録等級
# 可以 設為: debug, info, notice, wamer 「 o 「, crit , aiert T eme「g
# debug —般用是在程式的除錯開發使用的
# info 是指 一般的 資訊, notice 指通知訊息
# warn 指的是提示訊息, error 指的是錯誤的訊息
#aiert 是指警告訊息, enwg 則是緊急訊息
#
Log Level warn
#
186
chapter 10
# 下列是自訂記録檔格式,並取一個名字~它們
#你可以在下列的設定中決定要記錄 哪一種
# 這裡共取了四個名字, combin^ommon^eferenagent
#四種都有不同的記録内容 f 以 combin 最詳細
#
Log Format H %h %l %u %t r%r\" … 略 .■■■._,_ iombin
Log Format "%h %l %u %t\ n %rV_ %>s %b ,f common
Log Format '^/oIReferer}! -> %U n referer
LogFormat ^{User-agentji" agent
#
# 設定有人存取檔案時要記錄哪些東西 ( 依 Common 的設定格式)
#並指定要存放在哪裡
#
CustomLog /var/fog/apache 一 access Jog common
#
# 如果你想要再指定記錄其他東西的話,句 1 以在這裡設定
#
#CustomLog /usr/local/apache/logs/refererjog referer
#CustomLog /usr/local/apache/logs/agentjog agent
#CustomLog /usr/local/apache/iogs/acces^Jog combined
#
# 設定是否將 Server 的版本和虛擬主機等資 _ 加入網頁中
# (通常出現在網頁錯誤或 FTP 列表時), OF
# EMan 則是會把 ServerAdmin 的 E-Mai [ 連結 .
ff 表示關閉
加進去。
187
- 段 FreeBSD 入門顧用 —
# 只能設下列三者之一: On I Off I EMail
#
ServerSignature On
#
# Aliases: 你可以再這裡設定任何的別名,格式是
# Alias fakename realnama
#
<1fModule mod_alias.c>
#
# 請注意,如果你在別名 (fakename ) 中加入了 / ,就必須在
# URL 中表示出來。所以這裡 'Vicons " 並未使用別名
# 只有 7icons/ H 才有 ° 如果 fakename 以 / 結束,則
# real name 也要有,反之亦然。
# 下面的 Options 等設定是該別名的目錄設定
#
Aiias /icons/ "/usr/local/apache/icons 广
《Directory 7usr/local/apache/icons’_>
Options Indexes Multi Views
AllowOverride None
Order allow,deny
Allow from all
</Directory>
18 S
chapter 10
網頁爾菔 IT
# ScriptAlias: 這用來控制 CGI 的連結
# 注意需將 Options 的選項改為 ExecCG 卜才!以使用 CGI
#
ScriptAlias /ogi-bin/ Vusf/local/apache/ciji-binr
<Di rectory 7usr/local/apache/cgi-bjn T, >
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>
</lfModule>
# End of aliases.
#
# 控制伺服器如 I 可列出目録内容
#
<lfModule mod autoindex.c>
#
林 Fancyindexing 可以美化列出的方式,也可以使用 standard
#
IndexOptions Fancyindexing
#
189
_] Fr #® BSD 入門應用: :] 匚 _
# Addlcon* 控制如何依不同檔案格示顯示小圖式
# 是給 Fancyindexing 用的
#
AddiconByEncodmg (CMFVicons/compressedgif) 略
AddlconByType (TXX/icons/text.gif) text/*
..“.略 ■”…
Addlcon /icons/blank,gif AA BLANKICON AA
#
# Defaultlcon 是當不知格式時用的小圖式
#
Defaultlcon /tcons/unknown.gif
#
# AddDescription 可以讓你對該檔案格式加以描述
# 格式: AddDescription ■’description 1 * filename
#
#AddDescription '"GZIP compressed document" .gz
#AddDescription "tar archive' 1 .tar
#AddDescription H GZIP compressed tar archive” .tgz
#
# ReadmeName 是伺服器要去找的 README 檔案名稱
#預設將列出在目録的清單之後
#
# HeaderName 是要加在目錄清單前顯爪的檔案名稱
190
chapter to
網頁飼服器
#
# 如果在 Option 中有設 MuitiViews 的話,同服器會先去找
# name.html 並包含它,如果該擋不存在就會去找 name.txt
#
ReadmeName README
HeaderName HEADER
#
# Indexlgnore 是設定目録中那個檔案不列出
#可以使用萬用字元*
#
Indexlgnore .??* *# HEADER* README* RCS CVS 'v't
</lfModule>
# End of indexing directives.
#
# 文件格式 Document types.
#
<lfModule mod mime.c>
#
# AddEncoding 設定編碼形式和所對應的副檔名。
#
AddEncoding x-compress Z
AddEncoding x-gzip gz tgz
#
1^1
:^; FreeBSD 入 fl 廳用口 I ] , —
# AddLanguage 讓你可以設定文件所要告知劉齎器使用的語言,
#
# Danish (da) - Dutch (nl) - English (en) - Estonian (ee)
# French (fr) - German {de) - Greek-Modern (el)
# Italian (it) - Korean (kr) - Norwegian (no)
# Portugese (pt) - Luxembourgeois* (ttz)
# Spanish (es) - Swedish (sv) - Catalan (ca) -Czech(cz)
# Polish (pi) ■ Brazilian Portuguese {pt-br) -Japanese(ja)
# Russian (ru)
#
AddLanguage da ,dk
…. 略 ■….
AddCharset UTF-8 .utfB
# LanguagePnority 設定 使用語 這的先後順序
#
<lfModule mod_negotiatioo.c>
LanguagePriority en tw da nl et fr de el
</lfModule>
#
# AddType 設定 PHP 所使用的 mime-types
#
# 裝 PHP3 的話就打開下列二行
#
#AddType application/x-httpd-php3 .php3
192
chapter TO
瘋顚 W _
#AddType application/x-httpd-php3-souf*ce .phps
#
#下面是給 PHP4 用的
#
AddType apptication/x4ittpd-php .php .phtml .php3
AddType application/X'httpd-php-source t phps
AddType application/x-tar .tgz
# AddHandler 設定 CGI-script 和所對應的副擋名。若您會
#使用到 CGI 程式,則必須將其註解拿掉打開其功能
# 另外,有的 CGI 的副檔名會用到 . p | ,所以最好也加入
#
# To use CGI scripts;
#-
AddHandler cgi-script .cgi
#
# 設定是否加入有 SSI 功能的 HTML 和所對的副檔名
#若您會使用到 SSI 的功能,則必須將其註解拿掉
#
#AddType text/html .shtml
#AddHandler server-parsed .shtml
#
# Uncomment the following fine to enable Apache's
# send-asis HTTP file feature
193
PraaBSD 入門應用
#
#AddHandler send-as-is asis
#
# If you wish to use server-parsed imagemap files, use
#
#AddHandter imap-file map
#
# To enable type maps, you might want to use
#
#AddHandler type-map var
</lfModule>
# End of document types.
#
# Meta Dir: specifies the name of the directory m which
# Apache can find meta information files. These files
# >contain additional HTTP headers
# to include when sending the document
#
#MetaDir .web
#
# MetaSuffix: specifies the file name suffix for
# the file containing the meta information.
194
#
#MetaSuffix .meta
#
# 格式化網頁錯誤的訊息回應 (Apache style)
# these come in three flavors
#
# 1) plain text
#ErrorDocument 500 叮 he server made a boo boo.
# 注意 (") 的標誌並不會顯示
#
# 2) local redirects
ErrorDocument 404 /missing.html
# 設定當找不到網頁時就顯示 URL /missing.html
#ErrorDocumeot 404 /cgi-bin/missing 一 hand er.pl
#
并 3) external redirects
#ErrorDocumsnt402 http://serverxom/sobscrfptionJnfo.html
chapter 10
丽局臟—
#
# 對各種瀏覽器作不同回應
#
<fflVlodufe mod_setenvjf,c>
BrowserMatch "Mozflla/2!_ nokeepallve
BrowserMatch M MSIE 4V0b2; !f nokeepaiivq 略
BrowserMatch "RsafPlayer 4\,0 H force-response-1.0
BrowserMatch "Java/I\. 0 ,r force-response-1 _0
195
FreeBSD 入 fl 應用
BrowserMatch T, JDK/1\.0" force-response-1.0
</lfWlodule>
# End of 對各種瀏覽器作不同回應
#
# 是否允許使用 http://servername/server-info 來顯示伺服器狀態
#將 ' your 一 domain . com ’_ 改成許可連_的網域
#
# <Location /server-status>
# SetHandler serve 卜 status
# Order deny^llow
# Deny from all
# Allow from .your_domain.com
# </Location>
#
# 是否允許使用 http://servemame/serve「-info 來
# 顯示伺服器資訊(必須要有載 Amodjnfo.c)
# 將 ” .y 0 u r_domain.com " 改成許可連結的網域
# 《Location /server-info>
# SetHandler server-info
# Order deoy T allow
# Deny from all
# Allow from .yoyr_domain.com
# </Location>
#
# 為防止 Apache —個 1.1 版以前舊 bug 發生,用來將錯誤轉向處理並記録的指令
196
chap ter 10
■頁麵 ir
#〈Location /cgi-bio/phf>
# Deny from all
# ErrorDoc _ent 403 http://phf.apache.org/phf_abuseJog.cgi
# 〈 /Location>
#
# 是否使用 Apache 的 Proxy
# <lfModule mod_proxy.c>
# ProxyRequests On
#..- 略 ■…
#
# </ifModule>
# End of proxy directives.
197
FreeBSD 入 R 應用: :匚匚
10.3.3 虛擬主機及 SSL 的設定
### Section 3: Virtual Hosts
#
# VirtualHost : 你可以在一台機器上使用多個主機名稱
# 或 IP * 並指定使用不同的目錄及設定
#
#
# 指定要使用的虛擬主機名稱或 IP 及 P ort
#
#NameVirtyalHost *
#
# Virtual Host 範例
# 第一個設定是當未知主機名稱時用的
#<VirtualHost
# ServerAdmin webmaster@dummy-host.exampl6.com
# DocumentRoot /www/docs/d um my-host.example. com
# ServerName dummy-host .example-com
# ErrorLog logs/dummy-host.exam ple^com-errorJog
# CustomLog logs/dummy-host.exemple.com-accessjog common
#<A/irtualHost>
# SSL 設定
## 我將省略大多數的說明
##只寫我們要改的地方
## SSL Global Context
198
m
## All SSL configuration in this context applies both to
撕 the main server and alt SSL-enabled virtual hosts.
鮮
...JS...,
m
鼎 SSL Virtual Host Context
赫
# General setup for the virtual host
chajpter 10
顧丽藉—
<VirtuBlHost _default_:443>
# 在這裡改你的網頁位址及 bg 檔位址即可
#
Docu m e ntRoot M /h o m 6/www ,f
ServerName www,alexwang,com
ServerAdmin jack@myserver.com
ErrorLog /var/(og/apaohe_errorjog
TransferLog /var/!og/apache_access_log
<A/irtoalHost>
199
PreeBSD 入門醒坩
10.4 php.ini 說明
Wlocal / lib / php.ini 是 PHP 的設定檔,檔案的格式是以 V ^註解、以 [
] 包起來段_稱,二獅不會傾刪顏。在安裝完 PHP jt : 、
我們從 PHP 原始碼中複製一份 php . ini - dist 在 / usrAocal / Iib / php.im ^迫板我
們才耵以針對 PHP 來調整成我們要的參數。修改完後,也要重跑 A P ache
才可以有作用。
—般賴,我們不太需要更改這些設定,幽果你想要對它有更深入的
了解,我們會一一 說明:
[PHP]
;$|d: php.ini-dist,v 1.78.2,2 2001/06/01 03:20:49 sniper Exp $
; 關於這個檔案
; 在這裡設定的參數名稱有大小寫之分
■ 例如 ** foo^bar 和 F00—bar 所代表的思義不同
;所設定的値可以是字串、數字、 PHP 的常數(如 E—ALL 或 M 一 P1)
: IN1 常數 (On, Off, True, False, Yes, No and None ) 或是
; - 個運算表示式 ( 如 E_ALL & -E 一 NOTICE) , 或是引號内游串 ( W)
1
: 運算表示式在 INI 檔中只能使用下列符號及運算子
; | bitwise OR
;& bitwise AND
200
chapter 10
福麵
- bitwise NOT
! boolean NOT
布林運算 (Boolean) 可以使用下列的值作為真 : 1 t On , True 或是 Yes
也司以使用下列的値作為假: 0, Off, Falsu 或 No
如果要指一個空字串,只可在等號後什麼都不加,或是以 none 表示。
foo =; 將變數 foo 設為空字串
foo = none; 將變數 foo 設為空字串
foo = "none" ; 將變數 foo 設成字串 'none'
你果你要動態載入一些表示式所方的變數(可能是 PHP extension
或是 Zend extension ) ,你必須在載入後才能使用該變數
所有 php.ini-dist 的設定都是内建的預設値,如果沒有 php.ini 時
或者當你刪除該行,就會使用内建的預設镩
;程式語言 選項;
;是否要在 Apache 中啓動 php 引擎
engine - On
; 可以使用 <? 的標籤,不然的話,只能使用 <?php 和 <script>
short 一 open—tag = On
; 是否允許 ASP 格式的標籤 <% %>
201
—]freeBSD 入門鼸用 □「]
aspjags - Off
; 使用浮點數 (floating point numbers ) 要用多少數字
precision = 14
; Enforce year 2000 compliance ( 在某 些翻覽 器可能會產生問題 )
y2k—compliance = Off
; output buffering 可以讓你就算已經送出 body content 後,還
;可以再送 header ( 包括 cookies) ,只是這樣會減慢一點 php 輸
;出的速度。你也可以在執行程式時呼叫 output buffering 的函式
; 來取得這項功能。或者就茌這裡設成 On 來啓動吧。
: 一般我會設成 Off ,只有當你很常用到這個功能才設成 On 。
output_buffering = Off
;你可以將你的 php 程式輸出轉向到一個函式,例如,如果你
; 將 output_handler 設為 "objzhandier ", 輸出將會使用 gzip
:壓縮網頁給瀏覽器
output—handler =
;壓縮輸出要使用 zlib 函式庫,這裡可以使用的値可以是
; 'off, T on\ 或者是用在壓縮的暫存區大少(預設是 4KB)
zlib.output_compression = Off
; Implicit flush 告訴 PHP 每次輸出 一個區 段都要 flush 強制
; 將暫存區的東西輸出給瀏覽器。這和在 PHP 程式在 print () 或
; echo() 之後呼叫 f!ush() 函式有相同的效果。這個選項最好不
;要打開,否則效率差很多,只有用於除錯時才會打開他。
impficiMIush = Off
0
chapter 10
MmHIeIT
; 是否要強制在呼叫變數時都使用傳址呼叫
; PHP/Zend 將取消。比較好的方式是在函 :
; 呼叫方式以傳址呼叫。你可以在這裡 將它丨
; 的程式是否可以在未來版本的 PHP 執行
; 値,而非在記憶體位址 : •
allow_call Jime_pass_reference = On
這個功能未來版本的
茸定義時就宣告變數的
設為 Off ,來看你所寫
而參數在傳遞時就會以
;安全模式
I
safe_mode = Off
safe 一 mode—exec 一 dir =
設定一些環境變數可能造成安全性的破壞
這些變數如 comma-delimited fist of prefixed
式,使用著只能使用所定義的前綴字串作起
只有以 PHP^ 作開始的變數 ( 如 PHP^FOO
請注意:如果設為空字串, php 允許使用者設任何環境變數
safe_m o d e_a I lowed env vars = PHP
:變
; 這個指令包含了使用者不能以 pu tenv () 改
: 的 comma-delimited list ,這個變數可以所
就算 safe_mode_aHowed_env_vars 設定允 g
。在安全模
始的變數,預設
BAR)
的環境變數
_定的保護
許也不能改變
203
g Fr ❹ 0BSD 入 H 應用 J —I :: :
safe_mode_prot 0 Cted_env_vars = LD_L IB RARY_PATH
; 這個設定可以讓你因為安全的理由而取消一些函式
; 不管你的 Safe Mode 是設為 On 或 Off 都不會影響它
disable—functions =
: 在 Highlighting mode 所要使用的符號顏色
;只要是在 <font color='7????r > 中的東西都可以
highlightstring = #CC0000
highlight.comment = #FF9900
hlghiight.keyword = #006600
highlight-bg = #FFFFFF
high light.default = #0000CC
highlight.html = #000000
; 其他設定
; 決定是否要在同服器上使用 PHP
expose 一 php = On
;資源限制
max execution time = 30 ; 每個 PHP 程式最大 的執彳 7 時間
204
mermryjmit = 8M ; 每個 PHP 程式最大可以消耗多少記憶體(麵 )
錯誤的處理及記錄
; error^reporting 可以讓你設定要回報的錯,内容
, E ALL - All errors and warnings « 所有錯誤没鑿告
; E 一 ERROR - fatal run-time errors ,執行時的致命錯誤
;E 一 WARNING . run-time warnings {no^fatgl errors} * 執行時的警告
f E 一 PARSE - compile-time parse errors
;E—NOTICE - runtime notices (這個警告通常是你的程式碼有問題
; 或者贿可能是内部錯誤 _D 使用 — 個未埽始化麵數)
: E 一 CORE—ERROR ,當 P HP 起始時的 fataf errors
; E—COREJ/VARNfNG - 當 PHP 起始時的 warnings (non-fatal errors
s E 〜 C0MPILE —ERROR - fatal compife-trme errors
;E—COMPILE—WARNING ■ compile-time warnings (non^fataf errors)
; E - USE R^ERROR - user-generated error message
; E - u SER_WARNfNG - user-generated warn ng message
; E - USER —NOTfCE , user-generated notice message
; 範例:
i
; -除了 notice 外顯示所有錯誤
: error^reporting - E 一 ALL & 〜 E—NOTICE
205
g^FreeBSD 入 f! 應 用 [11 □ 二 □-
J
:- 只顯示 errors
■error^reporting = E_COMPILE„ERROR|E_ERROR!E_CORE„ERROR
1
; -除了 notice 外顯 T 所有錯誤
error— reporting = E—ALL & ~E_NOTlCE
. 將錯誤顯示在輸出的頁画上,如果是輸出網頁,建議你把适個功能
; 關掉,並以脚 r logging 將它記錄在檔案中。否則顯示—些錯誤
: 在網頁上離會有黯 _ 全隱,讎麵置、韻雜輸廓或是
;一些其他的資訊
display_errors = On
;就算打開了 display^errors ^ ■ 始 PHP _頻錯誤並不會顯示
;建議你除了除錯外不要打開這個功能
display_startup_errors = Off
;將錯誤記錄在檔案中,建議你將網頁產生的錯誤記録下來
;這個打開後,將會記錄在你 Apache 的 errorjog 檔中
;log_errors = Off
bg 一 errors = On
; 是否要將最後的錯誤訊息存在 $php_errormsg 的變數中
track^errors = Off
;在輸出錯誤訊息前要先輸出什麼字串,
206
chapter 10
; 可以用來改變網頁中字的顏色
;error_prepend_string = __<font color=ff0000> H
;在輸出錯訊息後要輸出什麼字串
;error 一 append—string = ,, </font> ,t
; 要將 log 記録在那個檔案
;errorJog = filename
; Log errors to syslog {Event Log on NT, not valid rn Windows 95).
: errorjog = syslog
; 如果在字串上使用 + 的運算是否要霤告
warn_p|ys_overloading - Off
;資料 處理;
; 請注意 - track_vars 在 PHP 40.3 中永 遠有效
; PHP 如何處理輸出給 URL 多個變數,用什麼字
; 串將它們分開,預設是 '
;arg_separator + output = ,i & n
; PHP 如何處理從 URL 傳寐的多個變數》用什麼字
; 串將它們分開,預設是
; 請注意 : 這裡設中字的任可一個 " 字元 " 都無視為一個分開的符號
207
FreeBSD 入 PI 廳用 □— —
: arg—separator input =
; 這裡的設定是當 PHP 接収來自 GET, POST, Cookie, 瓖境變數(
; Environment} 和内建變數 (Built-in variables) 有重複時,
; 要處理的順序 。以 (G,R C P E&S 表示上述的方法,可以寫成
; EGPCS 或 GPC). 處理的順序是由左至右,當變數名稱相同時,
: 比較慢處理的將覆蓋舊的値。
variables_order = "EGPCS 11
; 是否要將 EGPC8 的變數註冊成全域變數
; 這個當你在以 $HTTP_*J/ARSD 處理 GPC 變數時就有作用
;最好不要在你的程式中預設 register_globals 打開的,
: 全域變數沒有使用好可能會有安全問題
register globals = On
; 這是要告訴 PHP 是否要註冊 argv&argc 變數 ( 這 包含 GET 的資訊 )
; 如果你不使用它,則可以關掉以增加處理效率
register_argc_argv = On
;設定 PHP 在接收 POST 資料時最大的容量大小
post_max—size = 8M
; 這個選項已沒有作用,請使用 variabies^order 替代它
gpc—order = "GPC"
; Magic quotes
208
chapter 10
fXJ 麗誦
;GET/POST/Cookie 進來時使用 Magic quotas
magtc_quotes_gpo = On
;Magic quotes for runtime-generated data,
; 如 data from SQL, from exec() T 等
magic_quotes_runtime - Off
;Use Sybase-style magic quotes (escape 1 with M instead of V).
magic 一 quotes_sybase = Off
; 自動在所有 PHP 檔案之前或之後包含一個檔案
auto_prepend_file =
auto 一 append jile =
PHP 4.0b4 會送出一個語言編碼方式 MIME type
如果要把内定使用語言取消,就把 charset 設為空字串
; PHP 預設使用的 MIME type 是 text/htmi
defauft_mimetype = '"text/htmr 1
: default_charset = 'Iso-SSSQ-r 1
路徑及 曰錄;
;UNIX: 7path1:/path2 r,
;includej3ath = w .:/php/inclUdes n
209
gjFr ㈱ BS0 入 H 鼸用 ] □ □—
1
; Windows: __\path1;\path2 H
;include_path = ';c:\php\includes M
;RHP 文件的位置,只有非空字串才有作用
doG 一 root =
;當 php 以 卜 usemamem 打開文件時,所要使用的目録
:; 就是使用者目録中 PHP 文件要放在哪裡
: 只有非空字串才有作用
user—dir =
;其他可以載入的撞組位置
extension 一 dir = ./
;是否嬖使用 dl{) 函式。 dl (> 在一些多重執行緒的同服器
; 可能不會運作,如 ilS 或 Zeus ,這時它會自動取消 dl<>
enable_dl = On
檔案上傳
; 是否要使用 HTTP 上傳檔案
file—uploads = On
: 上傳檔案時所要使用的暫存 S 録,如果沒有指定就會使用系
;統内定的暫存目錄
;ypload_tmp_dir-
210
0
chapter 10
MmMIeIT
; 最大上傳檔案大小,我改成 5MB ,一首歌砰大於原本的 3MB
upload_max_filesize = 5M
Fopen wrappers :
; 是否允許使用 URL ( 如 http:// 或做為 〖 open () 所
;要開啓的檔案
allow_url_fopen = On
;定義可暱名的 FTP 所要使用的密碼
: from= ,f john@doe.com"
動態延伸 模組;
如果你希望自動載入延伸模組,請使用下列^定
extension-mod uiename.extension
例如在 windows 下,使用 :
extension-msqLdll
…或在 UNIX:
211
入門 _ 用二
: extension=msql.so
; 請注意,這裡只能用模組名稱,不能包含目録
;你要先在上面的 extension dir 設定模組的目録
; Windows Extensions
;Note that MySQL and ODBC support is now built in,
: so no dll is needed for it.
: extensioo=php_bz2.dll
略 -…
;extension=php_zlib.dll
; 模組設定;
[Syslog]
; 是否要定義 syslog 變數,如 SLOG^PID, $LOGJ3RON 等。
l 關掉它會有比較好的執行效率
;你哥以在程式中使用 define_syslog_variables() 乘定義它們
define_sysiog_variables - Off
[mail function]
;只用於 Win32
SMTP = localhost
212
/^T\ chapter 10
; 只用於 Win32
sendmail—from = me@localhost.com
; 只用於 Unix ,你也可以加入參數 ( 内 定値 : ■sendmarl-t^').
;sendmaiLpath -
[Logging]
; 這個設定用於 example logging ,請參考 examples/READMEJogging
;loggjng,method = db
;bgging.di rectory = /path/to/log/d irectory
[Java]
;javaxlass.path = Aphpjava.jar
;java. home = c:\jdk
: java.library = o:\jdk\jre\bin\hotspot\jvm.dll
;java. library-path = .\
[SQL]
sqLsafe_mode = Off
[ODBC]
; …略
[MySQL]
; 讓你可以做持續的連結資料庫
mysql,a)[ow_persistent = On
213
Fr®eBSD 入 n 應用匚 [」 二
; 最大的持續連結,表示不限
mysql.max_persistent - -1
: 最大的連結(持續連結 + 非持續連結)。表示不限
mysql.maxjinks = -1
; mysql_cormect{} 預設使用的 port 。如困沒有設定,
; mysq1_connect () 將使用 $MYSQL_TCP_PORT 或者是 mysql
; 在 /etc/services 中的設定或是在安裝編輯時所設的 MYSQL—PORT
mysql.defaultjDort -
; MySQL 作本地連結時内定使用的 socket name
; 如果沒有設定,將以 MySQL 預設為主
mysqLdefault^sockst -
: mysqLconnectO 内定所使用的主機 ( 在安全模式中沒有作用 )
mysql.default_host =
; mysqLconnectO 内定的使用者(在安全模式中沒有 汗用)
mysql.default—user =
;mysql_connect{) 内定的密碼 ( 在安全模式中沒有作用)
; 請注意,將密碼存在這個檔中並不是 一個好 的方法
; * 任何 * PHP 程式都可以經由
; 'echo cfg_get—var( u mysql+defauIt—password ”) 來取得密 _
:所有使用者都將知道密碼
mysql-defaultjDassword =
214
chapter 10
[mSQL]
; 允許使用持續的運結資料庫
msqLallow_persistent - On
; …以各 種資料庫的設定都和 MySQL 差不多,故略
[Session]
; Handler 所使用儲存及取得的資料
session,save_handfer = files
;傳遞給 save—handler 的參數。這是 session 將存資訊的目録
session .save—path = /tmp
: 是否要使用 cookies
session. use_cookies = 1
;session 的名稱(用來作 cookies 名稱)
session, name = PH PS ESS ID
:啓動時是否要重設 session
session.auto_start = 0
;cookie 要存在幾秒,如果是 0 ,代表直到重新啓動瀏覽器
session, cookie」ifetime = 600
; cookie is 的有效路徑
session, cookiepath = /
215
reeBSD 入 n 鼸翮 r : r □ □ LJ u u
;cookie 的主機來源
session-cookie_domain -
;Handler 使用的 serialize data.
;php 是 PHP 標準使用的 serialize data
session.seria!ize_handler = php
; 是否要在 session 重設時啓動 ’garbage coHectton 1
session.gc 一 probability = 1
; 幾秒後 session 資料將被視為垃圾 ’garbage' 並回收
session,gc_maxlifetime - 1440
; 檢查 HTTP Referer 柬使外部所在的 URLs containing ids 無效
session, referer 一 check =
; 要從擋案中譖多少 bytes
session.entropyJength = 0
; 在這裡指定要建立的 session id
session. entropy_file =
: session.entropyjength = 16
;session.entropy_file = /dev/urandom
;Set to {nocache.private,public} to
;determine HTTP caching aspects,
session.cache Jimiter = nocache
; 存在暫存區中的 session 文件幾分鐘後到期
216
chapter 10
貢讎— 器~
session.cache expire =180
; 支援短暫的 sid support 柬相容 -enable-trans-sid.
session k yse_trans_sid = 1
urLrewriter.tags =
,T a=href J area-href J frame=srcjnput : =src I forn=fakeentry ,t
[MSSQL]
;Allow or prevent persistent links.
mssqi.allow_persJstent = On
; … MSSQL 和之前的資料庫差不多 I 故略 ...
; ... 以下略
; Local Variables:
; tab-width: 4
;End:
217
Fr®oBSD 入 H 應用 □ □ □ [!
10,5 .htaccess 應用
Apache 允許使用者在目錄下放置一個檔案來控制該目錄的存取 權限。
預設是使用 .htaccess 這個檔。你可以自行用文書軟體編輯一個檔名爲
.htaccess 的檔案來設定檔案所在目錄的權限。不過也要看 httpdconf 中關
於該目錄的 AllowOverride 是否有打開,如果有打開才可以用 .htaccess 的
擋案去覆蓋原本對該目錄的設定。
首先先編輯 / u S r / local / ap a di e /_ f 7 httpd ._ f ,在網頁目錄設定的區段
〈Directory _’/home/www_’>
Options Indexes FollowSymLinks MultiViews ExecCGI
AllowOverride AuthConfig
Order allow,deny
Allow from all
</Directory>
設定 AllowOverride 的部份’如果設爲 None 表不不允許使用者變更目
錄設定,設爲 AuthConfig 表示可以使用 AuthDBMGroupFile 、
AuthDBMUserFile J AuthGroapFile " AuthName " AuthType 等認證的功
能。所以我們設定爲 AuthConfig °
如果 Directory 的區段中, AllowOverride 是設成 All ,你就可以在 .htac¬
cess 檔案中設定所有選項,如 Options, AllowOverride # 0
實際應用
.htaccess 最常用的一個例子是用來將目錄設定需認證才能讀取。假設你要將某
個目錄設定需要密碼才能讀取,你可以在該目錄下編輯一個名爲 htaccess 的文字
擋,內容如下:
218
AuthName " 管理 專區 , ■
AuthType ” Basic"
AuthUserFile ■7var/adminDir.pw t _
require valid-user
其中請注意各參數的大小寫。
chapter 10
網頁伺服器
這裡我們設定儲存使用者帳號及密碼的檔
案是 / var / adminDir . pw 。
接著使用指令:
(S } # /usr/local/apache/bin/htpasswd -c /var/adminDirpw username
(S) New password: _入 username 的密碼
(r^) Re-type new password : 再輸入一次
來建立檔案 / var / adminDir . pw 敢加入使用者 username ,日後要再新增使
用者不必加參數 - c 。
接著使用瀏覽器連到該目錄時,將出現圖 10-1 :
匯 10-1
此時輸入你設定的 username 及密碼即可。
219
]
! g )— FreeBSD 入 H 麗用] □] 匚 「 :.
10.6 虛擬主機
我們可以在一台機器上設定多個主機名稱或 IP ,並依不同名稱來決定
其根目錄所在。當使用者連線到我們的主機時,每一個不同的名稱所看
到的根目錄都不同。
要達到這樣的功能,我們必須先確定主機有多個 DNS 名稱,這樣別人
打該主機名稱才會對應到你的 IP 。我們先來說在一台主機上使用多個
DNS 的範例。
假設你的主機 1P 是 123.456.78.9 ,上面有二個主機名稱,一個是
www.abc.com ,另一個是 www.cde.net °也就是說不管是使用上述哪一個
Domain Name ,都可以連到 123.456.78.9 。接著請編輯 httpd.conf ,在虛擬
主機的部份加入下列設定:
# 設定本機所使用的 tP
NameVlrtualHost 123.456.78,9
# 設定 www.abc.com 的管理者帳號、存放網頁的目錄及 log 所在
<VirtualHost 123.456.78. 9>
ServerAdmm jack@abc.com
DocumentRoot /home/www/abc
ServerName www.abc.com
ErrorLog /var/fog/abc_errorjog
Custom Log /var/Iog/abc 一 access Jog common
<A/irtualHost>
# 設定 www.cde-com 的資料
<VirtuaiHost 123.456.78.9 〉
220
chapter 10
ServarAdmin tom@cde.com
DocumentRoot /home/www/cde
ServerName www.cde.com
ErrorLog /var/log/cde 一 error log
Custom Log /var/log/cde_access」og .
<A/irtualHost>
做完上囬的設定後,就可以使用 /usr/local/apache/bin/apachectl restart 重
新啓動 Apache 了。如果你還有別的 Domain Name 指向 123.456.78,9 的
話’例如 www.fgh.org ,但你並未設定其 Virtual Host 資料, Apache 將以
第一個設定的 Virtual Host 資料爲主。在這個範例裡,當你打 www.fgh.org
會連到 www.abc.eom 的設定。
必須要注意的是,有些客戶端的連線軟體並不支援 Name-Based 的虛擬
主機,要支援 name-based virtual host ,客戶端必須送出 HTTP 的標頭 ,也
就是瀏覽器必須支援 HTTP/K1 。 請放心 ,我們常用的 IE 、 Netscape 、 lynx
都有支援。
10.7 MRTG 流量分析
如果您想要知道網站流量的使用情形,我們可以安裝 MRTG 這套軟體
經由網頁來監看網路流量。 MRTG 會去收取 SNMP (Simple Network
Management Protocol) 所產生的寶料,因此所要記錄的機器必須要安裝
SNMP 。在你的主機上安裝 MRTG 後,你不僅可以收集自己的流量資
料,也可以收集區域網路上其他可以接收到的 SNMP 資料。
221
]
〕:^).FraoBSD 入 n 歷 m] □ □ □ 1
10.7.1 安裝 SNMP
我們使用 ports 來安裝 SNMP ■
(^) # cd /usr/ports/net/net-snmp
(S) # make install clean
編譯了一陣子之後會出現要我們按任意鏈繼續 :
-Press return to continue-
System Contact Information (root @): 輸入你的 E-mail
System Location {Unknown): 輸入機器所在位置
Location to write logflle {/var/log/snmpd.log }: 輸入 iog 檔位置
Location to write persistent information (/var/ucd-snmp ): 要存放 smnp.conf 的目錄
安裝完成後執行 /usr/Iocal/etc/rc.d/smnpd.sh start 來啓動 snmpd * 如果出
現錯誤則再進入下列步驟:
cd/usr/local/etc/rc.d/ ,將 snmpdsh 原本的內容刪除,並加入 F 列這一行:
/usr/locaf/sbin/snmpd
接著再執行 /usr/local/etc/rc,d/snmpd,sh 便可啓動 SNMP °
222
£Z\ chapter 10
網頁同服器
10.7.2 安裝 MRTG
我們使用 ports 來安裝 MRTG *
#cd /usr/ports/net/mrtg
(r¥^ # make install
接著要產生 MRTG 的設定檔
# cd /usr/local/etc/mrtg
(rP?) # rehash
# cfgmaker public@alexwang.com >mrtg.cfg
這裡的 public 是 community name ,預設是 public ,如果你使用錯的
community name ,你可能會從要記錄的設備上得到錯誤回應。而
alexwang . com 是你所要記錄的主機位置。 inrtg . cfg 就是所要產生的設定檔
名。 II
如果您想要記錄多個主機,只要在 ^ fgmaker 時多加入主機名稱即可,
例如:
# cfgmaker public@alexwang.oom public@dns1 .alexwang,oom >mrtg.cfg
這樣就會同時記錄上面二台主機的流量了。
產生基本的設定檔後,我們可以再編輯剛才產生的設定檔 ee Hirtg . cfg ,在檔案
開頭的部份加入一些客製化的設定:
# 如果要使用中文的 MRTG 則加入下面這一行
Language: big5
223
FmBSD 入 n 應用
□
# 設定你的 MRTG 要放在哪個 @ 録 * 應該要放在網頁可以
# 連結到的 地方, 我的網頁根目錄是 /home/www * 所以我將
#MRTG 放在下面的目錄。
WorkDiR:/home/www/mrtg
#預設的 MRTG 所產生的圃時閩是由右到左
# 我喜歡由左到右,故加入下面 這一行
Options □: growright
接著請建立一個你在 mrtgxfg 中設定的 WorkDIR 的目錄:
# mkdir /home/www/mrtg
然後使用指令 indexmaker 來建立 MRTG 的首頁:
(^) #indexmaker -title _ 流量統計 ' , r " -output /home/www
/mrtg/index.html mrtg.cfg
這裡的參數 -title 是該 index.htm] 檔的 title , -r 是 index,html 要去找圖的
相對位置,而 -output 就是要輸出的檔案位置,預設是 stdk>( 通常指的是螢
幕)。
輸出的擋案 index 上 tml 你也町以使用其他的網頁編輯軟體再去修改美化
它。接下來要將 MRTG 的一些圖片檔複製到 mrtg 的目錄裡:
(^) # cd /usr/ports/net/mrtg/work/nnrtg*
# cd images
(S) # cp * /home/www/mrtg/
最後啓動 mrtg :
224
0 ~
chapter 10
網頁伺服器
(^) # /usr/local/bin/mrtg /usr/loGal/etc/mrtg/mrtg.cfg
第一次執行上面的指令可能會有一些錯誤訊息,不要理它,再多執行幾次就好
了。沒問題之後,使用指令 crontab - e 來把上述指令每5分鐘執行一次,加入下
面這一行:
5,10,15,20,25,30,35,40,45,50,55
現在你可以使用 http :// yoiirserver/mr
裝過程的暫存檔:
# cd /usr/ports/net/mrtg/
(r^) # make clean
/usr/local/bin/mrtg /usr/local/ato/mrtg/mrtg.cfg
_ tg 來連去看看。最後別忘了移除安
10.8 伺服器管理
10.8.1 apachectl
這是一個管理 Apache Server 的工具
參數
說明
start
啓動 Apache Server
stop
停止 Apache 服務
restart
重新啓動 Apache
startssl
啓動具 SSL 功能的 Ap
]ache Server
範例: / usr / local / apache / bin/apachectl startssl
225
PreeBSD 入 P1 鼸用 □ □
10.8.2 ab
這是用來測試 Apache 效能的工具。你可以針對某個 URL 來模擬出連續的連線
請求(不限本地主機),並設定同時間要模擬多少連線。
參數 說明
-0 requests 要做多少次連線請求, requests 爲次數
-c concurrency 同時有多少個連線, concurrency 爲個數
-t timelimit 最多等待回應的秒數
-p postfile 要以 POST 方法連線所欲送出的參數檔案。 postfile
爲存放參數的檔案名稱。
例如,我要對自己的機器中的 / cgi - binAestxgi 作測試,模擬1000次請
求,每次最多同時20個連線,只要在命令列執行指令:
(S) # /usr/local/apache/bin/ab -n 1000 -c 20 http://127,0.0.1/cgi-bin/test.cgi
等了幾秒之後出現:
This is ApacheBench, Version 1.3d <$Revision: 1.58 $> apache-1.3
Copyright (c) 1996 Adam Twiss, Zeus Technology Ltd,
Copyright (c) 1998-2001 The Apache Group,http://www.apache.org/
Benchmarking 127.0.0.1 (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
226
chapter 10
網頁伺服器
Completed 600 requests
Compteted 700 requests
Completed 800 requests
Completed 900 requests
Finished 1000 requests
Server Software; Apache/1.3,22
Server Hostname; 127,0.0,1
Server Port: 80
Document Path: /cgi-bin/test
Document Length: 18307 bytes
Concurrency Level: 20
Time taken for tests: 51.911 seconds
Complete requests: 1000
Failed requests: 0
Broken pipe errors: 0
Total transferred: 18520000 bytes
HTML transferred: 18307000 bytes
Requests per second: 19.26 [#/sec] (mean)
Time per request: 1038.22 [ms] (mean)
Time per request: 51.91 [ms] (mean, across all cent requests)
Transfer rate: 356.76 [Kbytes/sec] received
Connnection Times (ms)
min mean[+/ , sd] median max
Connect: 0 7 38,2 2 329
Processing: 338 1022 133.9 1003 1774
227
fr««BSD 入門應用
Waiting: 223 1011 136.5 993 1774
Total: 338 1029 121.7 1006 1774
Percentage of the requests served within a certain time (ms)
50% 1006
66% 1026
75% 1051
80% 1074
90% 1175
95% 1265
98% 1347
99% 1545
1 00% 1774 (last request)
您可以增加最多同時連線數目及連線次數,操看看你機器的上限在哪
裡。
還有更多的參數,詳細用法請 man -M / usr / Iocal / apache/man ab 0
228
chapter 10
網頁伺服器
10.8.3 壓箱備份 log 植
隨著使用人數的增加,網站的 log 檔可能會越來越大,我們可以使用
FreeBSD 內定的 newsyslog 來把舊的 iog 備份起來。在 newsy slog 中,我
們可以指定要備份多少個 log 檔,超過之後會自動刪除最舊的檔案。
首先編輯 / etc / newsyslogxonf 加入下列二行:
/var/log/apache 一 accessjog 644 7 * $W0D1 Z
/var/log/apache 一 error_log 644 7 * $W0D2 Z
以上二行的意義是將 / var / log / apache _ access _ log 這個檔案做備份,備份
後的檔案名稱像這樣 apache „ accessjog ,0 ,gz 0 備份後該檔案的權限是
644,最大的數字到7,也就是最多八個檔案,不限制檔案多大時要備
份,選在每週日半夜1點時備份,並將該檔以 gzip 壓縮。
229
FraeBSD 入 門 廳用 □ □
230
chapter
郵件伺服器
FreeBSD 入 P1 應 «□ G [
11.1 槪論
這裡我們將介紹使用 FreeBSD 來作爲 Mail Server ^做爲一台 Mail
Server ^我們要設定的是最少要做到可以正常使用 POP3 及 SMTP 來讓使
用者收發信。
傳統上, SMTP 在接受使用者寄信時,並不須經過身份認証,任何人都
可以使用你的主機來製造垃圾信。因此 FreeBSD 內定的 Sendmail 是不接
受 SMTP 寄信的。而一般的 ISP 業者大多是以控制連線來源的方式,禁
止非允許網域的使用者 RELAY 。但如果我們以控制連線來源的方式,便
無法在其他非允許的 IP 位址使用 SMTP ,這對於想要任何地方都可以發信
的人+分不分便。因此,本章裡我們將介紹如何讓使用者透過 FreeBSD
使用 SMTP 身份認證的功能來寄信,讓要使用諸如 outlook 以 SMTP 寄信
的使用者必須先通過本機的身份認證。
另外,你也無法在別的電腦使用收信軟體來經由 POP3 收信,因爲預設
並未裝設任何 POP3 軟體。
所以我們這裡要做的就是設定 sendmail 成爲可以使用 SMTP 來寄信,
但又可以兼顧避免成爲垃圾中繼站。再來是安裝 POP3 軟體,設使用者可
以經由 POP3 協定來收信。
232
chapter 11
郵件伺服器
11.2 具身份認證的 sendmail
本文參考自中央研究院計算機中心張毓麟先生所發表的「具身分認證的郵
件傳送系統」,該文件的網址是11即://130咏评31.31111€16(11!.加/11011011§^111811^611<1-
mail - auth 。張先生對於在 FreeBSD 系統上建立安全的郵件伺服器有多篇文
章,您耵以自 http :// beta . wsl , sinica - edu _ tw / 作 lchmg / Email / index_htmI 取得更多內
容。
11.2.1 安裝 Cyrus SASL
SASL (Simple Authentication and Security Layer ) 可以讓一些通訊協定
(例如 SMTP 、 IMAP 等)具有身份認證的功能。 Sendmail 自從 8.10 就支援
SASL 的功能。目前 cyrus-sasl 版本是 cyrus - sasl -1.5,27 ,tangz 1 我們可以
ftp 到各大 FTP 站台的 distfiles 目錄下去取得最新版的 cyms-sasl 或從本書
光碟中取得。取回後以下列指令安裝。
# tar zxf cyrus-sasl- 1 .5.27,tangz
(r^} # cd cyrus-sasl-1.5.27
(^) # ./configure
C$) # make
# make install
# cd /usr/lib
(♦) # In -s /usr/local/lib/sasl .
f^) # In -s /usr/local/lib/libsasl*.
(^) # echo^pwcheok methodipasswd'Vusr/lib/sasl/Sendmail.conf
233
_ FreeBSD 入 PI 廳用 ] □ □ □ □] 一
11-2.2 安裝 Sendmail
在安裝 Sendmail 之前,如果系統中正在執行舊版的 Sendmail ,請先使
用以下指令將它 停掉:
( r ^) # kill -9 cat / var / run / sendmail . pid|head -1'
接著請到 www . sendmail.org 去下載最新版的 sendmail ,您也可以在光碟
二的 / ports/distfiles 目錄中找到 Sendmail 8.12.2 。 Sendmail 自 8.12.0 版起,
需要先建立一個使用者 smmsp 及所屬群組供 Sendmail 使用。而 FreeBSD
自從4,5 RELEASE 起己經內建了該使用者,如果你使用的是 4,5-
RELEASE 以前的版本,請先編輯 / etc/group 加入下面一行:
smmsp ;*:25:
再來增加使用者,執行 vipw 並增加下面一行:
smmsp :*:25:25::0:0 :Sendmail user :/ var / spool / clientmqueue :/ sbin/nologin
將抓同來的 sendmail .8.12 J.taivgz 放到 / tmp 底下,並以下列指令解 壓縮:
# tar zxvf sendmail . B . 1 2 . 2 . targ2 :
接著 ee /tmp/sendmail-8,12;2/devtooIs/Site/site + config.mc 建立擋案並加入
下列 內容:
PREPENDDEFt'confMAPDEF, '-DMAP_REGEX')
PREPENDDEF{'confOPTiMlZE , > , - 0Z>
APPENDDEF{ , confENVDEF , l ^DTCPWRAPPERS -DSASU)
APRENDDEFf'conf sendmaiLLIBS', 、-] wrap - Isasl ’}
APPENDDEF( confLIBDIRSV '-L/usr/local/Hb')
APPENDDEF('conflNCDiRS T , 、 -l/usr/iocal/include_)
chapter 11
郵件伺服器
完成後就可以開始安裝 Sendmail 了
® # cd /tmp/sendmail-8,12.2
# sh Build -c -f/tmp/sendmail-8-12 ( 2/davtool$/Site/site.config.mc
(r^) # sh Build install
爲了要讓本地的使用者不必經由身份認證使用 SMTP ,還須再做下列設定:
(^) # cd /tmp/sendmaih8, 1 2.2/obj*
(S) # cd mail .local
(r^) # make force-install
# chown root /usr/tibexec/mail,local
# chmod u+s /usr/libexec/maiUocal
接下來編輯 sendmail 設定範本檔案以便產生出具有身分認證功能的
sendmaiLcf 設定檔,請以下列指令執 行:
(^) # cd /tmp/sendmail-8.12.2/cf/cf
# cp genenc-bsd4.4.mc MYCF.mc
# cd ../feature
# cat access_db.m4 » ../cf/MYCF.mc
# cat delay_Ghecks.m4 » ../cf/MYCF.ma
# oat virtusertable.m4 » .,/cf/MYCF.mc
(^) # cd ../cf
# cat » MYCF.mc
TRUST 一 AUTHJVfECHf LOGIN PLAIN,)dnl
defina('confAUTH_MECHANISMS , , ’LOGIN PLAIN T )dnl
235
❹ eBSD 入 P! 應用 □ □ ^
A D (同時按 Ctrl+D)
® #sh Build MYCF.cf
(*♦) # cp MYCRcf /etc/maif/sendmaif.cf
#cd /etc/maiJ
# cat > access
127,0.0.1 RELAY
< 本機的 RELAY
A D ( 同時按 Ctrl+D)
# touch virtusertable
# touch aliases
編輯 / etc/maiJ F 的檔案,新增一個名爲 local - host-names 的檔案,裡面塡入
localhost 以及機器的完整名字(如 maiLabc . com ) ,這樣一來由本機發信時便不
需再一次做使用者認證。接著,再新增一個檔名爲 relay^domains 的檔案塡人
本地的 domainname ,例如 mydomain.com ,當收到信的收件者不是給 mydo -
mam.com 時便會拒絕 。 然後將這些檔案做成 scndmail 能接受的 DB 格式:
(r^) # makemap hash access.db < access
(S> # makemap hash virtusertable.db < virtusertabJe
# newaliases
安裝完後要把以下檔案權限改成 這樣:
十 xr-sr-x root smmsp /usr/sbin/sendmail
drwxrwx — smmsp smmsp ... /var/spool/clientmqueue
drwx -
root
wheel
... /var/spool/mqueue
—「 ■■ 「一
root
wheel
... /etc/mail/sendmaiLcf
root
wheel
... /etc/mail/sybmit,cf
236
請使用 T 列指令來修改上述檔案的權限:
chapter 11
丽 MM 1 T
# chown smmsp.smm
sp /var/spool/client
mqueue
# chmod 770 /var/spool/clientmqueue
(^) # chown root+wheel /var/spool/mqueue
# chmod 700 /var/spool/mqueue
# chown rootwheel /etc/mail/sendmail.cf
# chmod 444 /etc/maii/sendmail.cf
# chown root .wheel /etc/mai I/submit, cf
# chmod 444 /etc/mail/submit.cf
這樣就完成了 ° 您可以執行 sendmail - dO . I -bv root I grep SASL 因該會
出現 SASL 的字樣,表示己可認証。或者在啓動 Sendmail 之後,執行 td _
net localhost 25,再打 ehlo localhost ^ 我們應該看到一堆250-開頭的訊
息,其中有一行 250 -AUTH LOGIN PLAIN 就代表 Sendmail 己經具有身份
認證的功能,此時請輸入 quit 結束。萬一沒有出現,請閱讀 / var / log / mail -
iog 裡面的訊息可以知道錯在哪裡。
最後以 / usr / sbin/sendmail -bd - q 30 m 來啓動 Sendmail 。如果我們希望在
一開機便啓動 Sendmail ? 請在 / etc / rc.conf 中加入下面這一行:
sendmail enable= ,, YES H
237
FreeBSD 入鬥廳 用口 ]
11.2.3 Client 端的設定
微軟的 outlook 由 4.0 版開始支援發信時身分認證功能,只要在 outlook
的設定裡面將『外寄郵件伺服器需要查驗身分』的選項打勾就可以了。
Stepl . 選取『工具』功能表的『帳號』選項:
Mi 1-1
Step 2 .選取帳號選單中的『內容』 按鈕:
W 鰣 IK.
娜 \mm 1 目鋒
新咖 ►
戶 網^ 由 1
cmmmm ip 件 liwba 用的
內邮
kSIKSST
屋入
■卿…
MM
漏 n‘2
238
chapter 11
~ 郵件伺服器
Step 3 .將『外寄郵件伺服器需要查驗身分 j 功能項打勾
叫 3
按確定鈕回到 outlook 中,即可使用身分認證功能發信。
11.3 POP3 設定
POP 3 的設定很簡單,只要選一個喜歡的 pop 3 軟體,以 ports 安裝完後
再做一些設定就好了。在這裡我選用 popa 3 d :
# cd / usr / ports / ma * l / popa 3 d
# make install clean
接著編輯 / etc / inetd . conf ,找到 pop 3 的部份,將開頭的#拿掉後,並加
以修改如下:
BSD API 應用 □
#
# example entry for the optional pop3 server
#
pop3 stream tcp nowait root /usr/!ocal/libexec/popa3d popaSd
接著重新跑 inetd 即可:
(^) # kill -HUP 'cat/var/run/inetd.pid'
現在我們就可以使用 outlook 等軟體來收信看看。
11.4 虛擬郵件主機
如果我們想要在同一台機器上收多台主機的信件,或者想要在-台主機
上設定可以"收 U ”發” 信件的虛擬帳號(如果只要收,耵以簡單的設定
aliases 即可),我們可以經由虛擬主機的設定來達成。假設有二個 Domain
Name ,一個是 abc . com ,另一個是 oldxde . com 。這份文件包含了二種設
定方式:一個是讓二個 domain name 收到的信對映到一台機器上的使用
者,也就是說不能有不存在的虛擬使用者;另一個設定是讓你可以設定
不同的虛擬使用者對映到不同機器 t 的任何使用者。不管我們要做哪一
種設定,都必需要先設定 DNS 。
請注意’這份文件中的設定並不會讓你可以擁有一■個眞正的虛擬帳號,
因爲這裡是將虛擬帳號對映到一個存在的郵件位址。使用這份文件的設
定和設定 / etc / aliases 最大的不同在於設定 aliases 只能讓虛擬的帳號收
信,而無法寄信。
240
11.C1 DNS 設定
a chapter 11
郵件伺 flgir
爲了要讓寄出去的信知道要往哪一台主機上送,必須要先設定 DNS 。假
設我們現在已經有一台設定好 DNS 的主機, hostname 是 abc . com 。我們要讓
abc . com 處理 oldcde ^ com 的信件的話,最簡單的方式就是將 maiLcde.com ^
向 abcxom (CNAME records ) ’也就是二個 doamin 有同樣的 IP 。不過這樣一
來, old . cde . com 就不能獨立存在了,也就是說不會有一台機器的 hostname
名爲 oldccte . com ,並提供 FTP 、 wwwC 也可以有虛擬主機” telnet _ 服務。
因此,我們要使用的是改變 DN $ 的 MX record °設定只有處理該主機的
郵件時’才將 old . cde . com 轉向 abc _ com 。請在你的 DNS 中加入下列設定:
oldxde.com IN MX 10 abc.com.
完成後要重新讀設定檔並等一段時間設定才會在網路上生效。接著我們
就可以來做 sendmail 的設定了。
11 .4.2 對映到同一台機器的真貢使用者
第一 種設定的使用時機,例如你的公司主機原來是 mailcdacom ,現在換成
了 abc.com ^你希望讓原本的使用者 jack @ mail . cde.oom 和新的 jack @ abc.com 都
能由 jack @ abc.com 來收信。這種設定很簡單,只要編輯 / ete / mail / rclay-domains
及 / etc / maMocal-hosmames 這二個檔案,加入要增加收信的主機名稱即可。以
本例而言,除了那二個檔案原本的內容外
辦增加 一行:
maif.cde.com
這樣了+管是原本 mail . cde . com 或是眞正主機名稱 abc . com 的信件,都
可以由 abc . com 的相同的使用者收信。
241
酽 reeBSD 入 M 塵用 □ □
11 A 3 司以擁有虚擬使用者
第二種設定是讓我們可以設定一個虛擬的帳號,並且可以利用它來送
信。這個設定是經由編輯 / etc / mail / virtusertable 來 達成。 相同的’我們在
abccom 這台主機中設定它的 virtusertable °我們以卜列二個 virtusertable 的
例子來說明,請注意,二個襴位間的空白是用 tab 鏈,而非使用空 白鏈:
範 例一:
joe@mailxde.com jschmoe
jane@mail.cde.com jdoe@othercompany.com
@mail,cde.com jschmoe
上面的例子中,凡是寄給 joe @ mail . cde . com 的信都會送給本地使用者
jschmoe 。而以 joe @ rmiil . cde . com 寄出的信收件人所看到的寄件人一樣是
joe @ maiLcde . com ,如果在寄信時要身份認證的話’ 必遍 使用 jschmoe 的
帳號及其密碼。接下來,寄給 jane @ irmiLcde , com 的信會送給』( 106 @ 0 出已卜
company . com , 剩下來所有紿 maiLcde . com 的信都會送給本地 jschmoe 這
個使用者。
範例二:
joe@maitxde.com jschmoe
bogus@mail.cde,com errorinouser No sudi user here
list@maiLcde.com yourdomain-iist
cde.com % 1@othercompany.com
這一個例子中,第一行和範例一一樣,凡是寄給 joe @ maiLcde . com 的
信都會送給本地使用者 jschmoe 。而凡是寄給 bogus @ mail . cde , com 都會回
242
chapter 11
郵件伺服器
應沒有這個使用者。第三行如果是寄給 list @ maiLcdexom 的信,都會轉
給本地的 yourdomain - list 适個虛擬使用者 T 你可以在 / etc / aliases 中加入關
於 yourdomain - Iist 這個使用者的信要麼處理,怎麼設定別名。最後一
f 丁’凡是其他非上述二行使用者的信’都交由在 othercompany . com 這台
機器上相對映的使用者來處理。
你可以依照上面的範例來編輯你的 virtusertable s 完成編輯後,必須要
使用以下指令來將這些擋案做成 sendmail 能接受的 DB 格式:
# makemap hash virtusertable.db < virtusertable
(S) # newaliases
都完成後,我們就可以到別台機器使用虛擬帳號來試試收發信。假設我
們要使用的虛擬帳號是上述範例一中的第二行 jane @ rnail.cd exom J 以
outlook 中的設定爲例,所設定的 E - mail 仍然是 jane @ maiLcde . com ,如圖
11 -4 所示:
国1 M
所設定的 pop 3 及 smtp 主機也是 maiLcdexom °但是使用者及密碼是
243
q^lFiwBSD 入 忾 應坩 □ □ □
othercompanyxom 上的使用者 jdoe 及其密碼’如圖11 -5 所不:
在上 圖中, 如果 othercompany.com 在寄信時要身份認証,則上圖 中”外
寄郵件伺服器 Tl 的選項"我的伺服器需要驗證”必須打勾。
如此一來您就可以使用 jane @ mail . cde.com 來收發信’而且在別人收到
信時會顯示寄件人是 jane@maiLcdexoni 。
1 1.5 Open Web Mail
Open Web Mail 是一套由國人開發的多國語 Web Base 的郵件軟體。現在
最新的 ports 中已經將 opebwebmail 加入了,位置在 / usr / ports / mail / openweb -
maii ,加入的日期是 2( X )2 年2月。如果你是使用 4.5 -STABLE 以後的版本,
就可以直接用 ports 來安裝了。不過 ports 預設的網頁目錄位於
/ usi / local / htd OCS 中,可能不符合我們的需求,因此我們還是使用自己編譯。
244
11 - 5.1 系統需求
你必須先安裝具有 CGI 功能的 Apaoh.
安裝,那麼你的伺服器就具有這項功
CGI 的功能啓動。
e 伺服器,如果你是照本書的說明
能了,只要你有編輯 httpd . conf 將
爲了要有撿查附加檔案的功能,還要
可以在本書光碟二的 /ports/distfiles 目
檔案放到 /tmp 後,使用下列指令安裝
® #tar zxvf MIME-Base64-2.12.targz
® # cd IVMME-Base64-2.12
(r^) # perl Makefife.PL
(r^) # make
(S) # make test
# make install
爲了具有拼字撿查功能,必須安裝匕
安裝 MIME - Base 64_ 2 , I 2. tar . gz ,你
錄中取得這裡所需的所有檔案。將
($) # cd /usr/ports/textproc/ispell
(*>) # make install
另外,還要先安裝 libnet 這個 模組:
# tar libnet-1.0901 ,tar.gz
® #cd libnet-1.0901
chapter 11
郵件伺服器
pell ,言青以 ports 安裝
# perl Makefile.PL
(S) # make
245
gj FreeBSD 入門 廳_ 二 ] □匚 I
(^) # make install
現在已經做好事前的準備了。
11 3 . 2 安裝 Open Web Mail
您可以使用本書所附的 i.62 版或是到下列網址取得最新版的 Open Web
Mail 0
http://turtle.ee.ncku.edu.tw/openwebmail/download/
假設網頁根目錄在 Aiome/www 中,而在 apache 中所設定的 cgi-bin H
錄是在 /home/www/cgi-biri 中。將取得的擋案放到你的網頁根目錄去’並
cd 到你的網頁根目錄。執行下列指令以將取得的檔案解 壓縮:
# tar -zxvBpf openwebmail-1.62,tgz
解壓縮後會在 cgi-bin 中產生一個目錄爲 openwebmail J 存放 openweb-
mail 的主要程式:另外會產生一個 data 的目錄,在 data 目錄下也有一個
openwebmail 的目錄,該目錄存放 openwebmail 非 cgi 的資料(如圖片、聲
音等)。 我將 /home/www/data/openwebmail 的目錄搬到 /home/www/open-
webmail 。現在 openwebimil 的 cgi 程式位於 /home/www/cgi-bin/openweb-
mail 中,非 cgi 檔案位於 /home/www/openwebniail 中’我們要記住的就是
這二個目錄的位置。接下來修改權限:
# chown -R root,mail /home/www/cgi-bin/openwebmail/
(^) # chmod 750 /home/www/cgi-bin/openwebmail/etc
# chmod 770 /home/www/cgi-bin/openwebmai l/etc/sessions
246
(^^) # chmod 770 /homB/www/cgi-bin/openw^bmait/etc/users
# chmod 4755 /usr/bin/suidperl
chapter 11
最後要修改 / home / www / cgi - bin / openwebmail / etc/openwebmailxonf ,更
改你的參數設定,尤其是路徑。基本要修改的地方有:
# ow_cgidir : openwebmaif cgi 程式的目錄
ow_cgidir/home/www/cghbin/openwebma[l
轉 ow_cgiurl : 以 openwebmail 的 eg 〗 程式目錄所在的 url
ow 一 cgiurl /cgi-bin/openwebmail
# owjitmldir : openwebmail 非 cgi 的目錄
ow_htmldrr /home/www/openwebmail
# ow_htmlurf : 非 cgi 程式所在的 url
ow—htmlurl /openwebmail
修改完後就可以使用 http :// yourhost / cgi - bin / openwebmail/openwebmaiLpl
來連到登入的首頁,請使用系統中的使用者帳號及密碼登入,登入後畫
面如圖] 1-6 所示。
■ 11-6
247
Fr«eBSD 入 PI 廳用 □ □ I] G
248
■ ■
Fr«eBSD 人 n 鼸用 □ □ □ □ □
12.1 DNS 槪論
DNS (Domain Name Service ) 是網域名稱服務的縮寫,其主要目地疋在
解決機器的網域名稱 (Domain name ) 與 IP address 的對應問題。在網際網
路上,爲了要連線到其他電腦,必須經由 IP 位址來判斷電腦所在位置,
例如 14(1115.83,240 就是一個 IP 位址。但是這一長串的 IP 並不好記’因
此出現了 Domain Name 來爲 IP 取一個比較好記的名字’如
bbimgt . nciLediUw 。 Domain Name 的架構是一個樹狀結構’例如上述的
bbs . mgt . ncu . edu . tw 所代表的就是台灣 ( tw ) 的中央大學 ( ncu ) 管理學院
( mg t ) 所屬的電子佈告攔伺服器 ( bbs ) 。而 DNS 伺服器的功用就是將你輸
入的 Domain Name 轉成 IP ,或者是將查詢 IP 並轉回所對映的 Domain
Name °
一般而言’ DNS 伺服器可以分爲三種,主要名稱伺服器 ( Primary / mas ¬
ter Server ) ,次要名稱伺服器 ( Secondary/slave Server ) 5 及快取名稱伺服器
(Cache only Server ) ^主要名稱伺服器是管理所屬網域所需名稱對映設定
的主要伺服器’如果您自己有一個網域,必須經由設定主要名稱伺服器
來管理網域中 IP 所對映的名稱。而次要名稱伺服器是取得主要名稱伺服
器的資料, 用以 在主要伺服器過於忙錄或停止服務時備用。每個 DNS 伺
服器都會將所查詢過的 Domain Name 建立快取 ( cache ) ’以供下次查詢時
能快速回應。每一個伺服器都會設定該 Domain Name 快取的資料要保留
多久,以免得到過時的資料。
DNS 有分爲正解 ( forward ) 及反解 ( reverse ) 。正解就是把 Domain Name
轉成 IP ,而反解是將 IP 轉成 Domain Name 。 FreeBSD 內建有 DNS 的服
務,只要先設定 / etc / namedb / 下的檔案即可打開該服務°
250
chapter 12
dnsMIHT
那要如何得到一個 Domain Name 呢?以學校而言,每個學校都有自己
的 Domain Name 及 IP 範圍,如果你只有—台機器,想要爲它申請—個
Domain Name ,您並不需要自己架設 DNS 。只要向學校計算機中心或是
管理該 IP 的單位提出申請正反解即可。如果您想爲自己的系所架設 DNS
以管理該系的 IP ,必須先向上層 DNS (也就是校方計中)申請授權,讓針
對您系所的查詢都交由你的 DNS 伺服器處理。 DNS 的架構是樹狀結構,
以查詢 bbs , mgLncu . edu . tw 而言,管理 tw 網域的伺服器會告訴你管理
ncu . tw 的伺服器在哪裡,而 ncu . tw 會告訴你管理 mgt . ncu . edu . tw 的伺服器
在哪裡’最後 mgt . ncu . edu . tw 發現自己有 bbs . mgt 的資料,並傳回其 ip 。
如果您自己要申請一個 Domain Name ,你可以到 www . twnicxom.tw 去
申請一個 ‘tw 的名稱,如 abcxoiiLtw ;或者到 www . register.com (國外一個
不錯的申_網站)的去申請各國的 Domain ,如 abc.com 。當您去 TWNIC
申請網域名稱時,你必須要有自己的 DNS 伺服器,並在 TWNIC 設定
DNS 伺服器的位址,接著再由您的 DNS 伺服器來做解析。如果您是在
www . register.com 申請網域名稱,國外的代理申請者會幫你做 DNS 的服
務,你只要在他們的網頁設定你想要的名稱及所對映的 IP 即可,而且不
限個數,當然你也可以自行架設 DNS 伺服器。
如果只有一個固定 IP ,您不需要架設 DNS ,除非我們管理一個網域中
多個 IP 才有必要。再者,如果您是固接式 ADSL 或是其他由 ISP 提供的
連線方式,你的 DNS 反解必須要由上層 ISP 授權由您自行管理你的 ip ,
這樣你的設定才會生效,否則應該請 ISP 幫你做反解的設定,也就是告訴
ISP 你的 IP 要對映那一'個 Domain Name 。
對於 DNS 有初步概念之後,我們接著說明如何設定 FreeBSD 成爲一台
DNS 伺服器。我們以下列的資料做爲設定的依據:
251
]
」; _ 0 iFr 8« BSD 入 門 廳榭] □ 」公
網域: abc.com
IP : 123.44.55.224 〜 123.44.55.231 (八個 IP )
Netmask * 255.255.255.248
首先,到 / etc/namedb 的目錄 F :
# cd /etc/namedb
(r^) # sh JniakeJocalhDst
這個指令將產生一個名爲 localhost . rev 的檔案,該檔案是用來反解
localhost 的設定檔。接著請編輯 named . conf 來定義我們要設定的資料。
12.2 named.conf
我們先在原本 / etc / namedxonf 文件的最下方加入下列設定,該檔中行首
以//開頭者爲 註解:
//設定要正解的網域是 abc.com , DNS 伺服器是 master server
//並到 abc.fwd 這 _ 個檔案中去找 abc.com 的設定 Q
zone _ f abc.com rt {
type master;
file ’’abc.fwcT;
};
// 下面是反解的資料,設定要反解的 IP 為 123.44.55.224 到 123.44.55,231
//設定關於該 IP 範團皮解的設定檔為 abc,rev
zone "224-29.55.44_123.irvacidr.arpa" {
252
/^\chapter 12
type master;
file "abc.rev";
};
接下來就耵以新增並編輯 abciwd 這個正解檔垃 abc . rev 反解擋。
如果你的 IP 的範圍是整個 Class C ,子網路遮罩 ( Netmask ) 爲
255.255.255.0 ^或是其他經由切割過的 IP ,關於上面反解資料 Z01ie 那一
行的設定會有點不同。
以 123.44.55.0 爲例,備設我們具有完整 Class C ,也就是 123.44.55,* :
zone ”55.44.123. in - addr . arpa T _
NetMask :255.255.255.0
若是 Class C 分成 2 份,每一段有 128 個 IP
zone "0-25.55.44.123 Jn - addr . arpa M
zone 11 128-25,55.44.123, in - addr.arpa
NetMask :255.255.255.128
0-25 是第 i 段
128-25 是第 2 段
若是 Class C 分成 4 份,每一段有64個: [P
zone '’0-26.55.44, 123 ■ in - addr . arpa ” ; 0-26 是第 1 段
zone ”64-26.55.44.123, iii - addr . arpa IT ; 64-26 是第2段
zone IF 128-26*55.44.123. in - addr . arpa r, ; 128-26 是第 3 段
zone M 192-26.55.44.123- in - addnaipa 11 ; 192-26 是第 4 段
NetMask :255.255.255.192
: Fre«BSD 入 M 應 W:] □ □ □
12.3 正解檔設定
我們可以複製 localhost.rev 來加以修改’以下是 abc.fwd 的內容’檔案
中 Y 之後爲註解:
$TTL 172800
@ IN S0A abc.com. root.abc.com.(
2001080301 : Serial
172B00 : Refresh
900 ; Retry
3600000 ; Expire
3600 ) ; Minimum
IN
NS
abc.com.
iN
A
123.44,55.225
WWW
IN
A
123.44,55,226
ftp
IN
CNAME
WWW
mail
IN
A
123.44.55.227
mail
IN
MX
10 www.abcxom
IN
MX
20 mait.def.net
接著我們針對檔案中的每.一行加以解釋’您可以依自己的需要來增刪資
料。這個檔案的內容格式爲 Lname ] [ ttl ] [ class ] [ type ] [ data ] °
[ name ] 可以是網域名稱或是主機名稱,如果不寫的話表示與上一個設
定相同。
[ ttl ] 是資料要存活的時間 (time to live ) ’也就是 cache server 將保留在它
的 cache 中的時間。如果不寫的話表示和 S 0 A 中的設定相同。
254
chapter t2
DNsmm^
[ class ] 指定網路的類型,應該使用 IN 代表 internet 。
[type] 設定該筆資料的型態,例如: MX , A , CNAME, PTR , NS 等。
[ data ] 代表這設定的資料要存多久,以秒數計算。172800爲二天。
@ IN SOA abcxom. root.abc.com .() 那一 行中, @ 代表網域名稱
abc.com ’ IN 表不爲 internet 的資料型態° SOA 後面接的是 abc.com ,表
示這台 abcxom 機器是 abc.com 網域中的主 要名稱伺服器。而
rooLabc.com 表示管理者的 Email 是 root@abcxom 。
Serial :這個設定的版本,這次修改的數字必須比上次的數字大,也就
是每次修改這個檔時,都要將這個數字提高,這樣別的伺服器才會將資
料更新。一般而言,我們會以日期加上幾位的數字來表示,如
2001082101 。
Refresh :這個數字是次要名稱伺服器要多久和主要名稱伺服器比對資
料並更新。
Retry ;如果比對失敗,要在幾秒後#向主要名稱伺服器查詢。
Expire :表示如果次要名稱伺服器一直連不上主要名稱伺服器,這筆資
料要多久無法比對便失效。一樣是以秒計。
Minimum * 表示別的快取伺服器可以將你的設定存放多久^
接下來的 IN NS abcxom. 表示將 abcxom 這個網域的 DNS 伺服器是
abc.com 這台機器。
IN A 123 .44.55 ,225 表不將 abc.com 這台機器的 IP 設爲 123, 桃 55,225 。前
面省略了主機名稱,表示設定的是@的庄機。 A 代表的就是指定 address 。
255
]
FreeBSD 入忾廳 □ □
WWW IN A 123.44.55.226 表示將 www.abacom 的 IP 設定爲 123.44.55,226 0
接著是 CNAME ,表示將 ftp_abc.com 這台機器設定爲和 www.abc.com
同一個 〖 P 。也就是這二個名字會使用同一機器°
MX 表示將 maiLabc.com 的信件交由 www.abc.com 或 maiLdef.net 來處
理,數字 10 及 2() 表示優先順序,數字小者 優先。 這裡的設定是將紿
mail.abc.com 的信件交給 www.abc.com 來處理,如果 www.abc.com 沒有
回應則交由 mail.def.net 來處理°
12.4 反解檔設定
如果您要設定 DNS 反解,則需要再新增並編輯 abc.rev 的檔案來設定,
也就是設定某一個 Domain Name 要對應到哪個 IP :
$TTL 172800
@ IN SO A abc , com. rootabc.corrL (
2001080301 ; Serial
172800 ; Refresh
900 ; Retry
3600000 ; Expire
3600 ) : Minimum
IN
NS
abc.com.
224
IN
PTR
UNKNOW.abc.com.
225
IN
PTR
abc.com.
226
IN
PTR
www.abc.com.
227
IN
PTR
mail.abc.com.
256
228
IN
PTR
UNKNOW.def.net.
226
IN
PTR
UNKN0W.abc.com,
227
IN
PTR
UNKNOW,abc.com.
228
IN
PTR
UNKN0W.def.net.
chapter 12
DNS 伺服器
和正解檔重覆的地方此略過,我們來
向 Domain Name ,如225 IN PTR a
abc . com 這台機器。
看 PTR 的部份。 PTR 就是將 IP 指
bc . com . 就是將 123.44.55.225 指向
12.5 最後的設定
正解檔和反解檔都修改好之後,請先編輯 / etc / reso 〗 vxonf ,在 nameserv
er 部份的第一行 加入:
nameserver 127.0.0,1
以 / usr / sbin / named 這個指令來啓動 DNS 的服務。如果有錯誤,請以
# tail /var/log/messages
來看錯誤訊息。如果不是第一次執行
接著就可以用 nslookup 來試試看你的設
named 就以 kill -1 來將它重跑
:定 0
# nslookup www.abc.com
® # nslookup 123.44.55.225
如果你沒有設定 / etctesolv . conf 的話,上面的指令並不會以你的機器爲
預設 DNS 伺服器,這時你可以使用下列指令來以 abc . com 這台機器爲伺
月 E 器,査詢 www . abc . com 的設定 r
257
]
FreeBSD 入 « 應坩 G □□口 [
(^) # nslookup www.abc.comabc.com
如果您要查詢 MX 、 NS 、 SO A 等記錄,也可以使用 nslookup 來查詢 ’
只要在查詢先 set type 即可:
# nslookup
Default Server: iocalhost, abc.com
Address: 127.0.0.1
> set type: MX
> mail.abc.com
Server: locelhostabc.com
Address: 127,0.0.1
maiLabc.com preference = 10, mail exchanger = www.abc.com
abc.com nameserver - e368.com
www-abc.com internet address = 123.44.55.225
abc.com internet address = 123.44,55.225
> set type=NS
> abc.com
Server: localhost.abc.com
Address: 127.0.0.1
abc.com nameserver - abc.com
abc.com internet address = 123.44.55.225
> set type=SOA
> abc.com
Server: localhostabcxom
Address: 127.0.0,1
258
a chapter 12
STns 伺服器
abc.com
origin =abc‘com
mail addr = root.abc.com
serial = 2002080301
refresh = 3600 (1H)
retry = 900 (15M)
expire =3600000 (5w6d16h)
minimum ttl = 3600<1H)
abc.com nameserver = abc.com
abc.com internet address = 123.44.55.2.225
> exit
所有設定都沒有問題之後,如果要在開機時就啓動 DNS 服務,請在 / etc / rc.conf
中加入 :
named enabie^'YES 1 '
259
FreeBSD 入 n_ 用 □ 」 _
260
FnwBSD 入 n 應用 □ □ □ □ □ □
□
13.1 槪論
這個部份我們將說明如何以 FreeBSD 做爲防火牆,介紹 FreeBSD 內建
的封包過濾功能。欲建立一台防火牆,就是要將一台機器放在二個網域
的中間,並經由它來做封包過濾的工作。因此我們必須先確定網路封包
能通過這台防火牆,再來設定要阻檔的規則。以 FreeBSD 作爲二個網域
中間的連接器,可以用路由器 ( router ) >閘道、或是橋接器的方式來實
作,再在該機器上設定防火牆的規則。當然,我們也可以只在一台單機
上設定防火牆規則,以取代原本只能監控 inetd 服務的 TCP Wrapper 。
我們舉二種最常被應用結合防火牆設定來保護整個網路的 方法, 一個是
NAT , 另一個是具封包過濾的橋接器。
13.1.1 NAT
所謂的 NAT 就是 (Network Address Translation ) ,它可以讓你在只有一
個 IP 的情形下讓多台電腦一起連上網路。舉個實例而言, 個公 司有三
+台電腦,卻只有八個 IP ,可以將每台電腦的 IP 設定爲 private IP ,再讓
它們經由 一台有 IP 的 NAT 伺服器連上網路即可。
Private IP 是 RFC 所定義的私人 IP ,這些 IP 不能夠直接在網際網路中
出現,所以必需經由 NAT 的轉換,將它們僞裝成是由 NAT 伺服器連向外
部網路。這些可以用的私人 IP 如下:
262
chapter 13
natHMWB
Class A 10.0.0.0
Class B 172.16.0.0
Class C 192.168.0.0
- 10.255.255.255
- 172,31.255.255
- 192+168.255+255
255.0.0,0
255.2550.0
255.255.255.255
我們只需在 NAT 何服器中做好設定’再將其他使用 private IP 的電腦設
定 gateway 爲該伺服器的 IP 即可。另外,我們也可以在伺服器中設定一
些防火牆的規則,來保全內部網路。
13,1.2 具封包過灞的橋接器
如果我們的網路中有多台不同網域的電腦,這些電腦都有它們的 ip 及
網路設定,我們可以將 FreeBSD 設定成爲橋接器 ( bridge ) ,讓這台撟接器
作封包過濾的工作。這種做法對於網域內其他電腦原本的網路設定不會
有影響,如果沒有設定任何防火牆規則,對它們而言幾乎不會發現撟接
器的存在。
我們也可以使用路由器來取代橋接器,但是路由器只能遶送二個不同網
域,而且設定比較複雜,因此,我會使用橋接器來做爲防火牆。
FreeBSD 內建有 ipfw 這個程式可以讓我們輕易的設定一個簡單的防火
牆,我們只要在 kernel 中加上一些設定就可以打開它。在這裡我們也將
簡單的介紹一些防火牆的語法,讓我們可以保護我們不想、不需要被外
界使用的網路服務。
在設定防火牆之前,有個觀念必須先釐清。防火牆並不能夠完全保護我
們的網路安全,防火牆只是限制我們 f 想公開的服務、限制已知的 IP 。
就算架了防火牆’沒有適當的管理也是枉然。
263
入 PI 應用 □ □ :J " □ ^
13.2 NAT
這裡我們假設使用二張網路卡,一張是對外的網卡’代號是 vrO ;另一
張是對內的網卡,代號 vrl 。以下的設定中請依您的網卡代號來加以修
改。當然,你也耵以只使用一張網路卡,將所有的電腦及對外網路都接
在-台 HUB 上,再利用 alias 的功能將一張網卡設定二個 IP 。
13.2.1 設定 kernel
請先在 kernel 中加入下列幾行,並重新編譯 kernel ,如果您不知道如何
修改 kernel , 請參考第三章「如何編譯核心」°假設要修改的 kernel 是
Aisr / sys / i 386/ conf / GENERlC ,先 cd / usr / sys / i 386/ conf / ’ 再 ee GENERIC 力0
入下列幾行 :
#防火牆
options IPFIREWALL
# 支援 nat
options IPDIVERT
# 下面 這一行 是預設允許所有封包通過,如果沒有這 一行’ 就必須在
# /etc/rc.firewall 中設定封包的規則 °
options IPFIREWALLJDEFAULT—TO—ACCEPT
# 下面這一行是讓你可以在 ipfw 中設定要記錄哪些封包,
# 如果沒有這一行,就算設定了要留下記錄也不會有 作用。
options IPF!REWALL_VERBOSE
存檔後,執行 T 列指 令以安裝新的 kernel :
264
chapter 13
# config GENERIC
® # cd ../.,/compile/GENERIC/
# make depend
($) # make
# make install
這樣子我們的核心就己經支援防火牆及 NAT 了。
13-2.2 設定 rcxonf
接著要修改 / etc / rcxonf 加入下列幾行,我們假設網路卡代號是 vr0 及
vrl ,請自行變更成您的辋路卡 代號:
# 對外網路的設定,假設 IP 是 123.4455.66
ifconfig 一 vrO=”inet 123.44.55.66 netmask 255 255.255,0*'
# NAT 的設定
ifconfig 一 vrl ="inet 192.168.0,1 netmask 255.255.255.0"
# 如果只使用一張網路卡的話,改用下面這一行
掛 fconfig 一 vrO 一 aliasO=,_inet 192.168.0.1 netmask 255.255.255.0"
gateway_enable= ,f YES lr
firewa!l_enable= ,r YES ,r
flrewall_type- H OPEN"
natdJnterface= r VrO ,1
natd_enabWYES"
265
FreeBSD 入 1*1 應用 □ □□□□:#
設定結束之後,重開機應該就可以設定其他電腦使用這台 NAT 伺服器
來連上網路了。如果不行’請先檢查 / etc/service 中是不是有下面這一
行:
natd 8668/divert
還是不行的話,就是還要再修改 / etc / rc.firewall 。我們在 / etc / rc.conf 中
設定 firewalUype ^ OPEN 11 ,如果是使用原本 / etc / rc.firewall 的話’這樣就
已經就已經驅動了 NAT 的功能,不然的話,請再看下列 firewall 的設
定。
13-2.3 設定 rc.firewall
爲了使 NAT 能運作,必須編輯 / etc / rc,firewall ? 另外我們也可以在
re.fire wall 中加入一些防火牆的設定’來阻擋一些機器或服務。先備份原
本的 rc.firewall ,再修改其內容如下:
#!/bin/sh
#清除所有的規則
/sbin/ipfw-f flush
#在此加入拒絶的規則
/sbin/ipfw deny log all from 61.55.121.1 to any
/sbin/ipfw deny log all from any to 61.55.121.1
#NAT
/sbin/ipfw add divert natd all from any to any via vrO
# 允許其他所有封包通過
/sbin/ipfw add pass all from any to any
266
mt
chapter 13
NAT 及防火牆
修改完後,執行 sh / etc / rc . firewall 就可以更新防火牆的設定了。其他關
於防火牆規則的詳細說明,請 inanipfw 或參考下一'節的說明。
13.2,4 client 端的股定
接者是 client 端方面,除了上述的 NAT 設定外,在其他電腦還要再做
一些設定。首先,你的網路架構應該如圖 13-1 所示:
連外網路
192.168
192 , 168 . 0.2
192 . 169,0 4
Conqtntrjtof/H ub
FreeBSD
m i3-i
其他的電腦設定方面,我們必須將其他電腦的 IP 設定爲 192.168. tXX 、
子網路遮罩是 255,255.255.0 ^ gateway 設定爲 FreeBSD 連到區域網路的網
路卡 1 P ’在此範例中是 1 92 J 68,0.1 。^後再設定你的 DNS 爲你 ISP 的
DNS 。
完成上述的設定後,我們就能享受以 FreeBSD 爲 NAT 上網了。
267
_ FreeBSD 入 flSS 用 ]]
13.3 防火牆
ipfw 是 FreeBSD 內建的防火牆指令,我們可以用它來管理進出的網路
交通。如果防火牆伺服器是扮演著路由器 ( gateway 例如上一篇中的 NAT
伺服器)的角色,,則進出的封包會被 ipfw 處理二次,而如果防火牆扮演
的是橋接器 ( bridge ) 的角色,貝 U 封包只會被處理一次。這個觀念關係著我
們以下所要介紹的語法,有的語法並不適用於橋接器。
我們會將 ipfirewall 的設定寫在 / etc / rc . fire wall 中’每一條設定都是以先
入爲主 (first match wins ) 的方式來呈現,也就是先符合的規則 ( rules ) 爲優
先。所有進出的封包都會被這些規則過濾,因此我們會盡量減少规則的
數量,以加速處理的速度。
在 kernel 中,關於防火牆的設定有卜列幾條:
#防火牆
options IPFIREWALL
# 下面 這一行 是預設允許所有封包通過,如果沒有這 一行,
# 就必須在 /etc/rc.firewall 中設定封包的規則 □
# 這條規則内定編號是 65535 ,也就是所有規則的最 後一條
# 如果沒有加 這一條 規則,内定就是拒絶所有封包,
# 只允許規則中允許的封包通過。
options IPFIREWALL—DEFAULT_TO 一 ACCEPT
# 這一行是讓你可以在 ipfW 中設定要記錄哪些封包,
# 如果沒有這 一行, 就算設定了要留下記錄也不會有作用。
options IPRREWALLJ/ERBOSE
268
# 這一行是限制 每一條 規則所要記錄的封包數量,
#因為同樣的規則可能有許多記錄,加上這一條可以使
#同樣的記錄重覆數減少,以避免記錄檔爆增。
options fPFIREWALL_VERBOSEJJMIT=10
chapter 13
NATSM^IIi
# 下面這一行是用來支援封包轉向,
#當你要使用 fwd 動作時必須要有這一項設 g 。
#options tPFIREWALL^FORWARD
# 如果要使用 pipe 來限制頻寬,必須加入下死選項以支援 dummynet 。
options DUMMYNET
ipfw 也支援狀態維持 ( keep - state ) 的功能,就是可以讓符合設定的規則
以動態的方式來分配增加規則(位址或連接璋)來讓封包通過。也就是說
防火牆可以記住一個外流的封包所使用的位址及連接璋,並在接下來的
幾分鐘內允許外界回應。這種動態分配的規則有時間的限制,--段時間
內會撿查連線狀態,並清除記錄。
所有的規則都有計數器記錄封包的數量、位元數、記錄的數量及時間
等。 ■這 些記錄可以用 ipfw 指令來顯示或清除。
在說明 ipfw 規則的語法之前,我們先來看這個指令的用法。 i p f w 可以
使用參數:
ipfw add [rule]
新增一條規則。
ipfw delete [number]
刪除一條編號為
number 的規則。
ipfw -f flush
清除所有的規則
a
ipfw zero
將計數統計歸零
Q
ipfw list
列出現在所有規
則,可以配合下列參數使用。
269
FreeBSD 入 忾 應用 □□口
-a
使用 ! ist 0寺,可以列出封包統計的數目。
-f
不要提出確認的詞問°
-q
當新增 ( add ) ^歸零 ( zero ) 、或凊除 { flush } 時,不要列出任何回應。當使用遠
端登入,以 script (如 sh / etc / rc . firewall ] 來修改防火牆規則時’内定會列出
你修改的規則。但是當下了 flush 之後’會立即關掉所有連線,這時候回應的訊
息無法傳達終端機,而規則也將不被繼纘執行 & 此時睢一的方法就是回到該電
腦前重新執行了。在修改防火牆規則時,最好茌電腦前修改,以免因為一個小
錯誤而使網路連線中斷 &
-f
當使用 fet 時,列出最後一個符合的時間。
-N
在輸出時嘗試解析 ip 位址及服務的名稱。
-s [ field ]
當列出規則時,依哪一個計數器(封包的數量' 位元數、記錄的數量及時間)來
排序 p
133.1 iplw 規則
我們在過濾封包時,可以依攄下列的幾個封包所包含的資訊來處理該封
包:
^接收或傳送的介面,司以使用介面名稱或位址
圔 方向,流入或流出
| g 來源或目的地的 ip 位址,也可以加上子網路遮罩
H 通訊協定, TCP , UDP,ICMP 等
M TCP flags
矚 IP fragment flag
M IP options
圔 ICMP 的類型
和封包相關的 socket User/group ID
270
chapter 13
NAT 及防火牆
使用 IP 位址或 TCP / UDP 的埠號_爲規則可能蠻危險的,因爲這二
種都有可能被以假的資訊所蒙騙 ( spoof ) 。但是這二種卻也是最常被使用
的方法。
下列爲 ipfw rules 的語法:
[number] action [log] proto from src to dist [interface_spec] [option]
使用 [] 包起來的表不可有 A 無,我們一一爲大家說明它們的意義:
number :定義規則的順序,因爲規則是以先入爲主的方式處理,如果
你將規則設定放在一個檔案中(如 / etc / rc.firewall ) ,規則會依每一行排列
的順序自動分配編號。你也可以在規則中加上編號,這樣就不需要按順
序排列了。如果是在命令列中下 ipfw 指令來新增規則的話,也要指定編
號,這樣才能讓規則依我們的喜好排列,否則就會以指令的先後順序來
排。這個編號不要重覆,否則結果可不是你想要的樣子。
action : 可以用的 action 有下列幾個
dlow
允許的規則,符合則通過。也可 lij (使用 pass H permit r accept 等別名。
deny
拒絶通過的規則。
reject
拒絶通過的規則,符合規則的封包將被丟棄並傳回一個 host unreachable 的
ICMP 。
count
更新所有符合規則的計數器。
check-state
-- —. __
檢查封包是否符合動態規則,如果符合則停止比對。若沒有 check - state 這條
規則,動態規則將被第一個 keep - state 的規則所檢查。
divert port
將符合 divert sock 的封包轉向到指定的 port 。
fwd fpaddr
將符合規則封包的去向轉向到 ipQddr , ipaddr 可以是 IP 位址或是
Lportjhostname °如果設定的 ipaddr 不是直接可以到達的位址,則會依本機
即有的 routing table 来將封包送出。如果該位址是本地位址卩 oca |
address ) ,則保留本地位址並將 if 包送原本指定的 IP 位址。這項設定通常用來
和 transparent proxy 搭配使用〜例如:
271
Fr 籲 eBSD 入 n 應用口
□
ipfw add 50000 fwd 127,0,0.13128 tcp from 1 92 」 68 」 .0/24 to any 80
如果沒有設定 port ,則會依來源封包的 port 將封包送到指定的 IP 。
使用這頂規則時 | 必須茌 kernel 中設定選項
IPFIREWALLFORWARD -
pipe pipe_nr
傳遞封包給 dummy net (4) "pipe" , 用以限制頻寬。使用本語法必須先
在核心 中加入 option DUMMYNET ° 11 man ipfw 及 man dummynet 0
基本語法是先將要設定頻寬的規則加入:
ipfw add pipe pipe_nr ■…
再設定該規則的頻寬:
ipfw pipe pipe—nr config bw B delay D queue Q plr P
這裡的 pipe jr 指的是 pipe 規則編號,從 F65535 ; B 是指頻寬,
可以表示為 bit/s v Kbit/s 、 Mbit/s 、 Bytes/s 、 KBytes/s 、或
MBytes/s 。 D 是延遲多少 milliseconds ( 】 /1000 卜 Q 是 queue size
的大小 1 單位為 packages 或 Bytes) 。 P 是要隨機丟棄的封包數量。
例如我們要限制内部網域的電腦對外上傳的最大頻 _ 是 20KBytes :
ipfw add pipe 1 ip from 192.168.0.1,24 to any in
ipfw pipe 1 config bw 20KBytes/s
log : 如果該規則有加上 log 這個關鏈字,則會將符合規則的封包記錄
在 / var / bg / security 中。前提是在核心中有設定 IPFIREWALL_VERBOSE
的選項。有時因爲同樣的封包太多,會使記錄檔保有大量相同的記錄,
因此我們會在核心中再設定 IPFIREWALL _ VERBOSE _ LIMIT 這個選項,
來限制要記錄多少相同的封包。
proto :網路協定的名稱,如果使用 ip 或 all 表示所有協定。可以使用的
選項有 ip , alUcp , udp,icmp 等。
src 及 dist : src 是封包來源; dist 是封包目 的地。 在這二個項目可以用的關
鍵字有 any , me , 或是以 < address / mask >[ ports ] 的方式明確指定位址及堉號。
272
chapter 13 ^
NATMim®
若使用關鏈字 any 表示使這條規則符合所有 ip 位址。若使用關鏈字 me
則代表所有在本系統介面的 IP 位址。而使用明確指定位址的方式有下列
三種:
■ IP 位址,指定一個 IP ,如 1.214 。
顯 IP/bits ,如 1 - 2 . 3 . 4/24 ^ 表示所有從1 . 2 . 3.0 到1 . 2 . 3.255 05 IP 都符合規則。
127 1 /8th of a Class C 32 hosts
/26 1/4th of a Class C 64 hosts
/25 1/2 of a Class C 128 hosts
/24 1 Class C 256 hosts
/23 2 Class C 512 hosts
122 A Class C 1,024 hosts
/21 8ClassC2,048 hosts
/20 16 Class C 4,096 hosts
/19 32 Class C 8,192 hosts
/18 64 Cfass C 16,384 hosts
IM 128 Class C 32,768 hosts
/16 256 Class C 65,536 hosts (- 1 Class
B)
/15 512 Class C 131,072 hosts
/14 1,024 Class C 262,144 hosts
/13 2,048 Class C 524,288 hosts
翻 IP:mask ,由 IP 加上子網路遮罩,如 1,2.3.4:255.255.240.0 表示從 1,2.0.0 到
12.15.255 都符合。
273
1 @ FreeBSD 入 P1 廳用 □ □匚口 ] _ 二 -
而在 me , any 及指定的 ip 之後還可以再加上連接埠編號 (ports) ,指定
port 的方法可以是直接寫出 port ,如 23 ;或紿定一個範圍,如 23-80 ;或
是指定數個 ports ,如 23,21,80 以逗點 隔開。 或者是寫出在 /etc/services 中所
定義的名稱,如 ftp ,在 services 中定義是’因此寫 ftp 則代表 port 2 1 。
interface-spec ^可以使用下列幾個關鏈字的結合
In
只符合流入的封包。
out
只符合流出的封包。
via ifX
封包一定要經過介面 ifX , if 為介面的代號, X 為編號,如 vrO 。
via IP
表示封包一定要經過介面 ifX , if 為介面的代號,而 ’ 則是任何編號,如 v 「* 代
表 vrO,vrK〜 °
via any
表示封包一定要經過任何介面 p
via ipno
表示封包一定要經過 IP 為 ipno 的介面 &
via 會使介面永遠都會被檢查,如果用另一個關鏈字 recv ’則表示只檢
查接收的封包,而 xmit 則是送出的封包。這二個選項有時也很有用’例
如要限制進出的介面不同時:
(S) ipfw add 100 deny ip from any to any out recv vrO xmit edl
recv 介面可以撿查流入或流出的封包,而 xmit 介面只能撿查流出的封
包。所以在上面這裡一定要用 out 而不能用 in ,只要有使用 xmit 就一定
要使用 out 。另外,如果 via 和 recv 或 xmit -起使用是沒有 效的。
有的封包可能沒有接收或傳送的 介面: 例如原本就由本機所送出的封包
沒有接收介面,而目的是本機的封包也沒有傳送 介面。
options :另外還有一些常用的選項,更多選項請 man ipfw :
274
chapter!3
keep-state
當符台 規則時 ipfw 會建立 一 個 :
使用相同的協定時就讓封包通過 .
sysctl 中的變數所控制: h 每當有 1
_ 現則, 内定是議符 S 硯則的 Jfe 原及目的地
口 這個規則有一定的生存期限 pt time ,由
听的封包符合規則時,便用重設生存期限。
bridged
只符合 bridged 的封包。
established
只適用於 TCP 封包,當封包中有 RST 或 ACK bits 時就符合。
setup
只適用於 TCP 封包,當封包中有 SYN bits 時就符合。
以上的說明只是 man ipfw 中的一小•份。如果你想要對 ipfw 更了解,
例如如何使用 ipfw 來限制頻寬等,建議你 man ipfw
不知道您看了這麼多的規則是否覺得眼花撩亂,如果不了解 TCP / I p 的
原理,徹底了解 ipfw 的設定還眞不容易。沒關係,我們下面將舉幾個簡
單、常用的設定,這些範例應該夠平常使用了。
13-3.2 範例
我將原本的 / etc / rc . fire wall 備份成 rc . firewaLold ,並將它改成下列內容,
請 注意, 這裡只是範例,只供參考:
# 設定我的 IP
myip="1.2.3.4 M
#設定對外的網路卡代號
outif= H vrO f _
#設定對内的網路上代號
#清除所有的規則
/sbin/ipfw -f flush
# Throw away RFC 1918 networks
275
FraeBSD 入 n_m 」
${ipfw} add deny ip from 10-0,0.0/8 to any in via ${oif}
${ipfw} add deny ip from 172,16.0.0/12 to any in via ${oif}
${ipfw} add deny ip from 192.168.0.0/16 to any in via ${oif}
# 只允許内部網路對 192.168,0,1 使用 telnet 服務
/sbin/ipfw add 200 allow tcp from 192,168,0.1/24 to 192.168.0.1 telnet
# 拒絶其他人連到 port 23 ,並記錄嘗試連線的機器
/sbin/ipfw add 300 deny log tcp from any to me 23
# 拒絶任何 ICMP 封包
/sbin/ipfw add 400 deny icmp from any to any
# 下面這台機器是壞人,不讓它進來,並記錄下來
/sbin/iptw add 1100 deny log all from 211.21.104.102 to any
# NAT 的設定
/sbin/ipfw add divert: natd all from any to any via vrO
# 限制内部網域對外下載最大頻寬為 20KBytes/s * 上傳最大頻寬為 5KBytes/s
ipfw pipe 20 corifig bw 20KBytes/s
ipfw add pipe 20 ip from any to 192.168.0,1/24 out
ipfw pipe 30 config bw 5KBytes/s
ipfw add pipe 30 ip from 192.168.0.1/24 to any in
# 允許本機對任何地方連線
/sbin/ipfw add check-state
/sbin/ipfw add 2000 allow udp from ${myip} to any keep-state
/sbin/ipfw add 2100 pass ip from ${myip} to any
# 允許外界使用郵件服務
/sbin/ipfW add 3000 pass tcp from any to ${myip} 25 in via ${outif)
# 不允許内部的 〖P 從外部連進來
/sbin/ipfw add 1200 add deny ip from ${myip}/24 to any in via ${df}
276
chapter 13
# 其他都拒絶,如果沒有在 kernel 中設定
# IPRREWALL—DEFAULT—TO_ACCEPT 則内定就有下列這一條
/sbin/ipfw 65535 add deny all from any to any
存擋後就可以使用 sh rc.firewall 來執行新的規則了。如果您將規則放在
/etc/rc.firewall 中,則開機時會自動執行。
13.3.3 —些小建議
在建立一個封包過濾的防火牆時,應該盡可能阻擋 port 1024 以下的
TCP 服務,例如只通過 SMTP 封包 (port 25) 給郵件伺服器;拒絕所有
UDP 連線(只有少部份服務如 NFS 會用到):一些只有內部才會使用的服
務,如資料庫等也不必對外開放。
另外,同樣的防火牆限制可以使用不同的語法來展現,應該要試著讓規
則數量越少越好,以加快處理速度。
在更新 firewall 規則時,如果規則沒有寫好,而你又是以遠端登入的方
式修改規則,很可能會因此無法繼續登入。因此建議更新規則時最好在
前執行,若迫不得已一定要使用遠端登入,建議您執行 / usr/sh are/
examples/ipfw/changejules.sh 這支程式來編輯規則:
® # cd /usr/share/examples/ipfw
® # sh changejrules.sh
接著會出現文書編輯軟體並最動載入 /etc/rc.firewall 讓你編輯,結束離
開後,會詢問是否要執行更新。如果執行新的規則後造成斷線,它會自
動載入舊的規則,讓我們可以再次連線。
277
FreeBSII 入 W 廳用 ]□ □ □ □
13.4 封包過濾橋接器
當我們的內部網路有不同 class 的主機時’例如內部有 140.115.2.3 及
140.115.5.6 這二台電腦時,就無法使用傳統的防 火牆。 如果要在這二台
機器連到網際網路中途中使用防火牆’我們必須使用新的方式’就是這
裡要介紹的橋接器。
我們可以使用 FreeBSD 爲橋接器’利用它來彳故封包過濾的動作,而絲
毫不影響內部的主機原本的設定。爲了達到這個功能,我們必需要有二
張支援 promiscuous mode 的網路卡’現在的網路卡大部 份都有 支抜。 一
張網路卡當中,一張需要設定 IP ,另一張不需要。至於您要將 IP 設定在
哪一張卡都可以,建議是設在對外的網路卡上。
首先,我們必須在核心中加入關於橋接器的設定:
#支援橋接器
options BRIDGE
#防火牆設定
options iPFIREWALL
options IPFtREWALL_VERBOSE
# 我們這裡不將防火牆預設為接收所有封包
#options IPFIREWALL—DEFAULT 一 TO—ACCEPT
重新編譯核心後,在重開機前,我們先設定一下 / etc/rcxonf :
firewalLenable^YES"
firewallJype= H open n
還有一件事要做,當在乙太網路上跑 IP 協定時,事實上使用二種乙太
網路協定,一個是 IP ,另一個是 ARP 。 ARP 協定是當機器要找出給定 IP
278
chapter 13
mfWmiM
位址所對應的乙太網路位址時使用的 -| arp 並不是 ip 層的一部份,只是
給 ip 應用在乙太網路上 運作。 標準的 帶火牆 規則中並未加入對於 arp 的
支援’幸運的是,高手們的在 ipfirewall 程式碼中加入了對封包過濾橋接
器的支援。如果我們在 ip 位址 o.o.ao 上建立一個特別的 udp 規則,
UDP 瑋的號碼將被使用來搭配被橋接封包的乙太網路協定號碼,如此一
來,我們的橋接器就可以被設定成傳遞或拒絕非 IP 的協定。請在
/ etc / rciirewall 中接近文件頂端處理 k >0 的那三行之下(就是有寫 Only in
rare cases do you want to change these rules 的地方)加入下面一行:
${ fwcmd } add allow udp from 0.0,0,0 2054 to CLO . O.O
現在我們就可以重新開機了。重開機之後,先執行下列指令來啓動撟接
器:
# sysctl'w netlink.etherbridge_ipfw=1
# sysct! -w netJink.etherbridge-1
現在我們可以將機器放在內外二個網域之間了。因爲我們之前在
/ etc / n :. CO Trf 中,設定防火牆完全打開,不阻擋任何封包,所以放在二個網
域之間時,運作應該沒有問題。我們之前只設了一張網路上的 IP ,而在
執行了上述的指令之後,第二張網路卡便開始運作。
下一步就是將我們啓動橋接器的指令放在 / etc / rc . local 中,讓系統在開
機時自動執行。或者,我們可以在 / etc / sysctl . conf 中加入下面二行:
net. link.ether. bridgeJpfw=1
net.link.ether.bridge=1
接下來我們就可以依自己的需求在 / etc / rc . firewall 文件的最後面加上我
279
FreeBSD 入 PI 廳坩 □□ 二 1 —
們自己想要的防火牆規 則了。 以 下是一 個簡單的設定規則,假設橋接器
的 IP 是 14 CU 15 J 5.137 ,內部有二台主機,一台提供網頁服務,一台是
BBS *
us 」 p=140.115.75.1 37
basrv_ip=140.115,3.4
bbs_ip=140.115.5.6
oif=fxp0
iif^fxpl
iptw-Vsbin/ipfw T,
# Things that we r ve kept state on before get to go through in a hurry.
${ipfw} 1000 add check-state
# Throw away RFC 1918 networks
${iptw} 1100 add deny ip from 10,0,0.0/8 to any in via ${oif}
${ipfw} 1200 add deny log ip from 172.16.0,0/12 to any in via ${oif}
${ipfw} 1300 add deny log ip from 192.68.0.0/16 to any in via ${oif}
# 允許橋接器本身所有想做的連線 (keep state if UDP)
${ipfw} 1400 add pass udp from ${us_ip} to any keep-state
${ip1w} 1500 add pass ip from ${us_ip} to any
# 允許内部網路任何想做的連線 (keep state if UDP)
${ipfw} 1600 add pass udp from any to any in via ${iif} keep-state
${ipfw} 1700 add pass ip from any to any in via ${iif}
# 允許任何的 ICMP 連線
${ipfw} 1800 add pass icmp from any to any
# 不允訐使用 port 888 連線
${ipfw} 2000 add deny log tcp from any to ${bbsjp} 888
280
chapter 13
# TCP section
# 任何地方都可以建立 TCP 運線
${ipfw} 3000 add pass top from any to any via ${oif}
via
# Pass the M quarantine , ' range.
${ipfw} 3100 add pass tcp from any to any 49
林 Pass ident probes, tt's better than waiting 1b
${ipfw} 3200 add pass tcp from any to any 11
# Pass SSH.
${ipfw} 3300 add pass tcp from any to any 2t
# Pass DNS. 當内部網路有名稱伺服器時才需;
#${ipfw} add pass tcp from any to any 53 in
# 只傳遞 SMTP 給郵件伺服器
3400 add pass top from any to ${bbs_
${ipfw} 3500 add pass tcp from any to ${basrV
# UDP section
# Pass the ^quarantine 1 ' range,
${ipfw} 4000 add pass udp from any to any 49
# Pass DNS , 當内部網路有名稱伺服器時才菩
#${ipfw} 4100 add pass udp from any to any 53 in via ${oif}
152-65535 in via
'r them to timeout
3 in via ${oif}
in via ${oif}
1 i-f 11
ip} 25 in via ${oif}
ip} 25 in via ${oif}
'152-65535 in via ${off)
# 其他的都拒絶
利 ipfW} 60000 add deny ip from any to any
281
FreeBSD 入 rt 廳用 □
□ n □
282
Proxy Server
P^Fre«BSD 入 P1 廳啪 □ □ J 匚
14.1 槪論
Proxy 可以用來降低 WWW 及 FTP 的網路流量,它的運作原理簡而言
之就是當網域中其他電腦要瀏覽網頁時,必須先通過 proxy 伺服器,如果
在 proxy 中己存有該網頁時,就直接送出給網域中的電腦;如果沒有’則
連到該網頁取回來存放,並送一份給提出要求的電腦,待下次再有相同
要求時,就可以直接從 proxy 的存檔中送出。
我們會在 proxy 伺服器中設定賣料要存放多久的時間並更新,以免使用
者看到的都是存在 proxy 中的舊網頁。這對於內部有大量的使用者時,可
以明顯降低網路 流量。 如果網域中只有十幾台電腦’那麼 proxy 就比較不
能發揮它的功效了。我們也可以在 proxy 中設定使用者不可以瀏覽的網
頁,限制使用者連到某興網站。
一般而言,使用者要使用 praxy 時,必須先在自己電腦上做一些設定。
我們也耵以利用 proxy 結合防火牆,當使用者對外提出 HTTP 要求時’即
自動轉向到 proxy server ,如此一來’使用者端便不需做任何設定 5 甚至
不會發覺有 proxy 的存在 a
在這裡我們介紹一個被廣爲使用的 proxy 軟體 「 squid」 。 squid 的安裝
及設定很簡單,我們會在下面幾節中一一爲大家介紹。
T 4.2 安裝 Squid
chapter 14
Proxy Server
慼謝美好的 FreeBSD pons ,可以讓我們很簡單的安裝 squ id 。請使用下
列指令:
#cd /usr/ports/www/squid24
(r^) # make instafl
如此便已安裝 squid 了。接下來就必須要修改 / usr / local / etc / squid / squid,conf
了, squidconf 是整個 squid 的設定所在,內容很多,我們下一章再做詳細的介
紹。這裡我們只作簡單的設定,也就是海定義誰可以使用,例如我要定
義只有 192.168.0.* 及 ^.alexwangxom 可以使用,則在 squidxonf 中拽到
ACCESS CONTOOLS 的區段中的 acl 部份,加入下面 內容:
acl domain 一 allowed srcdomain .aiexwang.com
acf ip—allowed src 192.168.0.0/24
在上面二行中,我們先將網址域 IP 定義一個名字,將所有在
alexwang.com 的網址定義名稱爲 domain 一 allowed ;將 192.168.0,0-
] 92+168.0.255 的 IP 命名爲 ip^allowed L 接著再找到 http_access 的部份,
在 http^access deny all 之前加入下面有內容:
http__access allow domain—allowed
http_access allow ip__al lowed
上面 是允許 名稱爲 domain 一 allowed 及 ip_allowed 的網址使用 proxy 。關
於上述設定的說明請參考 squidxonf 介結。
修改完 squid.conf 之後,接著要建立 cache 目錄結構,預設的 cache 目
285
: g^FiwBSD 入 n 廳用 ] □ □ □ □ •—] 1 —
錄在 Aisr / local / squid/diache 中,如果要將它放在其它目錄的話’必須修改
squid.conf 並建立所設定的目錄。接著使用下列指定來改變檔案權限並建
立 cache 的目錄 結構:
# chown -R nobody, nogroup /ysr/loca!/squtd/cache
(^) # chown -R nobody.nogroup /usr/local/squid/logs
(f^) # /usr/local/sbin/squid -z
當下達 squid -z 的指令時,必須等上幾分鐘的時間。安裝好 squid 之後’
在 / usr / local / etc / rc . d / 有一個名爲 squidsh 的檔案,表示在開機時便用自動啓
動 squid °當做好一切設定之後,我們只要 執行下 列指令即可啓動 squid 。
# /usr/local/etc/rc,d/squid,sh start
我們在這裡的設定只是讓你能立即使用 proxy ’詳細的設定必須再修改
sqoid.conf ? 一 1 些相關的設定如某個時段禁止連到某個位址、寶料保存期
限等等。
接下來是 client 端的設定,以 MS Windows 爲例:
對著桌面的 IE 按右鏈選[內容]或是在控制台中選 [網 際網路選項],出
現圖 14-1 的視窗:
286
chapter 1 4
Proxy Server
圓 14-1
選擇上方[連線]的標籤後,再點選[區域網路設定],出現下面視窗。接
著在 Porxy 伺服器的部份,在網址的部份輸入 proxy server 的網址,連接埠
預設値是3128,接著按確定即耵使用瀏覽器來試試看可不可以使用了 r
圖 14-2
287
287
0 : freeBSD 入 n 廳用匚 ]□
14,3 Squid.conf 介紹
Squid 的設定檔位於 / usr / local / etc / squid/squidxonf ° 在安裝完 Squid 之
後,我們必須修改它以期符合我們的需求 。在 squid . conf 中’開頭爲
表示註解,每一個設定選項都有 TAG 表示選項名稱、 Usage 表示用法、
Defaualt 表示預設値°如果不須改變預設値’我們不必將該订的 S 主解
拿掉,否則可能會產生一些問題在檔案中有的 Default 寫著” none " 表示
該選項沒有預設値。
squid . conf 的詳細說明可以到 www , squid - cache . org 參考設定手冊 。我們
在這裡介紹幾個常用的選項設定方式 :
選項名稱: http^port
用法 : port
hostname : port
L 23.4 :port
這是 Squid 要接收 HTTP 要求時所使用的 port 。可以使用三種格式:只
指定 port 、使用 hostname 段 port 、或是 IP 位址及 port ° —般而芑’我
們只要指定 port 即可。我們也可以設定多行 http ^ port 來使用多個
port 0
預設的 port 是3128
我們也可以在命令列下執行 squid 這個指令,並以參數 - a 來取代
squid . conf 中所設定的第一個 port 。例如,我們要啓動 squid 並將 port
改成8080,可以下指令: / usr / local / sbin/squid -a 8080使用 - a 來覆篕在
squid . conf 中所設定的第一個 port 只能適用於只指定 port 時,如果在
0 -
chapter
Proxy Server
port 前有加上 ip 或 hostname 的話,這個指令就不會產生做用
選項名稱: icp__port
當 Squid 接收到 ICP 查詢時,要回應時所使用旳 port ,可以設爲 0 來停
用 ICP 查詢。也可以在命令列使用 - u 來覆蓋這裡的設定。 ICP 是 Squid
cache 之間所使用的協定,用來交流多台 Squid 的 cache °目前 ICP 是使
用 UDP 協定。
預設値: icp_port 3130
選項名稱: mcast_groups
這個選項是用來指定這台何服器要加入 IC.P 廣播的群組,也就是指定
要收到的 ICP 査詢的來源主機。請注意!這個設定是"接 收" 查詢而不
是"送出 H 查詢。如果要送出 ICP 廣播查詢是使用 cache_peer 。不可以
將已加入別的群組的主機加入。
如果你想更深入了解 multcast 請參考 Squid FAQ { http :// www . squid -
cache . org / FAQ /”
用法: mcast—groups 239*128,16.128 224.0 丄 20
預設是不加入任何群組。
預設値:無
選項名稱: cache_peer
用法 : cache 一 peer hostname type http 一 port icp—port [ options ]
這個選項可以讓你設定上游的 proxy server ,當本地沒有該筆資料時,
則向上游查詢。例如上游的 proxy 是 proxy . ncuxdu+tw ,我們可以設定:
289
[^p]fr®eBSD 入 H 廳用 □ □ □
cache 一 peer proxy , ncu edu.tw parent 3128 3130
選項 名稱: no_cache
設定不需要使用 cache 的項目。例如 CGI 不使用 cache ,則可以做下列
的設定 :
acl QUERY urlpatii_regex cgi-bin \?
no_cache deny QUERY
如果連 php 、 asp 都不要做 cache :
acl QUERY urlpath_regex cgi-bin V ? \.php Vasp Vcgi
no 一 cache deny QUERY
選項 名稱: cache_mem
設定存放在記憶體中的資料大小,以 byte 爲單位。這並不表示 squid 程
式將在你記憶體中的所佔的容量,除了 cache 的資料外,還有一些額外
的東西會被放到記憶體中(如 HD 的 index ) 。因此實際使用的記憶體大
小可能是這裡設定的二倍或三倍。建議設定爲實際記憶體的三分之一。
例如=
cache_mem 64 MB
選項名稱 : maximum — object„size
cache 物件的大小,超過此設定値則不存放於硬碟中。例如要設定檔案
大於8 MB 則不儲存:
maximum __ object_size 8192 KB
選項 名稱: cache _ dir 5
設定 cache 在硬碟中的目錄、大小限制等。預設値是
290
chapter 14
Proxy Server
cache^dir ufs /usr/local/squid/cache 100 16 256
ufs 是 squid 的儲存格式,一定要加 。接 卜來的 /usr/local/squid/cache 是
存放 cache 資料的地方。 100 碑示最多使用 100 MB 做爲 cache 的空
間,我們可以把它調大一點。而 16256 是 cache 目錄第一層及第二層的
結構,建議不要更動。之前使用 /usr/local/sbin/squid z 就是在建立
cache 目錄的結構。
爲了讓 cache 的資料能存放多一點,我們可以將設定改成下面 這樣:
cache^dir ufs /osr/locai/squid/cache 2000 16 256
選項 名稱: cache, _access_log
cache 的使用記錄存放的位置,內容包含了所有 HTTP 及 ICP 要求。預
設値是:
cache_accessJog/usr/locaI/squid/logs/access.Iog
選項名稱 : cache Jog
這是設定另一個記錄檔的位置,該檔中包含了 cache server 的一些資
訊、和 cache_peer 之間的連線等等。我們可以更改 "debug_options" 的
選項來設定要記錄的資訊。預設 値是:
cachejog /usr/locaI/squid/logs/caclie.!og
選項宅稱: cache store log
記錄哪些資料被儲存。可以使用 ” none” 來停止這方面的記錄。上面的
log 檔,都可以用一些工具來分析 squid 的使用情形,但 store log 並沒
有,所以如果不想記錄可以使用 "none" 來停止。
]
]rg):Fr®eBSD 入 n 鼸 用!] □□匚
選項名稱 : pidjilename
設定存放 pid (process id) 的檔案位置。
選項名稱: ftp_user
設定當 proxy 以 anonymous FTP 連線時,要使用的 email °你可以設
爲:
ftp_user you@yourdomain.com
選項名稱: cache_dns_program
squid 使用的 dns 査詢程式的位置。 squid 在查詢 dns 時,會新增一個子
程序 (process child) 乘做查詢,以免查詢時間太長阻礙了 squid 的正常
運作。
選項名稱 : dns_children
設定 dm 查詢的 children 最大數量,預設値是 5 ,最大可以設爲 32 。以
一個忙錄的 squid server 而言,最小建議設爲 10 。
選項名稱 : ad
Access Control List ° 我們可以利用它來控制連線的權限及狀態。用 acl
來搭配 hup access 等,可以讓我們更方便管理。
用法 : acl aclname acltype string!
acl aclname acltype "file” …
achiame 是我們自己命名的識別字,要注意不要使用到 squid 的關鏈
字°而 acltype 可以使用卜列的選項:
292
chapter t4
Proxy Server
src : 表示來源,即 client 的 IP 。
如: acl localip src 192*168,0,0/24
srcdomain : 表示來源,爲 domain name 的格式 。
如 : acl localdomains srcdomain ,alexwangXDm
dst: 表示目的地的 IP 。
如: aci acceleratedhost dst 172.16;. 1.115/255,255.255.255
dstdomain : 表示目的地的 domain name 0
如: acl badwebsite dstdomain www.sex.com
srcdom_regex : 對來源的 URL 做正規運算式 (regular expression) 運算 。
如: ad localwebsite srcdom_regex mydomainxom
dstdom_regex : 對目的地的 URL 做正規運算式 (regular expression) 運算。
如 : acl sexwebsite srcdom—regex A http://www.playboyxom
time : 指定時間。
用法 : acl aclname time [day-abbrevs] h2:m2]
day-abbrevs:
S- Sunday
M ■ Monday
T - Tuesday
W ■ Wednesday
H - Thursday
P - Friday
A - Saturday
293
pjFreeBSD 入 P ! 廳朗] □ □[]
hl:ml — 定要比 h2:m2 小
port : 指定連接璋。
如 : ad SSL sports port 443
proto : 指定所使用的通訊協定。
如 : acl allowprotolist proto HTTP
更多的 acltype 關鍵字請看 squid.conf °
選項名稱: http_access
用來控制要開放 squid 給哪些來源使用。預設是全部拒絕,最好不要不
設防,例如使用 http_acce$s allow all 就是一個不好的方式。
我們可以利用 http_access 搭配 ad 來控制使用情形例如要開放給內部
網域使用 :
# INSERT YOUR OWN RULE HERE TO ALLOW ACCESS FROM
#YOUR CLIENTS
ad domain 一 allowed srcdomain .alexwangxom
acl ip_allowed src 192.168.0.0/24
http_access allow domain_aIlowed
http^access allow ip_allowed
在設定了耵以使用的來源之後,最後再加上:
http—access deny all
來拒絕其他連線。
294
選項 名稱 : iq p—access
chapter 14
Proxy Server
控制 squid 只回應哪些 sibling/child 的 ICP 詢問。例如,只允許校內機
器使用
acl ncu src 140,115,0.0/255.255.0.0
icp„access allow ncu
icp_access deny all
選項 名稱: missjccess
控制只能做爲 sibling 而不做 parent , 例如:
acl locale!iemts src 172.16.0.0/16
miss_access allow localclients
miss—access deny llocalclients
選項名稱: cache_peer_access
和 cache_peer 一樣,只是這個選項可以使用 ad 來控制。
選項 名稱: cache_mgr
squid 管理者的 email 。可以設定爲本機的使用者:
cache_mgr webmaster
或別台主機的 email:
cache_mgr jack@otherdomain.com
選項名稱: cache_effective_user
選項名稱: cache—effective_group
如果 squid 是以 root 的身份來執行,它會自動切換成這裡所設定的使用
295
r^FiwBSD 入 rt 應用 □ □ □ r =
者及群組。預設是 nobody ,所以我們才會把 /usr/local/squid/cache 及
/usr/locat/squid/logs 的擁有者改成 nobody 0
選項 名稱: visible_hostname
設定當 error message 顯示時的 hostname 。如果沒有設定則以 gethost-
name() 所得到的 hostname 爲主 。
選項 名稱: httpd_accel_host
選項名稱 : httpd_accet_port
如果要以 Transparent Proxy 來執行,則 設定:
httpd_accel_host virtual
httpd_acceLport 80
選項 名稱: httpd_accel_with_proxy onloff
如果要以 Transparent Proxy 及一般的 proxy 來執行則設爲 on °
選項 名稱: httpd_acceLiises_host_header onloff
如果要以 Transparent Proxy 來執行,則設爲 on D 讓 squid 可以經由
HTTP header 來判斷 url 。
選項名稱: logfile_rotate
設定要保留的 log file 份數,讓執行 squid -k rotate 來分析 squid 時使
用 。
選項名稱: err_html_text
該你可以在指定要出現的 error page (就是會有 mailto 的網頁广
296
chapter 14
f^_yProxy Server
選項名稱: deny_info
用法: deny—info err—pagejiame ad
可以讓你指定當拒絕連線時要使用的 HTML 檔案。例如:
denyjnfo ERRJ : USTOM_ACCESS—DENIED bacLguys
這些 HTM1 檔都放在 /usr/local/etc/squid/errors/ ? 而且沒有副檔名
.html °
選項名稱: error_directory
如果自行建立一些 error message 的 HTML ,我們可以放在預設的
/usr/local/etc/squid/errors 或是自行指定目錄位置。
14.4 Transparent Proxy
有的使用者可能不想設定 Prnxy ,或
端即可使用 proxy ^我們可以使用 Tra
Proxy 。只要在 Gateway 上使用防火牆
server 即可
者是管理者希望能不必設定 client
nsparent Proxy 來強迫使用者使用
來將對外的連線要求重導到 proxy
這裡我們假設 Proxy 就是 Gateway ,它身兼 NAT 功能,我們內部的網
域爲 192.168,0. 1/24 。我 們个提 NAT 的設定,只針對 Transparent Proxy 相
關的設定加以說明。首先要先確認 kernel 中除了原有關於防火牆的設定
外,有沒有 FORWARD 封包的設定,如果沒有必需自行加入並重編 ker¬
nel :
297
Fr ❹ eBSD 入 H 應用 ]□ □ □
# 原有的防火牆設定
options IPRREWALL
options IPDIVERT
options imREWALL 一 VERBOSE
options IPFIREWALL_DEFAULT__TO_ACCEPT
# 新加入關於封包轉向的設定
options iPFIREWALL_FORWARD
接著在 /etc/rc.fire wall 中加入:
/sbin/ipfw add 50000 fwd 127,0.0+1,3128 tcp from 192.168.0.0/24 to any 80
上面那一行的設定表示凡是由 192.168.0 产的 IP 要連到任何對於的 port
80 時,便轉向到 127.0.0.1 這台機器 ( 也就是本機)的 port 3128 。你可以依
自己的情況加以修改。然後編輯 /usr/iocal/etc/sqmd/squidxonf ? 在最開頭
加入下面這幾行:
httpd_accel_host virtual
httpd_acceLport 80
httpd_accel_with_proxy on
httpd__accel_uses_host_header on
完成後重新啓動 squid 及 ipfw 即可使用。
H.5 Proxy 管理
14.5.1 log 檔移轉
log 檔在頻繁的使用下會一直成長
每天備份各個 log 檔。執行 crontab -e
0 5*** /home/squid/bln/squid -k rotate
後
這裡我們設定爲每天早上五點備份 log 檔,如果您對於 crontab 的用法
不熟悉,請 man crontab 。
14.5.2 關櫬注意事項
由於 squid 對於硬碟的讀寫+分頻繁
因此在關機前要先停止 squid :
(r^) # /usr/local/etc/rc,d/squid.sh stop
chapter 14
Proxy Server
因此我們可以利用 crontab 來設定
加入下列內容:
而且有大量的資料在記憶體中
299
FreeBSD 入忾 應用 ]
□ □ □ n
300
19
麵庫系統
gFreeBSD 入 n 醒用 □ □□□.]:
15.1 槪論
電子 商務的興起讓資料庫的應用更受到大家的矚目。在資訊科學的應用
上,資料庫可以說是最歷久彌堅的領域。近來,資料產生和資料收集方
面的技術有非常快速的進展。許多商業產品廣泛使用了條碼、許多企業
和政府的交易皆已電腦化,這使得電腦成爲資料收集的主要工具。同
時,數以百萬計的寶料庫正被使用在企業管理、政府管理、科學和工程
的資料管理和許多其它的應用上°
我們可以安裝一套資料庫系統,並經由一個介面自行開發程式來使用
它。賣料庫的好處有很多,相信對資料庫稍有涉入的人都知道,例如資
料存取快速、不重覆'權限控制、資料獨立性等等。以寫一個簡單的留
言版程式而言,傳統上使用檔案做爲留言的記錄,若要刪除一筆資料,
必須對整個檔案一行一行的比對;但資料庫只需指定該留言的編號即
可。不過,如果把寶料庫系統局限於留言版也太大才小用了 °
我們將介紹在 FreeBSD 上使用資料庫,因爲目前網頁寶料庫使用情形
十分風行 , 尤其在網頁開發上使用 MySQL+PHP 更是絕配,所以我以
MySQL 爲主介紹它的用法。爲什麼選用 MySQL 而不選擇其他的資料
庫,因爲它簡單、免費、功能強大、具有多平台、多執行緒、且參考文
件多。你可以到 MySQL 的網站上參觀 http://www.mysqLcom 。除了
MySQL 外,還有另一套不錯的賣料庫 Postgre SQL 也不錯。在這一章
中,我們不再介紹如何安裝 MySQL ,您可以參考第+章網頁伺服器中關
於安裝 MySQL 的說明。
在使用責料庫之前,我們必須先了解一些簡單而基本的資料庫理論。基
本上寶料庫的結構有下列幾個特點:
302
_ 一個 資料庫系統中可以有多個獨立資料 )1
M 資料庫是由許多資料表 (table ) 所組成
資料表中包含許多記録 (record) °
M 每一筆 記錄中的瀾位數目都一樣。
M 每 一個欄 位儲存一種分類過的資料。
例如我們有一個資料庫名稱是 NCU
料表名爲 student 內容如下:
chapter 15
料庫系統
1
’ 其中有多個資料表,其中一個資
STUDENT fD
LAST NAME
FIRST NAME
DEPARTMENT
1 -
Chang
Jack
MIS
[ 2
Wang
Alex
BA
在資料表中有許多攔位 ( column) , 每個 攔位都有一個名稱,也就是第一
列 (row) 中的 STUDENT jD ' LASTJSTAME 、 FIRST—NAME 、 DEPART"
MENT 。接著我們將資料存入,每一拜記錄我們都可以看成一列 ( row) 5
每一個記錄都有一個「唯一的 ID ( 編號)」。唯一的 ID 十分重要,它是我
們在存取資料庫時的依據。在新增資料時,以 MySQL 而言,我們可以自
行指定 ID 或是由系統自行取得。
另一個觀念是關聯式資料庫。關聯式資料庫的意義就是每一個資料表間
可以存在 關係, 例如我們在 NCU 的資料庫中有另一個資料表名爲
score ,內容如下:
SCOREJD
STUDENTJD
CHINESE
ENGLISH
]
2
99
90
2
1
89
87
303
■■■
L
FrMBSD 入 《 應用 □ 1
score 寶料表中存放學生的成續,我們不需在該資料表中存放學生的資
訊,只要在該資料表中存放一個欄位名爲 STUDENTJD ^經由這一個唯
一的 ID 我們可以去 studnet 的賣料表中找到學生的資料。有了這些觀念就
足以讓我們開發出許多寶料庫的程式了。
15.2 SQL 語法介紹
SQL (Structured Query Language ) 語法 + 分簡單’它是關聯式資料庫的
標準語言,雖然在某些不同賣料庫系統上有些許的差異,但基本 t 都遵
循一定的標準。
我們可以在命令列下進入 MySQL 來練習 SQL 的 語法:
# /usr/local/mysqt/bin/mysql -u root -p
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Welcome to the MySQL monitor. Commands end with : or \g.
Your MySQL connection id is 14 to server version: 3.23,46
Type 'help; 1 or Ah 1 for help. Type V to dear the buffer.
mysql>
下完指令後會要求輸入密碼,之後你就可以直接在出現的命令列
mysql > 之後輸入 SQL 的語法了。
304
^ f ySQL __ 法’舸聯考 MySQL 巾文 轉鸭, 該文件
找 ^ 咖 0 cs/mysqwo
S ' 2氕,,'每個瓣都 鶴钿的 描述,例如襴位的名稱
令
規則等,我們不會在這裡提及
我們以建立一個學生資料表來說明這些語法
躍 CREATE
騮 ALTER
圃 DROP
醒 INSERT
H SELECT
躍 UPDATE
■ DELETE
鼷 製成 script 檔
0 -
chapter 15
我們只介紹幾個簡單而常用的指
15.2.1 CREATE
建 AA 資料庫 : CREATE DATABASE db
建立資料表 : CREATE TABLE tbLnam
我們先建立一個名爲 NCU 的資料庫:
mysql> CREATE DATABASE NCU;
請注意,每一個指令皆 以"; ”爲結尾,
同一條指令的延續 c >
e [( create — definition ”,.)] [ options ]
如果沒有 Y 就算換行也是代表
305
: 入 M 應用「」」■- L -
蕭何以刪柯齡 S haw 棘拙嫌祀存_韻 庫有義 :
iriy 叫 1> show dstHbssGS,
I Database |
I mysql
I test
I NCU
3 rows in set (0.01 sec)
接著用 USE 這個指令來使用 NCU 賣 料庫:
mysql> USE NCU;
接著建立-個放置學生責料的寶料表,名爲 STUDENT ,內容爲編號
( STUDENT _ ID ) ' 姓名 ( NAME ) ' 科系 ( DEPARTMENT ) ;
myS ql> CREATE TABLE STUDENT (
STUDENTJDint(IO) DEFAULT ^ NOT NULL AUTOJNCREMENT,
NAME varchar(50),
DEPARTMENT varcharflO),
PRIMARY KEY (STUDENTJD));
在上面的指令巾, _ 錄學生㈣針雛的赚㈣ ’ 內定値是
0,不可以是空的(脈 NULL) ^數字自動增加 (AUTOJNCREMENT)^
姓名是最_五十個字 _^( VARCHAR ) ,科 ^顧相 字節的 f
串。最後定義主要的 id 是 STUDENTJD ’也就是該資料表中的唯 — 10 。
306
0
chapter 15
資料庫系統
我們可以看到在建立資料表時, 我們 會順便劃分各個欄位所要儲存的資
料長度及其格式,常用的欄位格式請參考 MySQL 中文參考手冊。
如果要看現在使用的資料庫中有哪些資料表,一樣可以使用指令 show
來查看:
mysq!> show tables;
---- +
| TabiesJn_NCU [
| STUDENT
4 rows in set (0,00 sec)
15.2.2 ALTER
建立了資料表後,如果發現資料表的欄位不符需求,我們不必將資料表
刪除重建,可以使用 ALTER 指令來修改資料表的格式。另如我們要新增
一個姓別攔位,內容只可以是男 " 或 ” 女 " ,我們可以使用下面的 指令:
mysql> ALTER TABLE STUDENT
ADD SEX ENUM(_ 男 Y 女 DEFAULT ■女
我們增加了一個攔位 SEX ,使用 ENUM 的格式,指定內容只能爲 ” 男 ”
或 Tl 女 " ,且預設値是 ” 女”。
如果我們要將 SEX 攔位改名爲 DISTINCTION ,並將格式改爲 VAR-
CHAR :
307
❹ BSD 入門應用 ]□ 二 n
mysq)> ALTER TABLE STUDENT
CHANGE SEX DISTINCTION VARCHAR{4);
如果我們只是要將 SEX 欄位格式改爲 VARCHAR ,但不更改名稱,只
要將上面的指令中 DISTINCTION 改成 SEX 即耵。
如果我們要刪除整個 DISTINCTION 櫚位及該攔位的資料:
mysql> ALTER TABLE STUDENT DROP DISTINCTION ;
15.2,3 DROP
刪除資料庫: DROP DATABASE dbjame
刪除資料表: DROP TABLE table_bame
我們可以使用 DROP 指令來刪除不要的資料。例如我們要刪除 STU-
DENT 這一個資料表的話,可以使用下列指令:
mysq!> DROP TABLE STUDENT;
15.2.4 INSERT
使用 INSERT 指令可以讓我們一筆一筆增加資料。
STUDENTJD
NAME
DEPARTMENT
1
JACK
MIS
308
0
chapter 15
資料庫系統
假設我們的資料表中的攔位如上表,我們要新增一筆寶料,姓名是
JACK 、部門是 MIS :
mysql> INSERT INTO STUDENT (NAME, DEPARTMENT)
VALUES ('JACK',
由於我們在指定 STUDENTJD 的格式時,加了參數 AUTO . INCRE -
MENT ,所以我們不需指定値, mysql 會自動幫我們依序指定。
15.2.5 SELECT
我們可以使用 SELECT 來看資表中的資料,還可以依自己給定的條
件來過濾資料。
假設我們要看 STUDENT 資料表中的所有資料的話,可以使用下列 指令:
mysql> SELECT * FROM STUDENT;
假設我們只要看 NAME 及 DEPARTMENT 攔位的話,我們可以使用下
列指令:
mysqi> SELECT NAME,DEPARTMENT FROM STUDENT;
假設我們只要看 NAME 攔位,而且所屬部門爲 MIS 的人
mysql> SELECT NAME FROM STUDENT
WHERE DEPARTMENT^MIS 1 ;
假設我們要看 MIS 部門中的人所有
DENTJD 來排序:
欄位, 而且輸 出結果時要依 STU -
FreeBSD 入 M 應用 □ □ □ LS □
mysql> SELECT * FROM STUDENT
WHERE DEPARTMENT^'MIS'
ORDER BY STUDENTJD DESC;
最後的 DESC 表示遞減 ( descending ) ,由大到小排序。也可以使用 ASC
來表示遞增 ( ascending ) °
除了這些之外,在 MySQL 中還有一些可以使用的函式,例如我們可以
使用 count () 這個函式來計算出有多少筆記錄:
mysql> SELECT count{*} FROM STUDENT WHERE DEPARTMENT=’M1S T ;
[countf) I
+ ^ -+
1 row in set (0,00 sec)
上述結果表示部門爲 MIS 的記錄有五筆。
會了這些基本的 INSERT 指定就夠我們做一般的應用了。
15.2.6 UPDATE
我們可以使用 UPDATE 指令來更新記錄。例如我們要將所有記錄的部
門資料爲 MIS 者都改成 CSIE ,耵以使用下列 指令:
mysql> UPDATE STUDENT SET DEPARTMENT='CSIE ,
WHERE DEPARTWENT^MIS 1 ;
310
chapter 15
r^J 資料庫系統
15.2.7 DELETE
DELETE 指令可以讓我們刪除一筆 $ 多筆資料。例如我們要刪除 STU ¬
DENT 資料表中姓名爲 JACK 的記錄:
mysqt> DELETE FROM STUDENT WHRE NAME= l JACK t ;
如果我們要刪除姓名爲 JACK 且部門爲 MIS 的資料:
mysql> DELETE FROM STUDENT
WHERE NAME^JACK^ AND DEPAR™ENT= , MIS ,;
15,2,8 製成 script 植
我們可以將要執行的指定製成檔案,以利管理。例如我們寫了一個程
式,需要先在資料庫中建立一些資料,我們可以將對資料庫的規劃做成
一個檔案來管理。這樣可以使用們要安裝程式時更快速方便。
假設我們要建立一個資料庫 NCU ,該資料庫中有一個資料表 STU ^
DENT ,寶料表中要先建有以下記錄=
STUDENTJD
NAME
—
DEPARTMENT
1
JACK
MIS
2
MARY
CSIE
我們先建立一個檔案名爲 noi.sql ,內容如下:
311
BSD 入門應明 □[:
CREATE DATABASE NCU;
USE NCU;
CREATE TABLE STUDENT (
STUDENTJD int(IO) DEFAULTS NOT NULL AUTO」N CREME NT ,
NAME varcha 「 (50) T
DEPARTMENT varchar(IO),
PRIMARY KEY (STUDENTJD));
INSERT INTO STUDENT (NAME, DEPARTMENT)
VALUES { r JACK' f 'MIS');
INSERT INTO STUDENT (NAME, DEPARTMENT)
VALUES (_MARY\ , CSfE_);
接著使用下列指令來快速建立資料庫:
# / usr / local / mysql / bin/mysql -u root -p < ncu.sql
輸入使用者 root 的密碼後就完成建立了。
如果我們在資料庫中早就有一個資料庫名爲 NCU ,而我們要新增上述
資料表及記錄,我們只要將原本 ncu . sql 的內容最前面二行刪除,改成下
列內容:
CREATE TABLE STUDENT {
STUDENTJD int{10) DEFAULT 'O 1 NOT NULL AUTOJNCREMENT,
NAME varchar(50),
DEPARTMENT varchar(IO),
312
chapter 15
PRIMARY KEY (STUDENTJD));
fNSERT INTO STUDENT (NAME, DEPARTMENT)
VALUES CJACK' (
fNSERT INTO STUDENT (NAME, DEPARTMENT)
VALUES ( , MARY ,, 'CSIE');
之後再以下列指令來在 NCU 資料庫中建立資料表:
# /usr/local/mysqf/bin/mysql -u root -p NCU <ncu.sqf
在網路上有許多 PHP 程式可以下載,下載後要安裝資料庫時,大多是
以這種方式來 使用。
15.3 MySQL 管理
15.3.1 維護密碼安全
當我們要使用 MySQL 時,必須輸入 p 碼。輸入密碼的方式有很多種,
第一種也是最不安全的一個方式是直_在命令列打指令時就 輸入:
# /usr/focal/mysql/bin/mysql -u root -pmypwd
上面這種方法會讓別的使用者使用 pp 指令就可以看到你在執行的指定
及密碼。因此絕對不要使用這種方法,請改用下列方式輸入:
# /usr/local/myqsl/bin/mysql -y root -p
313
FreeBSD 入鬥應 _□ □ □ □ □ '
接著會要求你輸入密碼時再輸入即耵。
另一個方式是在你的家目錄下建立一個存放密碼的檔案,檔名爲
.myxnf ,當 mysql 需要使用密碼時會自動去讀取。該檔的內容如下:
[client]
password=your_passowrd
接著要把 . my.oif 的權限改成只有檔案擁有者才可以讀寫:
# chmod 600 ^/.my.cnf
15.3.2 備份資料庫
寶料庫的寶料要定時備份,這樣才不會在失手時或系統有問題時產生困
擾。在 MySQL 中提供一個備份程式 msqyldmnp 0
假設我們有一個資料庫名爲 WWW ,我們可以使用下列指令來備份整
個資料庫=
# /usr/local/mysql/bin/mysqtdump -u root -p WWW>www.sq!
這樣就可以把資料庫的資料存在 www . sql 這個檔案中了。日後要回復
時只要使用下列指定就可以把寶料存回 :
# /usr/locai/mysql/bin/mysql -u root -p WWW<www.sqi
我們要注意的是備份出來的檔案應該要放在不同的電腦中,而且要注意
權限的控制。由於該檔是文字檔,任何人都可以讀,所以要特別注意。
314
chapter 15
f%y nmm^~
我們可以利用 crontab 這個指令來定時備份寶料庫。我們先建立一個
shell script 檔,名爲 backupsqLsh ,內容如下:
/usr/locai/mysql/bin/mysqldump -uroot WW
cfimod 600 /home/www. sql
A^>/home/www,sql
接著將該檔權限改成只有擁有人可以讀'寫、執行,其他人都不行:
® # chmod 700 backupsql.sh
然後 建立〜 案內容 如下:
[client]
password=your_passowrd
接著要把 . niy.cnf 的權限改成只有檔案擁有者才可以 讀寫:
® # chmod 600 - Amy.cnf
接著要讓它能定時執行,命令列打 crootab -e 來進入文字編輯,加入下
列內容:
#每天3:05備份網頁資料庫
5 3*** / root / backypsql.sh
15.3,3 使用者管理
MySQL 對於使用者的權限控制存放奄名爲 mysql 賣料庫中的 user 資料
表內。 user 資料表內有下歹 彳幾個 攔位:
315
Fr#®BSD 入 P1 應用]匚
欄位名稱
權限
說明
Host
使用者來源主機
User
使用者名稱
Password
密硬 —
Select priv
select
對 table 做 select 動作
Insert priv
insert
對 table 做 insert 動作
Update^priv
update
對 table 做 update 動作
Delete jdiIv
delete
對 table 做 delete 動作 ...
lndex priv
index
對 table 做 index 動作
Alter^priv
alter
對 table iSS alter 動作
Create priv
create
對 fable - indexs 或 database 做 create 動作
Drop 一 priv
drop
對 table 或 database 做 drop 動作
GranLpriv
grant
對 table 或 database 做 gran 慟作 !
References_priv
references
對 table 或 da 彳 abase 做 references 動作
Reload_priv
reload
系統管理,權限擁有者可以執行 reload refresh,
flush-privileges, flush-hosts,flush-logs, flush-tables
Shutdown priv
shutdown
系統管理,權限擁有者可以執彳 ^shutdown 1
Process 一 priv
process
系統管理,權限擁有者可以執行 processlist kill
Fiie_priv
file
1 對系統上的檔案有存取權限
我們在新增一個 MySQL 使用者時,有二種方式。比較差的方式是使用
INSERT 指令:
(^) # /usr/local/mysql/bio/mysql -u root -p mysql
Welcome to the MySQL monitor. Commands end with ; or Vg-
Your MySQL connection id is 224 to server version: 3.23.49
Type 'help;' or '\h' for help. Type V to clear the buffer.
mysql> insert into user values ('hosf/user 1 ,
password ( 麵 ) , y , VVyVyVyVy 〜
Query OK,0 row affected (0.00 sec}
316
chapter 15
上面 mysql 指令中的 host 就是要哜許連線的主機,如果是本機則輸入
〗 ocalh OSt ;而 user 是使用者 名稱; 密磾是該使用者的 密碼’ 要使用即%
wordO 函數來將它 加密; 接下來的一堆 _ YT 就是對上表中的權限是否要開
放,如果不開放則塡 1 N 1 。
第二種方式是使用 grant 指令來新增使用者, GRANX 在設定使用者
麵時’如果使用者存在則更新其權限,如果不細噺增該使用者:
ffl 法. GRANT 權限 ON 資料庫(或表) TO user@host IDENTIFTFn BY 1 密碼 1
麵 - :賴 - ■ 函 ■ 者 admin - 細麵捕限,密碼爲
mypwd :
mySql> GRANT ALL PRIVILEGES ON V TO admin@|oca!host IDENTIFIED BY
r mypwd';
Query OK, 0 row affected (0,00 sec)
〜範例二:祈±曾一個來自 www.mydtHnaiii.com 的使用者 www ,並設定只
能對 www 資料庫中所有資料表執行 SELECT , INSERT , UPDATE , DROP ,
CREATE , DELETE , INDEX ,密碼爲 mypwd :
mysql> GRANT SELECT INSERT, UPDATE
www’ TO www@wvmmydomain.com IDENTII
Query OK, 0 row affected {0,00 sec)
如果要刪除使用者上述新增的使用者
mysqODELETE FROM user WHERE user=V
Query OK, 1 rows affected (0.01 sec)
DROP, CREATE, DELETE, INDEX ON
FIED BY ’mypwd ,;
vww ,可以使用下列 指令:
v’ and host= , www.mydomain„com ,
317
:礙
FreeBSD 入 D 嫌相 []□
在新增或刪除删機,國 MySQL 2前祕須指行下列指令來識匕
生效:
rnysql> FLUSH PRIVILEGES:
Query OK, 0 rows affected (0,01 sec)
15,3.4 如何更改使用者密碼
我們可以使用下列指令來更改自己的密碼 ••
㊉ # /usr/local/mysq!/bin/mysqladmin root-p password newpwd
上面指令中的使用者是 localhost 的 root ’新的密碼是 newpwd 。在輸入
指令後,會先詢問你舊的密碼。
我們也耵以使用具有管理使用者權限的胃叫 1 使用者登入 MySQL 後’
使用 UPDATE 指令來更改密碼:
(^) # /usr/local/mysql/bin/mysql -u root -p mysql
Welcome to the MySQL monitor. Commands end with ; or \g ,
Your MySQL connection id is 224 to server version: 3.23.49
Type 'help; r or W for help. Type V to clear the buffer.
mysql> UPDATE user set password=password(' 新密碼 ■)
where user= 使用者 T and 主機 ■;
318
Samba
網路芳鄰
> FreeBSD 入 P1 廳用 :H □□□□: +
16.1 安裝 Samba
在 MS-windows 系統中,我們可以使用”網路上的 芳鄰% 而 FreeBSD 中
也有軟體可以讓你在 windows 的網路芳鄰中看到 FreeBSD ,甚至可以讓
FreeBSD 存取 windows 的網路芳鄰寶料。這就是 Samba 這套軟體的 功能。
Samba 的安裝設定很簡單,我們可以使用 ports 來安裝:
(^) # cd /usr/ports/oet/samba
(^) # make install clean
安裝完後,組態檔的範本會放在 /usr/local/etc/smb.conldefauk ’我們可
以直接複製它來加以 修改:
(^) # cd /usr/local/etG/
# cp smb,confdefault smb.conf
Samba 的組態設定除了可以使用文字編輯軟體來修改 smb.conf 外’我
們還可以使用瀏覽器連到 Samba 以圖形化介面來 設定。
我們先來介 紹一下 smb.conf 檔案的內容’在 smbxonf 檔案中行首爲
或都是 註解。 我們可以 man smb.conf 來讀取設定說明。修改完
smb.conf 之後,我們可以使用指令 ^testparm" 來查看我們的設定有沒有語
法上的 錯誤。 以下爲 通 b.conf 的主要的設定說明:
320
chapter 16
Samba 福展旁 翻
#================= Global Settings - = ;
[global]
# workgroup 就是設定電腦的工作群組 °
workgroup = 企管系
# server string 相當於在 NT 中的電腦描述 * 就是你的電腦要叫什麼名字
server string = Samba 伺服器
# 這個設定可以限制連線來源,以增加安全。我們可以在這裡限制只有
# 本地的機器才可以連線。
; hosts allow =192.168.1. 192.168.2. 127
# 如果希望自動載入列表機清單,而不要一台台設定,可以設為 yes 。
load printers = yes
#如果你要自己設定 guest account ,可以將這裡的註解搴掉 * 並在
# /etc/passwd 中加入該帳號。如果不設定預設的帳號是 nobody 1
; guest account = pcguest
# Samba 會將每個使用者的使用記錄存成 I 叫使用者,因此我們在
#/var/log 中建立一個目錄來統一存放這些檔案。
log file = /var/log/samba/log.%tn
# log 檔最大是多少 Kb
max log size = 50
# 要使用哪一種安全模式。在 Windows 9X 的網路芳鄰中,我們可以設密碼,
321
0Fr®eBSD 入 ri 廳觸 =1
# 而在 Windows NT 中,我們可以設定使用者名稱及密碼。如果在這裡設定為
林 share ,就是只使用密碼:而設為 user 則是要輸入使用者名稱及密碼。
# 如果我們設為 user , client 端在瀏覽網路芳鄰時 , windows 會自動
# 輸 入使用者名稱為登入 windows 時所使用的名稱。我們必須要在 samba
# 中加入相對的使用者及密碼。我們等一下會以圖形介面說明如何設定。
security = user
#當 security = server 時,可以指定密碼伺服器
; password server =
井 Windows 98 ® WinNT SP3 以上會將密碼加密,我們必須將它設為 yes
encrypt passwords = yes
# 設定 Samba 可以使用多個介面,如果你有多張網路卡,可以在這裡設定
#假設你的 ip 是 140,115.25.25 ,子網路遮罩是 255.255.255,0 , 你珂以設
#為 140.115.25,25/24
i nterfaces = 192.168.1.1/24
# Windows Internet Name Serving Support Section:
;wins support = yes
# WINS Server - 設定 WfNS Server
;wins server = w.x.y,z
# for Traditional Chinese Users
# 要在網路芳鄰中使用中文必須加入下列設定
client code page=950
; coding system=cap
valid chars = 0xb9
322
chapter 16
Samba 網路芳 _
#===== - ========-=== Share Definitions ;================
# 這個區斷是用來設定我們要分享的資料來。在這個區斷中,有幾個設定的
# 範例司以讓我們參考。例如,我們要分享
# 目錄的分享名稱為 H 共享 軟體% 只可以譎审
# 碼,設定為 guest ok=yes 必須要有 securi
的目錄是 /home/share ,設定該
不能寫入,而且不必使用密
ity = share 的配合
#
[ 共享軟體 1
path - /home/share
guest ok = Yes
wirteable =no
browseable = yes
# 另一個範例,假設我們要 _ 個上傳匾,分
#用的帳號是 friend ,我們必須先用 vipw 建 :
# friend:*:60000:65534::0:0:Samba user:/h
#接著再以指令 smbpasswd -a friend 來建
享路徑為 /home/upload » 哥以使
立 friend 的帳號 1 加入下行
ome/upload:/sbin/nologin
立密碼。然後再修改 upload 目錄
# 的權限 chown friend /home/upload
[上傳區]
path - /home/upload
username ~ friend
read only - No
對分享的資料夾除了要在 samba 設定你想要的權限外’對於該目錄在
UNIX 系統上的讀寫權限也要配合。如果你在 Samba 中的設定都正確 ’
卻發現無法對該資料來寫入,很可能是在系統中的權限沒有正確設定 5
必須以 chmod 來加以修改。完成了設定之後,我們可以啓動 Samba 了:
# /usr/local/etc/rc.d/samba.sh.sample
323
_ 0iFroeBSD 入門應枏 ] □]
如果要在一開機就啓動 Samba :
v "— y # cp/usr/local/etc/rc.d/sarnba.sh.sampIe /usr/local/stc/rc,d/ sBtnbs.sh
16.2 使用 swat 設定
除了使用文字編輯軟體來修改 smb.conf 外,我們可以使用 Samba 內建的
swat 來進行設定。首先編輯 / etc / inetd.conf ,將最下方 swat 的註解拿掉:
swat stream top nowajt.400 root /usr/Iocal/sbin/swaf swat
接著再確認 / etc/services 中有沒有下面這一行,如果沒有則自行加入:
swat 901/tcp
最後重新啓動 inetd ^
® # kill -1 'cat /var/run/inetd.pid 1
然後就可以使用瀏覽器以 port 901 連到 Samba Server 了。假設 Samba 的
ip 是 192,168.0.1 ,則輸入 http ://192-168.0. 1:901 >被要求輸入帳號密碼
時,請輸人 root 及其密碼。接著出現圖 16-1 的畫面:
324
chapter 16
Samba 網路芳鄰
jfil ^
irir
鑫 _ e 0 # a 鸢
4ALS SCARES PRINTERS STATUS Vl£W PASBWORD
HOMi
Welcome to SWAT!
dtoose accnHgunaoti Ktto&ufiikioc^^ tb« ibar* bullom
Sairba E^uinentation
4
m i^i
我們選 GLOBALS 來看全域設定 =
m 16-2
325
FreeBSD 入 n 應用 厂匕
il 裡的 每一個 選項,我們都可以參考 / usr / local / etc / samba . conLdefaults 來設定,
設定完後記得要 11 Commit Changes " 來使設定生效。
如果要開放一個新的目錄,我們可以選 SHARES 來設定分享的寳 料夾:
我們可以在 Create Share 攔位中建立要分享的賣料來名稱,再按 Create
Share " 來設定。或是選擇 "Choose Share " " 11 Delete Share " 來選擇或刪除已
分享的目錄。
其他的各項功能選項說明如下:
M PRATERS :設定列表機。
_ STATUS :查看 Samba 的狀態,可以在這裡重新啓動 Samba 。
H VIEW :觀看設定後的 smbxonf 檔:
M PASSWORD :設定使用者及密碼。
以設定新的使用者爲例,如果我們要建立一個新的使用者 friend :
Server Password Management
Rt,lype N*w Pass 剌 d:
Osaai^Pissw^ ] AtfelWeyTJjer | PtdflcUas | | |
m 16-4
326
chapter 16
Samba_f^_
使用者 friend 必須己存在於 /etc/pas3wd 中,否則要自行以 vipw 建立:
fnend:* : 60000:65534::0:0:Samba user/home/upload:/sbin/nologin
建立之後就 5J 以在上圖中 User Name 中輸入 friend 並密碼 ° 這個功能取
代了使用 smbpasswd -a 來建立帳號的功能。
如果有任何問題,或是想知道更多關於 Samba 的設定,可以到 Samba
網站 (http://www.samba.org/) °
16.3 Windows 設定
MS-windows 系統的設定方面,滑鼠右鏈點選桌面[網路上的芳鄰]-> [內容]
mu-s
必須要有 Client for Microsoft Networks S File and printer sharing for Microsoft
Networks ° 如果要設定使用者名稱,在主網路登入請選 Client for Microsoft
Networks 0
327
|^」Fr ❼ eBSD 入鬥應用 「] □ □ '
工作群組及電腦名稱的設定如 F :
_ 16-6
如果你設定某個目錄必須輸入使用者名稱,但在瀏覽該目錄時卻怎麼輸
入密碼都沒有用,耵能是你在進入 windows 時所使用的名稱不正確:
0 說明 ®
fH 執行 ( E ) …
V 登出 <L)Edpr,. 、
fill
圖 167
這時候就必須先登出原本的使用者,再以該目錄要求的使用者名稱登
入 0
328
chapter 16
f^J Samba 網路旁鄰
16.4 存取 MS Windows 的網路芳鄰資料
如果您要使用 FreeBSD 來存取 MS Windows 的網路芳鄰資料, FreeBSD
中內建有 mounusmbft 這個工具, pJ 以讓我們將所要存取的主機及其目錄
掛在檔案系統中。掛入後,存取的方式就好像檔案位於硬碟中 一樣, +
分方便,而且對於中文的存取也沒有問題。 mount^smbfs 是在 4,5-
RELEASE 之後才內建的,如果您的 +統在 4.5-RELEASE 之前,您必須
要自行從 ports 中安裝 /usr/ports/net/smbfs 0
在使用 mouncsmbfs 之前,我們_須先在核心設定中加入下列幾個選
項,並重新編譯核心:
# SMB/CIFS requester
# NETSMB enables support for SMB protocol, it requires
# LIBMCHAIN and UBICONV options.
# NETSMBCRYPTO enables support for encrypted passwords,
options NETSMB #SMB/CIFS requester
options NETSMBCRYPTO #encryptod password support for SMB
# mchain library, it can be either loaded as
options LIBMCHAIN
# Kernel side iconv library
options UBICONV
options SMBFS
#SMB/CIF
KLD or compiled into kernel
#mbuf management library
S filesystem
編譯完核心並重新啓動後,便 m 以使用了
假設我們要存取的主機寶料如下:
329
FreeBSD 入門應用
_ IP : 192,168.0.2
國 電腦名稱:内務總管
H 要掛入的分享目錄 : software
_ 掛入系統中哪一個目錄 : /mnf
我們可以使用下列指令來掛;^ :
® # mount_smbfs-i 192.168.0.2 -N 7/ 内務總管 /software/mnt
這裡的參數 I 表示指定 IP 位址,參數 N 表示不須密碼驗證。如果您所
要掛入的分享資料夾需要密碼認證,則不要加參數 N 。我們在掛入別台
電腦的資料夾時,如果沒有指定使用者名稱,內定會以目前所使用的帳
號。如果我們要使用別的使用者名稱,可以使用下列方式:
# mount 一 smbfs -I 192,168.0.2 ’//use 「 name@R 務總管 /softwareV/mnt
將分享的資料夾掛入後,我們就可以使用 FreeBSD 檔案處理的指令,諸
如 cp 、 mv 等來抓取我們所要的檔案,就像是從本機硬碟中使用檔案一樣。
330
chapter
FreeBSD 入 1-! 應_口 □□□□—_ 1 _
17.1 槪論
有人說:「沒有不安全的系統,只有懶惰的管理者。」每個系統都有耵
能會出現漏洞,而有安全性的漏洞產生時,發行的單位都會立即發佈通
告及修補的方式,而系統管理者的職責便是要隨時注意是否需要更新漏
洞、隨時注意系統是否有異常的訊息。
FreeBSD 相對而言雖然是比較安全的作業系統,但是有時候問題不是在
作業系統本身,而是所安裝的軟體。在 FreeBSD 中常見的情形是安裝非
FreeBSD 內定的軟體,但該軟體被收錄在 ports 中, FreeBSD 也會提出警
告。因此,我們必須到 FreeBSD 的網站上查看是否有系統安全的消息’
網址是 http:/Avww.freebsd.org/security/index.htm] 。當發現問題時’可以依
照發佈的文件中所提供的修正方式來進行修補。
基本上只要電腦電源打開,系統就沒有安全的一天,更何況要連上網路
提供服務。系統安全的範圍很廣,從硬體設備的保全、人員管理、網路
規劃、到系統本身的管理,我們並不打算說明如何制定一個安全性政策
,也無法在這裡說明所有系統安全的相關議題,我們所提及的只是筆者
在 FreeBSD 使用上的建議 0 如果想要更多 FreeBSD Security 的資訊,可
以參考 FreeBSD Handbook ^我們在安裝 FreeBSD 時己經將 doc 安裝在
/usr/sham/doc 中,你可以使用 lynx 來觀看 FreeBSD 的文件。例如:
#]ynx/usr/share/doo/en_US.IS08B59-1/books/handbook/security.htm!
系統安全並不局限在如何防止他人入侵,對於防止系統內部問題的產生
一樣重要。主要的概念就是要讓我們的系統能正常的提供服務,並且對
於我們不想讓他人取得的資訊加以 保護。 然而,爲了系統安全往往必須
限制某些功能的使用,而犧牲了便利性。身爲系統管理者往往因爲對於
332
chapter 17
系統安全~~
系統限制太多而受到來自使用者的抱担,在取捨上本來就不是件容易的
事。正因爲如此,一個盡責的管理者在行事上必須具有高度的抗壓性及
對安全性的偏執。
17.2 系統管理
17.2.1 執行程式的路徑
有沒有注意到當我們要執行所在目錄中的某一個程式時,例如,在執行
所在目錄中的 myscript.sh ,我們必須要打 ./myscript■ sh 。預設的 PATH
中,並沒有將所在目錄 1 V_ 加入路徑中。如果把 V_ 加入 PATH 的設定中 ’
可能會產生安全性的問題。如果使用者在 /tmp 中加入一個名爲 Is 的 shell
script ,內容爲 rm -rf Msr 1 而我們又將 V 加入路徑中,當以 root 在 /tmp
中執行 Is 指令時,後果可想而知 ° 因此 ’ 我們在執行指令時’最好能指
定路徑名稱,如 /bin/ls ? 並撿查在 shell 設定中是否有將 V f 加入路 徑中:
#echo$PATH
/sbin:/bin:/usr/sbin:/ysr/bin:/ysr/games:/usr/local/sbin
爲了避免 /bin 及 /sbin 等重要執行檔遭到修改,我們可以爲這些檔案設
定禁止修改的 schg flag :
(^) # chflags schg /bin/*
# chflags scgh /sbin 广
當然,設定了 schg 之後,我們要轉 Kernel Security Level 調高到 1 以
333
j FraeBSD 人 n 應用 □—
上’這樣連 root 都不可以移除 flags 。不過設了 sclig 之後,我們可能不能
執行一些指令,如 make world 等。
17.2_2 降低安裝軟體的風險
我們可以在網路上找到許多免費的軟體,這些軟體固然町以讓我們在系
統的使用上更加便利,但卻難保它們不會對系統安全造成任何危害。有
的軟體可能存在某些漏洞,即使在我們安裝前尙無任何安全性的問題,
曰後還 是有耵 能會被人發現軟體的缺陷。因此,我們應該盡可能不要安
裝一些雜七雜八的軟體,而安裝之後,一發現有安全性問題也要隨時更
新。
不要直接在重要的伺服器上 安裝一 套新的軟體,最好先在較不重要的電
腦上測試,沒問題後再安裝。另外,在安裝軟體時,應注意軟體取得來
源是否可靠。如果軟體提供 MD 5 或 PGP 的撿查,最好下載後先撿査,再
解壓縮。而安裝軟體時’最好取得軟體的原始碼來編譯,我們可以■覽
程式碼,以了解其架構。閱讀 Makefile 的內容,了解軟體將安裝的確認
位置,先確保程式不會在不該出現的地方產生。
17,2.3 kernel Security Level
Fi'eeBSD 中有所謂的 Security Level ^ 它掌控了系統核心的行爲運作。只
有超級使用者可以使用指令提高 Secmity Level ^但不能降低它。如果要降
低它必須在 rc.conf 中設定,並重開機。以下爲各 Secruity Level 的意義:
334
chapter 17
系統安全
^ -1 ^ 永遠不安全模式。這是預設値,如果設為,它將永遠以 level 0 的模式執
行。
画 § 0 : 不安全模式°使 兩者或 root 可以使用 chflags 來移除「不可更動 ( immutable )」
及「只能附加 ( append-only )」 的 flags ° 所有的裝置只能依其權限來存取。
|@ 1 : 安全模式。不可以移除「不可更動 ( immutab 〖 e >」 及「只能附加 ( append-
only)j 的 flags °不可以手動載入或移除 LKM ,使用 , /dev/mam, and /dev/kmem
只能為唯讀,且不能 newfs 已掛上的檔案系統。
_ 2: 高度安全模式。除了和安全模式同樣的限制外,不管硬碟是否掛上,都不可以
newts 。另外, kernel time 的改變限 制在一 秒内,如果超過,會記録 'Time adjust¬
ment damped to +1 second'
H 3 : 網路安全模式。除了和安全模式同樣的限制外,還有 IP 封包過濾的規則(參考
ipfw 及 ipfirewall) ,而且不可以調整 dummynet 的設定。
我們可以使用 sysctl 來顯示或設定 Security Level :
# sysGtl kern.securelevel
如果要將 Security Level 設爲 1 :
(^) # sysctl -w kernel.securelevel=1
當我們將 Security Level 設爲 1 以上時,我們會發現沒有辦法安裝新的
kernel (因爲不能移除 schg flag ,也沒有辦法使用 Mg5con 、 X Window 等
軟體。如果我們的 FreeBSD 只作爲伺服器,而不使用 big5eon 或 X
Window 的話,可以將 Security Level 昨値調高 一點 。
如果要在開機時設定 Security Level ,可以在 /etc/rcxonf 中以下面二行
來 設定二
335
in
FreeBSD 入 « 應用」
kem_secureleveLenable="YES" # 是否啓動 Security Level
kern_securelevel= M 1 n # [eve 〖從 -1 到 3
17.2.4 檢視系統記錄
在 / var / log 中,記錄了許多系統的資訊,我們應該要時常撿視它們。這
些檔案如下表:
adduser
使用 adduser 的 記錄。
cron
定時排程的記錄。
mailog
郵件記錄。
messages
系統訊息記錄。
security
安全性記錄,如防 火牆。
除了系統的記錄外,如果有提供其他服務,會有更多的 log 資料。
如果我們_其他程式爲留卜 log 檔,最好在 / etc / newsyslogxonf 中設定
定時備份壓縮,以免擋案過大。另外,這些備份的 log 檔在
newsyslog . conf 中設定權限 ( mode :! 時,最好設爲600,以避免其他使用者
可以讀取。
FreeBSD 預設每天定時執行-些分析的工作,並將結果寄給 root ,建議
你最好每天閱讀它們。我們可以在 / e tc / mail / aMases 的開頭中加入下面這一
行:
root : me @ my.domain
將 my @ my.domain 改成你的 email
都會自動轉給所設定的信箱。 nx>t 每
ty check output" 這二封信,這是依照我 j
設定的定時執行工作輸出的結果。在 daily 執行的任務中
定定期清除 /tmp ,原則上,在開機時系統會清理 /tmp 。如果我們不常重
開機,町以在 periodic.conf 中設定每天清理 Amp °
chapter 17
系統安全
如此一來,所有寄給 root 的信件,
會收到 "daily run output” 及 M securi-
們在 /etc/defaults/periodic.conf 中所
預設並沒有設
17.2.5 資料的保全
UNIX 系統的安全防護中,第一道防線是電腦實體的安全防護,防止不
相干的人接觸電腦及周邊設施。如果很不幸的,外人可接近系統時,第
二道防線是系統密碼保護,我們將在下一章說明帳號的防護。然而,如
果密碼洩露或被破解,還有第三道防線,就是在 UNIX 系統中的使用者
權限及檔案權限控制。如果某一個使用者帳號遭到入侵,我們能限制其
活動範圍及賣源的存取。而第四道師線就是將重要的資料加以編碼保
護,即使資料被使用者 竊取, 至少還 p — 道防護措施。而 最後一 首防線
就是資料備份了,我們平時應該有完 k 的備份計畫,一旦系統發生錯誤
或是被摧毁,至少還可以復原。
我們先來談談資料編碼加密的方法
我們的檔案加密。例如,有一個檔名 :
鎗 ( key) 是 mykey 這個字串,加密後 f
列指令:
我們可以使用 crypt 這個指令來爲
爲 myfile.txt 的檔案,我們使用的金
的檔案名爲 myfilexyp J 可以使用卜
(^) # crypt mykey < myfile,txl > myfilexyp
337
FreeBSD 入 n 應相匚
加密後,就可以將 myfile . txt 刪除。如果日後要解密,只要執行下列指
八 *
■R ,
<$) # crypt mykey < myfile.cyp > myfiie.out
crypt 是一個歷史悠久的編碼軟體,實際上並非+分安全,不過我們可
以多加密幾次,讓檔案加密後再加密,只要記得所使用的 key 就好了:
# crypt mykeyl < myfrle.txt | crypt mykey2 | crypt mykeyS > myfile.cyp
如果要解密,只要再反過來即可:
# crypt mykey3 < myfile.cyp | crypt mykey2 | crypt mykeyl > myfile.out
除 J crypt 外’我們也可以使用其他比較好的編碼程式,例如 pgp 。 pgp
並非 FreeBSD 內附的軟體,但我們可以使用 ports 來安裝它:
tS) #cd /usr/ports/security/pgpS
# make install
安裝完 pgp 之後,我們必須先產生 key pair 。請執行 pgpk -g :
$ pgpk -g
Choose the type of your public key:
V DSS/Diffie-Hellman - New algorithm for 5,0 (default)
2) RSA
Choose 1 or 2: 1 ( 選擇要使用哪一種方式編碼)
Pick your public/private keypair key size:
(Sizes are Diffie-Helfman/DSS; Read the user's guide for more information)
338
0
chapter 17
系統安全
1) 768/768 bits- Commercial grade, probably
2) 1024/1024 bits- High commerciai grade, s
3) 2048/1024 bits- 'Military 1 ^ grade, secure for
4) 3072/1024 bits- Archival grade, slow,highe
Choose 1, 2 T 3 or 4, or enter desired number
(768- 4096): 3 《選擇金鑰的長度)
{Producing a 1024 bit DSS and a 2048 bit D
not currently breakable
ecu re for many years
forseaable future(default)
: st security
of Diffie-Hellman bits
ress. For example:
tffie-HeHman key)
You need a user ID for your public key. The desired form for this
user ID is your FULL name, followed by your E-mail address enclosed in
<angle brackets>, if you have an E-mail addr
Joe Smith <user@domain.com>
If you violate this standard, you will lose much of the benefits of
PGP 5.0’s keyserver and email integration.
( 輸入使用者 S 稱)
Enter a user ID for your public key: John Chung <john@mydomain.com>
Enter the validity period of your key in days
0 is forever (and the default): 0 < 輸入有效期
rom 0 - 999
1 , 0 表示永久)
You need a pass phrase to protect your private kay{s).
Your pass phrase can be any sentence or phrase and may have many
words , spaces, punctuation, or any other pri
Enter pass phrase: mykey (輸入一個通行碼
Enter again, for confirmation:
Enter pass phrase: ( 再輸入一次)
Collecting randomness for key …
ntable characters.
例如 mykey)
339
FreeBSD 入門應 相口 L □ J L ' □ □ □ T
We need to generate 541 random bits. This is done by reading
/dev/random. Depending on your system,you may be able
to speed this process by typing on your keyboard and/or moving your mouse.
541 ( 開始在鍵盤上隨便亂按,來隨機 產生)
We need to generate 541 random bits. This is done by reading
/dev/random. Depending on your system, you may be able
to speed this process by typing on your keyboard and/or moving your mouse.
0 * -Enough, thank you.
Keypair created successfulJy.
if you wish to send this new key to a server, enter the URL of the server,
below. If not, enter nothing. { 直接按 Enter}
產生了 pgp key 之後,我們就可以使用 pgp 來編碼了。
pgpk -X user -o outfile
取出 user 的公開金鑰全 outfile 中
pgpk -a keyfile
將公開鑰匙 keyfile 加入鑰匙環中
pgpk -fl user
印出 user 的公開金鑰
pgpe -r user -at -o outfile txtfile
加密 txtfile 至 outfile
pgps -u use -ot -o outfile txtfile
加簽 txtfile M outfile
pgpv -o outfile cypfile
解密 cypfile 至 outfile
働[ I ,我們要將 myfileixt 加密,輸出檔爲 myfilexyp :
(^) # pgpe -r john -o myfilexyp myfile.txt
适裡的使用者是 john ’ 他的全名是 John Chung ^ john @ mydomain . cx ) m > ,我們
只要輸入名字的部份關鍵字即可。而解密可以使用:
340
chapter 17
系統安全
C ® # pgpv -o myfile.out myfile.cyp
上面的指令會問你通行碼,輸入後即完成解密。目前 PGP 的主要應用
是在於網路傳輸文件的 加密, 我們可取使用它來爲 E - mail 加密, PGP 的
用法很多,請自行 manpgp 。
不過,即使加密也無法對抗資料的損毀,對於放在電腦中的重要資料,
必須維持完整的備份。就算系統都沒有問題,我們永遠不知道哪天會因
爲我們自己失手刪除重要資料,或是資料遭到破壞。需要備份的不只是
程式所產生的資料,自己開發的程式 I 也應該備份。否則即便有了資料可
以復原,而沒有程式耵以執行。
舉例而言,一個 BBS 站應該要備份的除了使用者資料、精華區及看版
文章外, BBS 本身運作的程式也要備份,畢竟那是我們精心撰寫或修改
的結晶。備份的寶料不應該和運作的系統放在一起,不僅不應放在同一
台電腦中,最好不要放在同一個房間、同一棟大樓、同一個城市,甚至
同 一 ■個 國家。
17.3 帳號管理
17.3.1 憤選合宜的密碼
對於系統安全的維護,密碼耵以說是最基礎的防線,因此愼選密碼絕對
是必要的。不管是超級使用者或是一般的使用者,在設定密碼時,都應
該注意一些原則:
341
— _ Fr 抑 路 30 入《_用[] □ n n LJ
^ 不要使用和帳號相同的密碼。
_ 不要使用字典中找得到的單字,也不要把單字艮轉後當成密碼 D
_ 最好大小寫混用,英文及數字混合,並加入特殊符號。
M 不要使用自己、老婆、小孩的生曰、身份証字號等。
M 不要使用鍵盤上連續的字母,如 asdf ^
圔 不要把密碼寫下來。
一個 好的密碼應該是容易記憶,不必另外以紙筆記下的。例如,
Gohiyim (Get out here if you aren’t me) ,或 m4@xj4# (以注音輸入法輸入
「記錄」 ) 。總之就是要讓別人意想不到,這裡提到的密碼也不要使用。
我們可以使用一些工具來找出系統中密碼太簡單的使用者,例如位於
/usr/ports/security/crack 這套軟體 0
17.3.2 控制 root 的使用
在 FreeBSD 中,如果要使用指令 su 來取得 root 的權限,必須將該使用
者加入 wheel 群組中。但是 s U 並未對使用者執行過的指令留下記錄,如
果系統中有許多使用者,我們要針對不同使用者給予不同的權限,也不
是 su 所能做到的,因此我們可以使用 sudo 。關於 sudo 的使用,請參考
5.5.3 使用者管理一章中「控制 root 的使用」。
root 帳號不應該可以使用 telnec 、 ssh 、或 ftp 的方式登入,在 /etc/ftpuser
中應該有 root 的帳號來限制 root 使用 ftp 登入。而在 /etc/ssh/sshd_config
中,應該有 PermitRootLogin no 的字樣來限制 root 使用 ssh 登入。我們注
意的就是避免 root 能從網路上直接登入,以減少安全性的問題。在
342
chapter 17
系統安全
/ etc/ttys 中,預設了 root 只能有某些 dy 登入系統,這種允許 root 直接登
入的 tty 設定中有 secure 的字樣°例如, ttyvO 指的是 console ? 該行設定
最後有 secure ? 表示 root 可以從該 tly 登入。而 ttyp * 等是遠端登入的
tty f 所以禁止 root 直接登入。
17.3,3 限制系統資源的使用
如果使用者登入系統後,執行大量消耗 CPU 、記憶體或磁碟的程式,
我們的系統將無法正常提供服務,因此,限制使用者對於系統資源的存
取是必要的。針對系統所提供的服務,來限制系統的資源,並避免提供
不必要的服務。例如,以一台單純的網頁伺服器、 DNS 伺服器而言,並
不需要開放使用者遠端登入的服務。遠端登入提供使用者對系統有直接
的操作,而往往也是漏洞開放的起點。_般使用者對於安全的要求不一
定和系統管理者的期望相符,他可能會將密碼寫在自己辦公桌上、或是
登入系統執行一些不必要的程式。如^迫不得已一定要爲使用者在系統
上開一個帳號,也應該視情況限制其便用遠端登入。如果只要爲使用者
開一個 FTP 帳號或是郵件帳號,只要設定使用者所用的 shell 爲
/sbin/nologin 即耵。例如,在 /etc/master.passwd 中,使用者 jack 的帳號寶
料如下:
Jack : Bk 5 AI 4 MiRKDJ 4:1 000:1 000::0:0 :Tom Chang :/ home / tom :/ sbin / no[ogin
就算使用者不能登入,但能使用磁碟空間,所以還是要爲使用者設定磁
碟配額。雖說現在硬體價格 便宜, 但若每個使用者都有數百 MB 的郵
件,集合起來也十分驚人。關於磁碟配額的設定,請參考 5.2 ,使用者管
理一章中的「磁碟配額」。在限制使用者郵件容量方面,最簡單的方式就
343
」 _g): FreeBSD 入 W 應用 □ □ □ □ „_
是將使用者的郵件從 /var/mail 中搬移到使用者的目錄中,再對使用者目
錄做磁碟配額的限制。例如,使用者 jack 的家目錄位於 /home/jack ,我們
耵以:
# cd /var/mail
# mkdir /home/jack/mail
# mv /var/mail/jack /home/jack/mail/
# In -s /home/jack/mail/jack
如此就可以將使用者原本的郵件放在其家目錄下,我們只要將該檔案再
鏈結到 /var/mail 中,如此就可以不必更動郵件軟體的設定,而達到限制
空間的效果了。
如果你堅持要讓使用者登入的話,除了磁碟配額外,應該要再爲他們設
定其他系統資源的使用限制,例名 CPU 的使用量、記憶體等。我們可以
經由設定 /etc/loginxonf 來做到°而 logirLConf 的設定,可以參考安裝設定
篇中, /etc 下的檔案介紹。
17-3.4 限制 crontab 及 at 的使用
使用者可以用 crontab 和 at 指令來安排自己定時執行的工作。一般的使
用者並不需要擁有 cmmab 或 at 的執行權,我們可以爲這個指令設限,只
允許必要的使用者執行。如果要限制使用 crontab ,只需要在 /var/cron 目
錄中,加入 allow 或是 deny 這個檔即可。例如,我們只允許少數幾個使
用者執行 crontab ^我們可以在 /vra/cron 目錄中編輯檔名爲 allow 的文字
檔,內容爲該使用者的名稱。相對的,如果我們要限制少數幾個使用者
執行 crontab ^只要編輯 deny 這個擋即可。而指令 at 的限制也是一樣,不
344
chapter 17
安全-
同的只是允許執行 at 指令的名單是 / var / at / at.aJIow ^而拒絕的名單是
/ var / at / at . deny 。
17.4 網路管理
17.4.1 關閉不必要的服務
一台電腦可以提供的服務很多,我們要做的是在許可的範圍內,盡量減
少所提供的服務。許多安全性的問題來自於非第三者 (Third Party) 所提供
的軟體,如果沒有必耍就停止這些服務吧。
我們先來看一下目前系統提供哪些 服務:
$ netstat -ajgrep LISTEN
tcp4 0 0 *.pop3 LISTEN
tcp6 0 0 'telnet V LISTEN
tcp4 0 0 'telnet V LISTEN
tcp6 0 0 'ftp '* LISTEN
tcp4 0 0 'ftp LISTEN
tcp4 0 0 'http V LISTEN
tcp4 0 0 'https LISTEN
tcp4 0 0 *.smtp V LISTEN
tcp4 0 0 *,ssh V LISTEN
這裡所看到的就是目前系統中所提供的服務。我們可以撿視一下有沒有
不必要的服務’並將它移除。最明顯的例子是 sendmail 7 如果我們的系統
¥freeBSD 入 r* 應 mi] □ □□
不提供郵件處理,就將它停掉吧。即使我們要提供郵件服務,也應該限
制寄信者的身份或來源位址。一台沒有設限的郵件伺服器,最後的結果
是惡名昭彰,再也沒有機器會願意轉送我們發送的信件。如果我們要停
止 sendmail ,只要在 /etc/rcxonf 中加入下面這 一行:
sendmaii_enable =,t NO ,r
我們可以使用 sysctl 來設定當外部機器要使用我們沒有提供的服務時便
記錄下來,例如有人嘗試掃我們的 port ,或者我們沒有開放 telnet ^卻有
人嘗試從 port 23 連接,在 /var/log/messages 中便會留下 記錄。 這個設定
只要執行下列指令 :
# sysctl -w netJnet.tcpJogJn_vam=1
# sysctl -w neiinet.udp.logJn_vaio=1
如果要在開機時就啓動這個設定,可以將上面二行指令加到 /etc/rcJocal
或是在 /etc/sysctLconf 中加入下面 二行:
net.inettcp,log_in_vain=1
netinet.udpJogJn_vain=1
另外, FreeBSD 自從 4.4-Release 起,預設將 telnet 及 ftp 的服務也停止
了。原因除了 telnet 本身有漏洞外(己修補),就是這些以明碼方式在網路
上傳送使者帳號及密碼的服務其實是系統安全的另一個潛在危險。我們
可以檢視一 "下 /etc/inetd.coiif ’發現每一行前面都有註解符號’也就是
說目前根本沒有任何經由 inetd 啓動的服務,我們可以經由 /etc/rcxonf 加
入下列這一行來停止 inetd 服務:
inetd^enabJe-'NO'
346
chapter 17
系統安全
如果我們必須使用遠端登入來管理某統,不要使用 telnet ,請使用 ssh 。
ssh 對於在網路上流動的資料有加密保護,比起 telnet 安全多了。如果眞
的有必要使用 inetd 來啓動某些服務,例如 ftp ,建議將使用情形記錄下來
。以 ftpd 爲例, FreeBSD 在執行 ftpd 時,內定加上參數 -1 ,我們要做的
只是修改 /etc/syslogxonf °編輯 /etc/syslogxonf 加入下面這 一行:
ftp.* /var/log/ftpdJog |
這個設定會讓所有登入成功及失敗的記錄都寫在 /var/log/ftpdJog 這個
檔案中,我們必需先手動建立 ftpd.log 這個檔案:
(S) # touch /var/bg/ftpd」og
爲 J' 避免 log 擋肥大,我們在 newsysiogxonf 中加入 fipdlog 的備份移轉:
/var/log/ftpd.log 600 5 500 * Z
另外,對於 ftpd 還有一個小建議,爲了避免使用者 ftp 登入後可以到系
統所有資料夾,我們最好將使用者的活動範圍限制在自己的家目錄中,
這就叫做 chroot °方法很簡單,只要建立一個檔案 /etc/ftpchroot 1 內容爲
使用 chraot 的使用者名稱即可。
其他的 inetd 服務,能不用就不要用,尤其是 telnet 。如果要管理電腦,
我們可以使用 ssh 。 |
爲了防止一些 DoS (Deny of Service ) ,建議最好把 ICMP 重導向 ( redi *
reel ) 的封包丢棄,我們可以在 / etc / rc . conf 中加入以下的 設定:
icmp_drop_redlrect= H YES rt # YES 表示丟棄 [CMP REDIRECT 封包
icmpJog_redirect="YES,_ # YES 表示將丟棄的封包記錄下來
_ : Fro®BSD 入門瞳 用口 □ ==
17-4.2 使用 ssh
ssh 是一個好用的軟體, FreeBSD 安裝預設啓動 sshd 。我們可以撿查一
下它是否己啓動:
(^) # netstat -a | grep ssh
如果沒有,請在 /etc/rcxonf 中加入下面這一行:
sshd_enable= w YES _,
sshd 預設並未將使用者登入的資料記錄下來,不過我們耵以修改
/etc/syslog.conf 來記錄,請找到 security 的項目,並將它修改成下面 這樣:
security *;auth, info /var/log/security
如此一來,當使用者利用 ssh 登入時,便會記錄在 /var/log/security 中。
17 A3 TCP Wrapper
對於 inetd 所提供的服務,我們可以使用 TCP Wrapper 來限制 TCP 協定
連線來源。讓我們來檢視一 F /etc/hosts.allow 這個 檔案:
ALL: ALL: allow
ftpd : localhost : allow
ftpd : .nice.guy.exampfe.com : allow
ftpd : .evil.cracker.examplexom : deny
ftpd : ALL : allow
語'法: daemonJist : client — list : option
0
chapter 17
其中 daemonjist 是我們在 / etc / services 中定義的服務名稱 , clientJist
是來源位址, option 則是我們要給的權限,簡單的設定如 allow (允許)、
deny (拒絕)。 ALL 可以代表所有服務或來源。這個檔案的設定是以先入爲
主 (First match wins ) 的方式,也就是以先設定的項目爲優先。
在檔案開頭的地方有一行是 ALL : ALL : allow ,表示預設所有服務允許
所有來源使用。如果我們要使用 TCP Wrapped ,必須先將該行註解,再針
對每一個服務來設定開放的權限。以 ftpd 爲例,假設除了 badxmckencom
以外,其他人都可以使用 ftpd 服務,我們可以這樣設定:
ftpd : badcrackencom : deny
ftpd : ALL : allow
又如,假設我們的 telnet 只要讓 192. 168 众 1 及 mydomain.com 網域卜的
電腦可以使用:
telnetd : 192.168.0.1 .mydomain.com : allow
telnetd : ALL : deny
TCP Wrapped 只針對 TCP 服務,果我們要功能更強大的防火牆,可
以使用 ipfw 。
17.4.4 ipfw
ipfw 是 FreeBSD 內附的防火牆軟體,苟直接針對 IP Layer 來做網路控制,因此
可以說是最有效的方法。在使用 ipfw 之前,我們必須先重編核心。關於防火牆的
設定,請參考第13章 「 NAT 及防火牆 J 。
349
FreeBSD 入門靡用匚
350
chapter
疫 FreeBSD AM 麵 □ □□□□□- :
18.1 基本 UNIX 指令
18.1.1 槪論
在 UNIX 系統中,使用者對於系統的操作是透過 "Shell" - Shell 就好像
是 DOS 中的 command.com 或 Windows 中的 explorer.exe 0 FreeBSD 內定
的 Shell 內是 sh 、 csh 、 tcsh , Shell 在接收到指令之後,會將它轉換成機器
可以讀的語法來對系統進入操作。
如果我們以 root 登入,所看到的 shell 提示符號爲^,如果以一般使
用者登入,所看到的提示符號依 shell 的不同會有差異。以 csh 及 tcsh 爲
例,我們看到的提示符號是。
在 UNIX 系統中,英文字母的大小寫會被視爲不同的東西,因此在輸入
指令或檔名時,大小寫的差異要特別 注意。 一般指定用法的格式大概如
下:
command (option(s)] [filename(s)]
command 是我們要執行的指令。 [ option ] 是我們可以加的參數,用 [J
包起來的意思是可以有參數,也可以不加參數。而參數之後,有可能是
檔名 [ filename ] ,並不是所有指令都要加參數或檔案名稱,不過格式大部
份都是依照這種順序。另外,如果要在命令列中以一行輸入多個指令,
每個指令間可以用分號 Y 分開。
352
chapter 18
指令應用
18.1.2 man
查看指令的使用說明。例如我們要看指令 mrni 的使用說明:
$ man man
使用哪一個指令,我們可以使用參數 k
如果我們只知道一個關鍵字,卻不知要
來查詢。例如我們要查詢 firewall 相關的指令:
(^) $ man -k firewall
man 在査詢指令說明時,預設會去找 / usr / share / man 目錄 F 的檔案,如
果我們要查詢的指令說明檔並不位於該目錄,我們可以使用參數 M 來指
定目錄名稱。例如我們要查詢指定 ab 的用法,該指令的說明擋放在
/ usr / local / apache/man ? 我們可以使用下列指令:
$ man -M /usr/looal/apache/man ab
我們看 tnmn 檔案時,常會看到像 man ( l ) 的格式,其中⑴表示該指令
的分類。依不同的類別,說明檔會存在 / usr / share / man / 不同的目錄下。例
如 (1) 的檔案是在 man ! 的目錄中。如果同一個名稱有二個不同的 man
file ,分別放在不同目錄,我們也可以加上參數來看不同的檔案。例如
crontab 有二個檔案,一個是 crontab ( i ) 7 另一個是 crontab (5) °當我們要
看 cumtab (5) 時,使用下列指令即可=
(^) $ man 5 crontab
當您使用 man 指令時,所輸出的結果大約如下=
353
E^FroeBSD 入門 _用口 □:]
NAME
is - list directory contents
SYNOPSIS
Is [-ABCFGHLPRTWabcdfgiklnoqrstuI] [file
DESCRIPTION
For each operand that names a file of a type other than directory, Is
displays its name as well as any requested, associated information. For
each operand that names a file of type directory. Is displays the nam
es
of files contained within that directory,as well as any requested, asso
-dated information. .
EXAMPLES
The following is how to do an Is listing sorted by size (and shows
why Js does not need a separate option for this):
Is -i I sort -n +4
Additionally, the -r flag to sort(1) may be used to get the results
sorted from largest to smallest (a reverse sort).
SEE ALSO
chflags(l), chmod(1), sort(l), xterm(l), termcap ⑸, symlink(7),
sticky(8)
_ NAME - 指令的闥單描述。
^ SYNOPSIS :指令用法,其中 [ 】所拮起來的内容表示該參敷可有可無,以 man Is
而言,我們看到卜 ABCR..] 表示可以使用參數 -A -B 等。
M DESCRIPTION :指令用法的詳細描述,包括各頃參數的使用及限制。
EXAMPLES : —些 用法的範例。
M SEE ALSO :列出其他和本指令相關的指令,我們可以從這些指令中得到更多相關
的資訊。
354
chapter 18
13.L3 Is
查看目錄資訊。
在 UNIX 系統中,/代表根目錄。當要使用某個目錄下的目錄時,每個
目錄之間要以/隔開。例如 / usr / bin 表示根目錄下的 usr 目錄下的 bin 這個
目錄。
另外, V 和 也有特殊意義。〃代表目前所在的目錄,而表示
目前目錄的上一層目錄 。 例如, ../ etc 表示上一層目錄下的 etc 這個目錄。
假設我們要查看根目錄下有哪些檔案:
$ls/
在 shell 中,有些符號代表者特殊的意義,例如*表示萬用字元,可以
代表零個或多個字元,而?代表一個字元。舉例而言,當我們下達 Is 指
令來例出檔案時:
$ Is myfile*
myfile myfile.exe myfile.txt myfile.txab myfi e.abap
$ is myfile.tx?
mytile.txt
我們可以看到使用符號*時,會列出所有開頭是 myfile 的檔案;而使
用?時,只會例出 myfile.txt °
但是當我們使用萬用字元來取代檔案名稱時,例如 Is / m * ,它不僅例出
符合目錄,還會列出該目錄下所有檔案。這時候我們可以使用參數 d 來
讓 Is 只列岀目錄而不列出其目錄下的檔案=
355
=gjFr«eBSD 入 P1 瞻用 □ □ □ = = 1
$ Is -d /m*
is 還有-些常用的參數如下,我們也可以同時使用多個參數,如 Is-lad:
a 列出所有檔案及目錄,包含檔名開頭為的隱 藏檔。
I 列出檔案的完整資訊。
F 依檔案及目録的格式不同加上符號以供區格,例如目錄則在目録名稱後加
上/符號;如果是可執行檔則加上 * ;如果是鏈結檔則加上@。
18.1.4 cd
所在目錄的切換。例如要切換目錄到根目錄:
$cd/
切換目錄的方式可以使用絕對路徑或相對路徑名稱。絕對路徑是指從根
闫錄開始,該同錄所在位置。例如 / usr / bin 就是一個絕對路徑。而相對路
徑是指相對於目前所在路徑而言,該目錄的位置。例如 ../ usr / bin 表示在
上一層目錄下的 usr / bin 這個目錄。另外,符號 11 表示使用者的家目
錄,如果要回到自己的家目錄,可以使用:
$ cd ~
如果只輸入 cd 和 cd 〜所代表的意義相同,都是回到自己的家目錄。我
們也可以符號%”之後加上使用者名稱,來代表該使用者的家目錄。例如
要切換到使用者 jack 的家目錄:
$ cd -jack
356
chapter 18
18.1.5 pwd
查看目前所在目錄名稱。例如:
$ pwd
/root
指令應角
18.16 cat
列出文字檔內容。假設我們要查看
/etc/rc.fi re wall
這個檔案的內容,我
們可以使用下列指令來列出:
$ cat /etc/rc.fi rewall
在 UNIX 系統中有一個轉向輸出的觀念。我們可以把指令輸出的結果轉
向到其他地方(如檔案)。一般指定的標準輸出是螢幕,標準輸入是鍵盤。
我們可以使用符號來將輸出轉到別的地方。例如,我們要將 Is 的輸
出結果存成檔案 resuiLbct :
6^ $ Is >resu lt.txt
上面的指令會建立一個檔名爲 resuft^txt 的擋案,並將 h 的結果置於該
檔中。如果所在目錄本來就有一個檔案名爲 result.txt ,該檔案原本的內容
會被清除。如果我們不想清楚該檔原本的內容,只是要把結果附加在原
本的內容之後,可以使用"》1。例如:
(^) $ is » result.txt
357
]
JE^rrMBSDAnMIRn □□□□□□「!
我們可以使用 cat 指定來做簡單的文字檔複製,例如將 / etc / rc,firewall
複製一份到自己根 S 錄下的 firewalLtxt :
(^) $ cat / etc / rc.fi rewall > 〜 /firewaN.txt
另外,我們也可以用 cat 來建立一個文字檔並手動編輯其內容:
$ cat >test.txt
在此輸入文字
輸入完後同時按 Ctrl + D 離開
18.1.7 more
以分頁模式來列出文字檔內容。當使用 cat 時,如果檔案超過一頁,畫
面一閃而過,看都看不清楚。這時候我們可以使用 more 這個指令來將它
分頁輸出。
$ more /etc/rc.firewall
輸出後,我們可以按空白鍵來看下一頁,或按 Q 來離開。
在 UNIX 系統中還有一個觀念是 pipe 管道,就是將一個指令的輸出結
果作爲另一個指令的輸入。例如,我們要査看 /etc/ 下的所有檔案完整資
訊’使用 Is -la/etc 時,發現資訊超過一頁,我們可以使用下列指令:
$ Is -la /etc I more
358
chapter 18
指令應用~~
T 是位於鏈盤右上角倒退鏈附近,和 1 Y 同一個鏈的符號。
18.1.8 less
less 也是以分頁來輸出檔案內容,和 more 不同的是它在輸出檔案全部
內容後並不會離開°我們可以使用 page down 及 page up 鏈來查看,要離
開時只要按 Q 鏈即可。
18.1.9 head
列出檔案開頭幾行,預設是輸出檔案開頭的 十行:
($) $ head /etc/rc.firewall
我們也可以加上參數 ti 來指定要輸出多_行。例如,如果要輸出前二十行:
(^) $ head -n 20 /etc/rc.fi rewall
參數 c 讓我們耵以指定要輸出檔案開頭多少 bytes (通常就是多少字元)。例如,
如果要輸出檔案開頭前+ 個字:
$ head -c 10/etc/rc.firewall
35 ?
", 0FraeBSD 入門應用 ] □ □ □
18.1.10 tall
列出檔案結尾幾行,預設是+行:
($) $ tail /etc/rc.firewall
我們一樣可以使用⑺或 - c 來指定要輸出多少行。
18.1.11 w
列出目前在線上的使用者資訊、時間、正在執行的動作等。
18.1.12 who
列出目前在線上使用者的寶訊,輸出的攔位和 W 略有不同。
18.1.13 date
列出及設定系統時間。如果我們要査看 □ 前 時間:
$ date
如果要設定時間爲2002年3月12日11點56分:
® $ date 200203121156
360
chapter 18
18.1J4cal
列出月曆。如果要列出當月月曆。
® Seal
我們也可以指定月份,例如列出2002年3月。
④ $ cal 3 2002
或是列出整年的月曆,例如2002年。
® $ cat 2002
18.1.15echo
輸出一個字串到標準輸出(通常是螢幕)。例如:
(^) $ echo string
我們也可以將輸出結果轉向到檔案:
(^) $ echo 'this is a test' >test.txt
這樣在 test . txt 中就會有一行字串 "this is a tesf 。
36
FreeBSD 入 P1 鼸用 □ □ □] :
18,1.16clear
清除螢幕。
18.2 系統管理
18.2.1 ps
在 UNIX 系統中,每個執行中的程式我們稱之爲程序 ( Process ) ,而 ps
這個指令就是用來看目前系統中正在執行的程序狀態。
$ ps
P[D IT STAT TIME COMMAND
45836 pO S 0:00.18 -tcsh (tcsh)
46104 pO R+ 0:00.00 ps
PID 欐位指的是 Process ID ^ 就是這個程序的編號,每個程序的編號都
是 獨-無二的: TT 是指登入的 tty : STAT 是該程序 B 前的狀態;而
COMMAND 就是這個程序是那一個指令所執行。
ps 不加任何參數時,只輸出自己在執行的程序,我們可以加上參數-
aux 來列出系統中所有使用者的程序及詳細資料。
$ps-au?c
USER
PID
%CPU %MEM
VSZ
RSS TT
STAT
STARTED
TtME COMMAND
root
1
0,0
0.1
552
148
??
ILs
4
2 0:00.17 int
root
23
0.0
0.0
208
8
??
IWs
-
0:00,00 adjk
a lex
6167
0.0
0,8
1332
988
pO
[
7:46
0:00,21 -csh
root
6241
0.0
0.8
1332
976
PO
D
8:03
0:00.17 su
362
我們來看看第一行所代表的意羲 :
^ USER :該程序的擁有者。
^ RID ' Process ID ,範園從0到65535。
|g %CPU :該程序目前佔 CPU 使用時 間的百 分比。
H %MEM :該程序佔用虛擬記憶體的百分比。
^ VSM =使用的虛擬記憶體大小。
|g RSS :使用的實體記憶體大小。
圔 TT :登入的 tty 。
圔 STAT :目前的狀態。
M STARTED :開始執行的時間。
矚 TIME :該程序到目前為止的 CPU 使用時間。
M COMMAND :程序是由哪 一個指 令執行卜
chapter 18
18.2.2 kill
kill 指令會送出一個訊號 ( Signal ) 給指定的程序,程序在收到訊號之
後,會依其要求來動作 D 可以使用的訊號如下:
SIG 名稱
代碼
思 聚
HUP
1
hang up , 通常 用來叫 程式重
pt 載入設定。
INT
2
intemip , 通知程序中止。
QUIT
3
quit , 通知程序離開 。
ABRT
6
abort ,中斷 程序。
KILL
9
non-catchable, non-ignorabSe kill » 直接通知 kernel 把該程序移除。
ALRM
14
alarm dock
TERM
15
software termination signal
, 通知程序結束。
363
_ _ gjFra 參 BSD 入 n 廳用 □— 」 I— : 1
一般而言, 每一 個程序都會預設接收到訊號是要執行什麼動作,如果我
們所送出的訊號在該程序中並沒特別去處理它,則程序會自動結束程
式。只有 mot 可以管理所有程序,一般使用者只能對自己的程序作 kill 。
假設我們要叫 PID 爲123的程序結束:
® Skill-9 123
如果要通知程序重新載人設定檔:
® $ki[|-1 123
18.2.3 top
top 是一個好用的程序管理程式,我們可以利用它來秀出執行中的程
式。進入 top 之後,我們可以按來顯示線上說明或按” q ” 來離開。
在 top 中,如果我們想要對某個程序執行 km 的動作,只要按 if k M 再輸
入參數及 PID 即可。
18,2.4 systat
用來監看系統資源使用情形。它有幾個常用的參數:
-iostat
364
chapter 18
指令應用~~
顯示目前磁碟使用情形,以了解其存取的負荷。
■ -swap
顯示所有 swap 裝置的使用情形。
翻 -netstat
顯示目前網路連線情形。
進入 systat 之後,我們可以按 Ctrl + L 來重繪畫面,如果要離開 systat 可
以先按:再打 quit 後離開 a
18.2.5 watch
窺視某個 tt y 視窗
當使用者登入系統後, mot 可以使用
面。也就是說當下達指令後, root 所看
耵以觀察該使用者在做些什麼事,輸出的結果又是什麼
只有超級使用者 root 可以執行 watc :
入 F 列的設定並重新編譯核心:
pseudo-device snp
並新增 snoop device ,使用下列指令
watch 指令來取得使用者的視窗畫
到的畫面就會和該使用者一樣。你
且在執行前必須先在 kernel 中加
365
FreeBSD 入門廳 用 [
(^) # cd /dev
# ./IVIAKEDEV snpO snpl snp2 snp3
接下來就可 watch 指令了。首先,先下指令 w 來看一下站上有哪些使
用者。指令結果的第二個攔位部份,有使用者的 tty ,例如 P 0 、 vO 等,選
定要監看的使用者後,使用 watch ttypO 來監看該使用者,其中 ttypO 即該
使用者的 uy 。你可以使用 CTRL + X 來切換不同的 tty ,也可以使用
CTRL + G 離開回到自己的畫面。
18,2.6 alias
這是 Shell 內建的指令,用來建立別名。例如,我們希望下達指令 abc
時,會執行 Is / etc ,我們可以使用下列指令:
$ alias abc 'Is /etc T
C® $ abc
我們町以使用 unalias 來取消所設定的別名,例如:
$ unalias abc
18.2.7 bg
將指定的程序放入背景中執行。當我們下達一個指令後,必須要等待該
程式結束後才能輸入下一個命令。如果該程式必須執行一段很長的時
間,我們不想等程式結束,可以它放到背景中執行。
chapter 18
指令應用
在下達指令後,按 Ctrl + Z 來暫停程弍,接著再執行 bg 即可將程式放到
背景中執行。
$ sleep 1000
A Z
Suspended
$ bg
[1] sleep 1000 &
$
我們也可以在所要執行的指令後面加上 符號” &” ,就可以將該程式放到
背景執行= .
$ sleep 1000 &
[2] 46461
18.2.8 jobs
jobs 指令可以讓我們查詢目前有哪些程式在背景執行。如果加入參數 -1
可以得到 PID 的資訊。
(^) $ jobs -I
[1] + 46459 Running sleep 1000
(^) [2] - 46461 Running sleep 1500
367
n
二 0i FreeBSD 入 « 應用 □ n ] —
18,2.9 fg
將指定的程序放到前景中執行。我們使用 jobs 看到目前在背景執行的
程序之後’可以使用 fg 把它叫回前景。例如要叫回第一個在背景中執行
的程式:
$ fg %1
(^) sleep 1000
18.2.10 ntpdate
向時間伺服器對時,只有超級使用者才能執行。我們可以使用 ntpdate
這個指令來向時間與頻率國家標準實驗室的時間伺服器對時:
# ntpdate clock, stdtinne, gov.tw
12 Mar 21:24:28 ntpdate[46494]: step time server
210.59,157.30 offset -8.939412 sec
18.2,11 sync
讓系統暫存的資料強制存回硬碟。
18,2.12 shutdown
/7\ cha pter 18
讓系統在指定的時間關機。如果我們要立即關機可以下 指令:
# shutdown now
有時候電力公司逋知半夜十二點要停電,我們半夜又不想再去使用電
腦,這時指定時間關機就發揮作用了。我們可以在白天時先下 指令:
® # shutdown 0203122359
0203122359表不2002年3月 12日23:59 ’ 格式是 yymmddhhmm 。在
指定關機前五分鐘系統會禁止使用者登入,並且會在 / var / run / 目錄下建立
一個檔名爲 nologin 的檔案,內容爲拒絕使用者登入時所要告訴使用者的
訊息。如果我們要停止 shutdown J 可取送給它一'個 SIGTERM , shutdown
程序 fL 收到訊息後’在離開程式前會先刪除 / var / mn/nologin 這個檔案。
(S) #ps -ax|grep shutdown
46644 ?? S<s 0:00,00 shutdown 0203122359
® # kill-15 46644
shutdown 還有一些 參數:
-h 系統停止服務,出現你現在可以放心關機了,但不關閉電源。
-P 系統停止服務並關閉電源。
-r 重新開機。
369
n
FreeBSD 入 PI 應用 ]
18.2.13 reboot
立即重新開機。
18.2J4SU
切換使用中的使用者身份。例如,我們要從一般使用者切換成 root :
$ so
Password:
#
一般使用者如果要具備切換成 root 的權限,必須在 / etc / group 將它加入
在 wheel 群 組中。 例如,我們要該使用者 jack 可以使用 su 變成 root :
wheel:^:0:root,jack
我們也可以使用 su 來切換成不同的使用者,如果加上參數表示模擬
完全 login 的動作。例如,我們要模擬以使用者 foo 登入系統:
# su -I foo
我們也可以用參數 - c 來以不同使用者的身份執行一個指令,執行完後
切換身份爲原本的使用者。例如,我們要以 fco 的身份來執行 Sleep 1000
這個指令並放到背景中執行=
(^) # su foo -c ’sleep 1 000 & T
370
chapter 18
指令應雨
18.2.15 exit
這是 Shell 內建的指令,我們可以使用這個指令來登出系統或登出不同
的 Shell 。
18.2/16 dmesg
顯示系統訊息暫存區 (message buffer ) 的內容。如果是剛開機,暫存區
的內容通常就是開機過程的記錄。隨著開機時間越來越長,訊息也會越
來越多,開機過程的記錄就會被其他訊息所取代。
18.2.17 tastcomm
顯示使用者曾經執行過的指令。如果要使用這個指令,必須在
/ etc / rc . conf 中加入下面這一行:
accounting_enable= lf YES_’
系統會在 / var / account 目錄下建立記錄檔,如果使用者很多的話,檔案
大小將會十分可觀。
如果我們要查看使用者 foo 執行過哪些指令:
(^) $ lastcomm foo
這些記錄每天會自動轉檔,存成 acct.O acctl 等擋案。如果我們要查詢
371
入門應晴]□二
的是前一天的記錄,可以使用參數 - f 來指定使用哪一個記錄檔:
$ lastcomm foo -f /va r/accou nt/acct. 0
18.2.18 crontab
安排定時執行工作。使用 crontab 可以讓我們安排工作在指定的年、
月、日、小時或分的週期來執行。
如果在 / var/cron 目錄中有 allow 這個檔案的話,只有使用者名稱在檔案
中的人才可以使用 crontab °如果沒有 allow 這個檔案,但是有 deny 這個
檔案的話,被列在 deny 檔案中的人不可以使用 crontab 來安排工作。如果
二個檔案都不存在,預設是所有人都可以執行。
我們可以使用 crontab -e 來編輯自己的排程,使用 crontab -e 的格式,
和 / etc/crontab 的格式不太一樣,它少了執行者的攔位 1 內定的指令執行
者就是執行 crontab -e 的人。其格式如 F :
MAILTO=. m
# 分 小時
天
月
星期幾指令
#minute
hour
mday
month wday command
#
*/5 *
•k
•k
* setiathome
# minute ■ 代表 一 小時内的第幾分,範圍 0«59
# fiour : 代表一天中的第幾小時,範圍 0-23
# mday : 代表 一 個月中的第幾天,範圖 1-31
# month : 代表一年中第幾個月,範圔 1-12
#wday - 代表星期幾,範圍 0-7 (0 及 7 都是星期天 )
372
chapter 18
#who : 要使用什麼身份執行該指令
# command : 所要執行的指令
#
林 時的瀾位中如果是*,表示每小時,天的_泣中如果是*表示每天 *
#依此類推瀾位中可以使用來表示 範圔。
#例如:在小時的攔位中填 8-11 ,表示執行的時間是8, 9 J 0, 11共四次
#例如:攔位也可以用逗點來表示,以分的欄位而言,1,2,5,9表示
# 將在1,2,5,9分時各執行一次。也可以寫成像這樣 1-2,12-14
# 表示在 1,2 f 12 T 13,14 分各執行 一次。
#又如:以/後面加數字表示每幾分鐘要執行一次。如在分的攔位
# 填 0-23/2 ,表示 1-22 分 之間, 每隔二分鐘執 行一次
# 也就是0,2,4,6,8 ( 10,12,14,16,1 8*20,22
#又如:在分的瀾位是 */5, 表示每五分 鐘一次
#
#除此之外,也可以用一個開頭為@的字串乘表示各種意義
#
#
#
字串
代表意義
©reboot
開 m 時路一次
#
@yearfy
每年跑一次,等於 ”o 0
1 *,_■
#
◎annually
(和 ©yearly — 樣 )
#
◎monthly
每月跑一次,等於 "0 0
1 # *fi
#
©weekly
每週 跑一次 ,等於 H 00
* * QH
#
©daily
每天跑一次,等於 ”0 (T
* *11
#
◎midnight
(和 ©daily - 樣 )
#
©hourly
每小時跑一次.等於 ”0
Ar ★夤资 ■
#
林 安排 crontab 時,應該要錯開每個程式的執行時間,才不會
# 有一大堆程式同時執行。
373
FreeBSD 入 P1 應用 □ □ □ H [
執行 crontab 預設會將指令輸出結果寄 email 給執行的使用者,如果我
們不希望收到這些結果,可以在檔案開頭加上 MAILTOS %
另外,我們也可以使用參數 -1 來列出目前執行的 crontab table ^或使用
參數 _ r 來刪除 table 。
18,2.19 uptime
顯示系統開機主機狀況。例如:
(^) $ uptime
10:51下午 up 8 days , 8:46,2 users , load averages: 1 .01 , 1.02,1.00
出現的賣訊依序爲現在時間、共開機多久'開機時間、目前使用者有多
少人、系統每1分鐘 '每5分鐘、每15分鐘的平均負荷 ( load ) 0
18.2.20 sysctl
顯示或設定核心 ( kernel ) 狀態。使用參數 - a 可以列出目前 kernel 狀態値
的設定,例如:
(^) $ sysctl -a
我們也可以使用參數 -w name=value 的方式來設定新的値。這些値如下
表:
374
f%, chapter !8
指令應用
NAME
TYPE
1 否改變
kern.ostype
string
no
kern.osrelease
string
no
kern^osrevision
integer
no
keraversion
string
no
keramaxvnodes
integer
yes
kern.maxproc
integer
no
kern,maxprocperuid
integer
r -
yes
kern.maxfi!es
integer
yes
kern.maxfllesperproc
integer
yes
kern.argmax
integer
no
kern.secureleve!
integer
raise only
kern.hostname
string
yes
kern.hostid
integer
yes
kern.dockrate
struct
no
kern.posixl version
integer
no
kern.ngroups
integer
no
kernjob control
integer
no
kern .savedJds
Integer
no
kern.boottime
struct
no
kern^domainname
string
yes
kernJedelay
integer
_
yes
kern.dirdeiay
integer
yes
kern, metadelay
integer
yes
kern.osreldate
string
no
kern.bootfile
string
yes
kern.corefile
string
yes
kern.logsigexif
integer
yes
vmJoadavg
struct
no
hw^machine
string
no
hw.model
string
no
hw.ncpu
integer
no
hw.byteorder
integer
no
375
細 ■
L
freoBSD 入 P! 嚙用 □ □
E
TYPE
可否改變
hw.physmem
integer
no
hw.usermem
integer
no
hw.pogesize
integer
no
hw.toathgpoint
integer
no
hw.machine—arch
string
no
machdep.consoie 一 device
devj
no
machdep.adjkerntz
integer
yes
machdep + disable rtc„set
integer
yes
user.cs—path
string
no
user.bcjxise—max
integer
no
user.bc dim„max
integer
no
user + bc 5cale max
integer
no
user.bc—string max
integer
no
userco!l weights max
integer
no
user.expr nest max
integer
no
userJine max
integer
no
user.re dup max
integer
no
user.posfx2„version
Integer
no
user.posix2„c„bind
integer
no
userposix2 c dev
integer
no
user,posix2 char term
integer
no
userposix2 fort dev
integer
no
user.posix2Jortju n
integer
no
user.posix2Jocaledef
integer
no
usenposix2 sw dev
integer
no
user,posix2^upe
integer
no
user-stream max
i integer
no
user.tzname_max
integer
no
假設我們的系統常出現 file : tabk k full 的訊息,我們可能要重新編譯 kernel 並
提高 maxuser 的値。或者我們也可以使用 sysctl 來做更動。首先我們看一下
kern,maxfiles 的値:
376
0
chapter 18
J 曰 ~ p 聰用
(r^ # sysctl kern.maxfiles
kern.maxfiles: 2024
我們可以使用下列指令來提高它
# sysctl -w ksrn . maxfiles =16244
如果我們要讓适個設定在每次重開槪時都自動載入 T 可以將該指令放到
/ etc/rcJocal 中,或是在 / etc / sysctl.conf It 1 加入下面這一行:
kern.maxfiles=1 6244
18.3 使用者管理
18.3J vipw
編修使用者密碼檔。我們可以使用1
/ etc/masterpasswd 0 如果我們編輯的內
出警告。在修改完後, vipw 還會自動
庫 。
18.3,2 groups
這個指令可以秀出使用者屬於哪一(固 群組。 例如秀出使用者 jack 的群組
ipw 這個指令來編輯使用者密碼檔
容不符合密碼檔的格式 vipw 會提
執行 pwd _ mkdb 來更新系統資料
377
(^) $ groups jack
wheel jack
FreeBSD AP1 應榭 □ □ □ □ _'
18.3.3 adduser
這個指令可以用來新增使用者。執行 adduser 後,它會做以下的動作:
_ 在 tetc/group 中加入使用者的群組
圔 在 /etc/masterpasswd 中加入使用者
II 在 /home 中建立使用者目錄,並建立 dotfile
在 /var/mail 中建立使用者郵件目録
鼷 送出訊息給使用者
執行指令後,系統會問你一些問題:
輸入使用者的 shell , 我使用比較好用的 tcsh ,故輸入 tcsh
Enter your default shell: csh date no sh tcsh [tcsh]:
使用者目錄要放在哪
Enter your default HOME partition: [/home]:
是否要從 skel 目録中 複製使用者的預設設定檔,直接按 Enter
Copy dotfiles from: /usr/share/skel no [/usr/share/ske!]:
是否要送出訊息給使用者,直接按 Enter ,送出 /etc/adduser.message
Send message from file: /etc/addusermessago no [/ etc/adduser. message] :
是否要使用密碼,按 Enter ,預設是 y
Use passwords (yin) [y]:
使用者的帳號 i 只能使用小寫的英文^^母及數字
Enter username [a-z0-9_-j:
使用者全名, 輸入 你的真實姓名
Enter full name □:
要使用的 shell ,打 tcsh
Enter shs\\ csh date no sh tcsh [tcsh]:
378
使用者的目録 》按 Enter 即可
Enter home directory (full path) [/home/asdf]
使用者的編號,按 Enter 即可
Uid [1001]:
登入的等級,按 Enter 即珂
chapter 18
指令應角
Enter login class: default Q:
登入的群組,按 Enter 即可
Login group asdf [asdf]:
是否要該使用者加入其他群組,請注意,因為第一個使用者是你自己,所以在這裡要
打 wheel ’ 這樣你才可以 su 成 root ,也就是你的帳號才可以登入成 root 帳號
Login group is "asdf. Invite asdf into other groups: guest no [no ]:
密碼
Enter password Q:
再輸 入一次
Enter password again p :
以上都正確嗎?
OK? (y/n) [y]:
最後還有一些問題,都是直接按 Entbr 就可以了,等到它問你是否要再
增加下一個使用者時,你可以回答 y 來增加下一個使用者,也可以回答 n
即可回到命令列。
18.3.4 pwd_mkdb
如果我們直接以文書編輯軟體來修改 / etc / master . passwd ,在修改完後,
必須執行 pwd _ mkdb 來將更新的資料做成系統可以讀取的資料庫檔。
pwd_mkdb 還會自動建立 / etc / passwd 。
379
FreoBSD 入 忾應坩口 二]匚
18,3.5 rmuser
刪除使用者。使用 rmuser 將會進行下列動作:
| g 刪除使用者的 crontab 及 at 指令的資料
M 停止所有該使用者正在執行的程式
H 在密碼檔中刪除使用者
_如果使用者家目錄的擁有者是該使用者則刪除
刪除 / var/m 圳中使用者的信件
醒 刪除所有在 / tnnp , / var / tmp ,及 / var / tmp / vi . recover 的使用者檔案
® 把茌 / etc / group 中所有該使用者的名稱刪除。如果使用者所圔群組名稱和使用者名
稱 一樣, 而且該群組是空的, 則一並 刪除。
必須要注意的是 rmuser 並不能刪除 UID 爲0的使用者(如 mot ) 。
18.3.6 passwd
變更使用者密碼。如果不加使用者名稱,則會變更所登入的使用者密
碼。用法如下:
$ passwd jack
380
18.3.7 chpass
chfn , chsh , chpass 是一樣的東西,用
執行的話,其內容其實就是 master , pas
行,使用者可以使用這個 | 旨令來修改一
來更改使用者資料,如果以 root 來
swd 的東西。如果以一般使用者執
® 個人資訊。
18,3.8 mcsg
是否要允許其他使用者傳送訊息給
n ,如果允許則是 mesg y 。如果要執行
18-3.9 write
送出訊息給使用者。
用法 : write user [ tty ]
例如,要送出一段訊息給使用者 jack
$ write jack
在 jack 的視窗會出現下列 訊息:
Message from root@foo.com on ttypO at 01 :_9
chapter 18
指令應用
自己,如果不允許可以使用 mesg
write 或 talk 必須設爲 mesg y 。
之後所打的每一個訊息都會出現在使用者
jack 的視窗 。
38 i
FreeBSD 入 n 應用 □ □ □ L ]
18.3.10 last
顯示使用者登入記錄。 例如:
($) $ last
mary ttypO alex.alexwang 三 3/13 04:01 still logged in
foo tty pi alex.alexwang H 3/13 03:54 - 04:01 {00:06}
jack ftp alex,alexwang 三 3/13 03:53 still logged in
ben ttyp2 alex.alexwang 三 3/13 03:41 - 03:41 (00:00)
如果我們只要顯示某位使用者的登入記錄,我們可以在指令後面加上使
用者登入帳號。如果要顯示某一個時間有哪些人在線上,我們可以使用
參數 — d 。例如,2002年3月10日23:45時有哪些人在線上:
® $last -d 0203102345
last 預設會去找 /var/log/wtmp 這個記錄檔,如果你想要使用其他記錄檔
可以加上參數 -f :
(^) $ last -f /var/tog/wtmp.O
382
18.4 檔案系統管理
18.4.1 touch
chapter 18
J 曰 " P 瞧 ffl
改變檔案存取的時間。例 如:
® $ IS -J
-rw-r- 十 -1 jack staff 1520505 2/25 20:12 myfile-txt
$ touch myfile.bct
® $ Is -1
-rw-rw - 1 jack staff 1520505 3/13 15:21 myfile.txt
在上面的例子中,原本 myfile . txt 的存取日期是2/25 ,我們使用 touch
之後,時間變成目前的時間了。如果使用 touch 時有加檔案名稱,但該檔
案不存 在, touch 會建立一個空的檔案。
我們也可以使用參數4來指定要將存取時間設定爲什麼時候。例如,
我們要設定爲2002年3月13日23:49 :
® $ touch -f 0203132349 myfile.txt
18.4,2 cp
複製檔案或目錄。
用法: cp 來源目的
383
:IW FreeBSD 入 Pi 應用 ]
我們可以使用 cp 來複製 檔案。 例如,將 / etc / services 複製到 ^ services.txt
(^) $ cp /etc/services ^/services.txt
在上面的指令中,如果我們不指定目地檔名,將 - Zservices . txt 改成一
的話,預設會使用原來的檔名,也就是將 / etc / servicas 複製到 ^/services -
我們也可以同時複製多個檔案到,目錄下,例 如複製 / etc/services R
/ etc / rc.conf 到〜/ :
(^? $ cp /etc/services /etc/rc.conf 〜/
如果要複製目錄,我們可以使用參數 - R 來將來源目錄及其所有子目錄
複製到目的地:
$ cp -R sourdir tardir
18.4.3 In
建立鏈結檔,所謂的鏈結檔就像在 Windows 下的捷徑。如果我們希望
同樣一個檔案或目錄可以放在許多地方’我們耵以使用 In 來建鏈結
檔,這樣一來實際存在的檔案只有一個,但在許多地方都有鏈結。例如
我們要將 / etc / services 鏈結到 々 services :
(^) $ In /etc/services -/services
當我 們刪除 鏈結檔時並不會影響原本的檔案。鏈結的方式可以分爲
Hard link 及 Symbolic link ^預設是使用 Hard link 。二者的差別在於 Hard
link 只能在相同的檔案系統中建立鏈結,而且不能鏈結目錄。我們在分割
384
chapter 18
mWmm~
磁碟時,將不同的目錄建立在不同的分割區上 ,假設 /etc/services 位於
adds la 而使用者的家目錄 々位於 a dOs 】 e ,那麼上面指定就不會生效。我
們必需使用參數4來建立 Symbolic link :
$ In /etc/services -/services
In: shittxl: Cross-device link < —出現錯誤
$ In -s /etc/services -/services
我們也可以建立目錄的鏈結:
$ In -s /etc
在上面道個指令中,我們沒有指定目的地,預設會在所在目錄建立鏈
結。
18.4.4 rrtkdir
建立目錄。假設我們要在現行目錄下建立一 個闫錄 temp :
C® $ mkdirtemp
如果我們要建立一個目錄 / tmp / abc / tmp ,在是在 / tmp 下並沒有 abc 這個
目錄,我們就必須使用參數 - p 來自動建立:
(^) $ mkdir/tmp/abc/tmp
mkdir: /tmp/abc: No such fife or directory
$ mkdir -p /tmp/abc/tmp
□_Fr®eBSD 入 W 廳 □ □
18.4.5 rm
刪除檔案或目錄 ° 例如,我們要刪除 temp 這個檔案:
(S) $ rm temp
如果要刪除一個目錄,必須使用參數 -r :
$ rm -r /tmp/abc
在刪除檔案或目錄時,如果該檔案是唯讀的, rm 會詢問使用者是否眞
的要刪除,我們可以使用參數 - f 讓 rm 不要詢問直接刪除。或者我們也町
以使用參數 - i 來讓 nn 在刪除檔案時不管是否唯讀都要 詢問。
1 8,4.6 mv
搬移檔案或目錄。例如’我們要將 abc 這個檔案搬到 / tmp/test :
(^) $ mv abc /tmp/test
如果在 / tmp / test 存在,而且是一個目錄的話,那麼 abc 會被放在
/ tmp / test/abc 0 如果 / tmp / test 存在’而且是--個檔案的話’則原來的 test
這個檔案會被刪除 5 改由 abc 取代之。
我們也可以利用 mv 來更改檔案或目錄名稱。例如,我們要將 abc 改名
爲 cde :
$ mv abc cde
chapter 18
指令應用
18.4J df
顯示磁碟使用情形。
$df
Filesystem
IK-blocks
Used Ava
il Capacity
Mounted
/dev/adOsla
201518 106212 79186
57%
/
/dev/adlslf
2595662
738200 164
9810
31%
/home
/dev/adOsle
2761230
1615176
925156 64%
/usr
/dev/ad Isle
50396611546
452
104 2%
/var
proofs 4
4
0
100%
/proc
on
如果你覺得這樣的輸出結果不容易了解,可以使用參數 - h 。我們也可
以使用參數4來看 i - node 的使用狀況。
18_4,8du
磁碟使用情形統計。如果我們要看所在目錄使用多少磁碟空間,可以使
用 d u 這個指令。和 df 指定一樣,我們可以加參數 - h 來顯示較易閱讀的
統計格式:
(^) $ du -h /etc
如果不加目錄名稱 / etc ,預設是顯示所在目錄的使用統計。我們可以使
用 du 這個指定來看系統中所有使用者的家目錄使用情形:
FraeBSD 入 P ) 應用
□
(^) # du -sh /home/*
750M /home/jack
60M /home/mary
2M /home/john
如果我們要查出自前系統中使用磁碟空間最大的前 5 名使用者,我們可
以利用 dii 搭配 sort 指令:
#du -s /home/* | sort -rn | head «5
18.4.9 chmod
改變檔案目錄權限。當我們使用 i s -1 時:
$ls -I
drwx —— 2 jack staff 512 2/27 02:14 mail/
cirwxr-xr-x 2 jack staff 77824 2/22 05:37 txts/
-rw-r-r- 1 jack staff 1520505 3/11 23:39 myfife.txt
drwxr-xr-x 10 jack staff 512 3/11 05:28 software/
第-個欄位代表的是檔案的權限。該欏位中共有十個字元,第_個字元
是檔案的類型,其後每三個字元爲一組,分別代表使用者 ( User ) 、所屬群
組 ( Group ) 、其他人 ( Other ) 對於該檔案的存取權限。
_ r : 可以讀取,代表數字 4 。
■ w : 可以寫入,代表數字 2 。
矚 x : 甩以執行,代表數字 1 。
388
在使用 chmod 時,我們可以使用不
屬群組 ( Group ) 、其他人 (Other) :
_ u : User ,檔案的擁有者。
_ g : Group ,擁有者所画群組。
鬮 0 ' Other ,其他使用者。
驪 a ■ All »所有人。
舉例而言,如果我們要讓 myfile.txt
(^) $ chmod a. 「 myfile.txt
如果我們要設定和 myfile T txt 擁有者同
($) $ chmod g=rw myfile.txt
如果要設定移除群組對 myfile,txt 寫
(S) $ chmod g-w myfile.txt
另外,我們也可以使用數字來設定
字,以每個使用不同對象爲單位,將
就是該對象的權限。
User Gro
r rvv
421 42
Up Other
h T W,\
I 421
|:WA
421 40
/ 5
卜 -
1 400
4
國
389
chapter 18
指令應用
同的字母來代表使用者 (User) 、所
可以讓所有人讀取
- 4固群組的人可以讀取及寫入該檔
入的權限:
檔案權限。 r,w,x 都有其對映的數
所對映的數字相加後所得到的數字
_reeBSD 入 □ □ n
例如,使用者的權限是 rwx ,則其權限爲4+2+1=7。而群組的權限是
rx ,其權限爲4+1=5。其他人的權限是 r ,則以數字表示爲4。我們要設
定 rnyfilewt 這個擋案的權限:
$ chmod 754 myfile.txt
我們來看一下關於目錄的權限,目錄的權限中,如果有 x 表示可以進入
該目錄, r 表示可以讀取目錄內容,而 w 則是可以對該目錄寫入。我們用
下列的例子來說明目錄權限的應用:
(^) $ chmod 500 mydir
(H^) $ cd mydir
® $ls
file.txt doc/ mp3 / <— 權限爲 500 ,沒問題
(>) S cd
(^) $ chmod 400 mydir
(^} $ cd mydir
mydir: Permission denied, <— 權限爲 400 ,只可以讀不能進入
$ Is mydir
file,txt doc/ mp3 / <— 權限爲 400 ,只可以讀不能進入
(^) $ chmod 100 mydir
® $ls
Is:Permission denied <— 權限爲 100 , RtEilA , 不育隱內容
我們上面提及的權限都是以三位數字來表示,另外我們也可以使用四位
數字表示。所謂的四位數字是指在原本的三位數之前加上一個關於檔案
形態的設定。
390
chapter 18
_ 數字 4 , set user id (SUID) ^ 表示該檔案在執行時會以檔案擁有人的身份執行。
驅 數字2,如果該檔案可以被執行(具 x 權限),則在執行時會以擁有者群組的身份執
行。如果是不能被執行的檔案 f 茌_寫時會控制不能讓多個程式同時存取
(locked) °
II數字1,访 cky 。如果將檔案設為所有人都可以纘寫,並設定 sticky ,則所有人都
可以修改該檔案,但是不能刪除。如果是目錄開放譎寫權限,但設定了 sticky ,則
使用者只能新增檔案,不能刪除,這個可以應用於 FTP 的上傳區。
假設我們要設定檔案 mydir 可以被所有人讀、寫、執行,並設定 sticky :
(r9^) $ chmod 1777 mydir
ISAlOchown
改變檔案的擁有人及群組。例如, 我們要 將目錄 temp 的擁有人設爲
jack ,並設定群組爲 staff :
(^) # chown jack.staff temp
如果我們要將目錄 temp 及其下所有檔案及子目錄的擁有人改變成
jack ,可以使用參數 -R 。
FreeBSD 入 PI 應用 □
18.4.11 chflags
在 FreeBSD 還有一種特別的權限控制,稱之爲 「 flags 」 , 這些 flags 的
設定可以讓我們用來保護特殊的檔案。例如 /kernel 就是一個有設定 flag
的檔案,我們可以使用 Is 加參數七來顯示:
(^) # Is -ol /kernel
-r-xr-xr-x 1 root wheel schg 2208222 2/26 02:09 kernel
flags 的設定凌駕於一般的權限設定,我們可以設定的主要 flags 及其所
代表的意義如下:
nodump
檔案不甩以被 dump 。(只有檔案擁有者稆 root 可以設定)
sappnd
儅案只可以往後附加,不能刪除。(只有 root 可以設定丨
schg
檔案不可以被更動,連 root 都不能刪除。(只有 root 珂以設定)
uappnd
檔案只可以往後附加,不能刪除。(檔案擁有者和 root 才可設定丨
uchg
檔案不可以被更動。(檔案擁有者和 root 才可設定 |
如果我們要解除所設定的 flags 只要在上述的 figs 之前加上 no 即可,例
如 nouchg °
用法: chflags flags file
flags 的設定只有在 kernel security level 爲 -1 或 0 時 才可以 被更改。如
果 security level 爲 1 或 2 時就不能更動 flags 了。
392
18-4,12 umask
/TX chapter 18
當我們新增一個文字檔時,預設的檔案權限是644,而新增一個可執行
檔時,預設的權限是755,也就是除了檔案的擁有人外,其他人都可以讀
取或執行。這種預設權限是由 mnask 來控制。
我們看一下 ^/. cshrc 的內容:
alias h history 25
alias Is Is -F
# A righteous umask
umask 22
這裡的設定是 umask 22 ,也可以表示爲 umask 022 。 022 這三個數字分
別代表擁有者、群組、其他人的 權限, 建立檔案是,將檔案所有權限減
去這些數字後,所得到的値就是檔案的預設權限。
例如,一般檔案權限的全部權限是666,分別減去022後,得到的預設
權限就是644。而可執行擋的權限是777,分別減去022後,就是755。
知道了 umask 之後,或許我們會希望將它設爲077。當然,設爲077可能
會產生一些問題,例如建立一個網頁後,可能沒有辦法讓它在使用者的
瀏覽器中出現(因爲執行 apache 通常是以 nobody 的身份來執行)。
我們可以使用 umask 艰顯不目前的設定,或使用 umask num 來設定 umask :
(^) $ umask
22
$ umask 77
$ umask
77
393
FreeBSD 入 門廳用 n □ L_ _」
18.4.13 diff
比較二個檔案的差異。例如=
® Sdifffilel file2
18A14 wc
計算行數 ( lines ) 、字數 ( words ) 、位元數 ( bytes ) 。我們可以使用這個指令
來計算檔案中的字數:
(^} $ wc file,txt
77 103 1076 file.txt
輸出結果分別代表行數、字數、位元數,我們也可以使用參數4, - w , -C
來指定要輸的是行數、字數、位元數。我們可以將 wc 和 Is —起使用來計
算檔案數:
$ Is /etc 1 wc -i
100
UNIX 指令的好處就在於我們可以自行組合指令創造出新的用法。
394
chapter 18
指令應用
18.4-15 whereis
找尋程式的所在。 whereis 預設會去尋找標準的二進位檔、說明檔、及
原始程式碼檔名符合的檔案。所以我們不能用它來找一般文字檔。
(^) $ whereis netstat
netstat: /usr/bin/netstat /usr/share/man/manl /netstat. 1 .gz
18.4.16 which
在使用者的路徑設定中尋找該程式。
(^) $ which perl
/usr/bin/perl
395
i—^jiFiwBSD 入門應用 □ :] □ :] _
18,4.17 find
在指定目錄下尋找檔案。 find 耵以用的參數很多:
-name file
尋找檔名為 file 的檔案。
-perm mode
尋找權限為 mode 的檔案。
-size n[c]
尋找檔案大小為 n block 的檔案。 c 表示字元數。
-atime n
尋找在 n 天之前曾被存取的檔案。
-mfime n
尋找在 n 天之前曾被更改時間的檔案。
-ctime n
尋找在 n 天之前曾被更改内容的檔案。
-newer file
尋找修改時間比 file 新的檔案。
-print
找到之後,列出 檔名。
-exec cmd {} \;
找到之後執行 cmd 指令,在 cmd 最後一定要加上\;指令才會
執行。如果 cmd 後有加表示執行的目錄在該檔案的目錄。
-user name
尋找擁有者為 name 的檔案。
-group name
尋找群組為 name 的檔案。
-nouser
尋找使用者名稱不在 /etc/passwd 中的擋案 &
"nogroup
尋找群組不在 /etc/group 中的檔案。
例如,我們要從根目錄開始,找出 services 這個檔案所在位置:
$ find / -name service -print
如果我們要找出檔案大小大於 10M 的檔案:
® $ find / -size +1 0485760c -print
如果我們要從所在目錄開始,找出所有副檔名爲 bak 的檔案,並將它刪
除:
$ find . -name f **bak" -exec rm {} \;
396
chapter 18
指令應用
18.4.18 grep
找尋某一個字串。例如,我們要找 / etc / 下所有檔案內容有 192.168 這個
字串的檔案 :
® $ grep 1 92.168Vetc/*
我們也可以將 gmp 和其他指令一起使用,例如要找出現在執行的程序
中 inetd 的 PID :
$ ps -aux I grep inetd
18A19tar
Tape archiver ^ 可以用來壓縮備份檔案。 tar 的用法很多,我們僅介紹簡
單的壓縮與解壓縮。舊版的 tar 並不_有壓縮功能,只是把檔案包裝成一
個磁帶檔。現在的 tar 都可以加上參數 - z 來順便將檔案壓縮。
參數
用途
Z
壓縮 檔案。
X
取出 檔案。
C
建立檔案。
fflle
指定要處理的檔案。
V
觀看過程。
U
更新檔案,新的檔案會取代較舊的檔案。
r
將檔案附加在原不 03 tar 檔之後
D
■丨
例如,我們要將目錄 temp 包裝並壓縮成 temp . tgz 這個檔案:
397
FreeBSD 入 忾廳用乙 □ □ □
$ tar zcvf temp.tgz temp
要解開 temp.tgz :
(^) $ tar zxvf temp.tgz
18.4.20 fsck
撿査並修復檔案系統。我們可以指定要修復的檔案系統,或不加任何參
數來撿查所有檔案系統。 fsck 當撿查發現有問題時,預設會詢問使用者是
否要修復,我們也可以加參數 - y 來對於所有問題都回答 y 。
# fsck /dev/adOste
398
chapter 18
指令應用
18,4_21 mount
掛入檔案系統。如果要掛入的檔案系統在 / etc / fstab 中有記錄,則可以
不必指定來源:
(^) # mount /usr
-a
掛入所在在 / etc / fstab 檔中記録的檔案系統,有參數 noauto 者除外。
-o options
設定檔案系統參數。 options 參數如下:
async ,非同步寫入摸式。
noexec ^該檔案系統上的檔案不可以被執行。
nosuid ■ 該檔案系統不允許 set 或 set gid 的檔案發生 作用。
nosyrnfollow ,在該檔案系統上不可使用 鏈結。
「 donly ,該檔案系統是唯讀的,運 root 也不可以寫入。
sync ,使用同步寫入模式 &
~t type
設定要掛入的檔案系統格式。如果要掛入的格式不是内定的格式,
mount 會去呼叫 / sbin / mountJCXX 的程式來使用 " 例如要掛入 msdos 系統
時 * 會去使用 / sbin / mounLmsdos 這個程式 1 ^常用的格式 如下:
ufs , 本機的 U _ IX 蜷案格式。
nfs , Network File System °
msdos * DOS 檔案格式。
isofs , CD-ROM ( ISO -9660] 檔案格式。
例如我們要掛入一個 MS - DOS 的磁 K 到 / mnt 的目錄中:
($) $ mount -t msdos / dev/fdO /mnt
也可以使用 mounLmsdos 指令:
(^) # muont_msdos / dev/fdO /mnt
□pi FreeBSD 入 P1 應用 □ □ □ □ L
我們在使用 CD-ROM 之前要先將它掛入,如果是使用光碟安裝
FreeBSD ,在 / etc/fstab 中有 CD-ROM 的設定,我們只要執行下列指令:
(^) # mount /cdrom
如果沒有,我們要知道光碟機的代號,可以使用 dmesg 來查看開機記
錄檔中關於 CD-ROM 的訊息。假設我們的光碟代號是 cdOc ,要將它掛入
/cdrom :
C ® # mount -t cd 9660 / dev/cdOc /cdrom
或是:
# mount _ cd 9660 / dev/cdOc /cdrom
18,4,22 unmount
移除掛入的檔案系統 ° 只要輸人 unmount mount _ point 即可 。
CD - ROM 在掛入之後,每法取出光碟片。我們必須使用 unmount 來移
除才可以將光碟退出:
# unmount /cdrom
chapter 18
18.5 網路相關指令
18.5.1 ping
撿查遠端系統的連線狀態。 ping 指令會送出 ICMP 封包到指定的主機,
我們可以藉此來撿查網路連線品質。
常用參數如下=
H -c count
-s size
M -t timeout
鬮 -I interface
指定要計算 count 次|。
指定每個封包大小為 size 。
指定 time out 時間。
如果目標主機位址是廣播位址,而且我們有多個網
介面,可以指定要使用哪一個介面。
例如我們要看 www . freebsd.org 的連線品質:
$ ping www.freebsd.org
PING freefalLfreebsd.org (216.136.204.21):
64 bytes from 216.13g.204,21: icmp_seq=0
64 bytes from 216.136.204.21: icmp 一 seq=1
56 data bytes
ttl=54 time=458,986 ms
tll=54 time«502.258 ms
64 bytes from 216.136.204.21: icmp_seq=2 ttl=54 time=491.489 ms
A C
一 freefalLfreebsd.org ping statistics —
3 packets transmitted, 3 packets received, 0% packet loss
round-top min/avg/max/stddev = 458.986/4$4.244/502.258/18.393 ms
Fro 籲 BSD 入« 應用
18.5.2 ifconfig
設定或檢査網路介面。我們可以使用 ifconfig 來顯示所有的網路介面,
如果使用參數 - u 表示顯示使用中的網路介面,而 - d 則是非運作中的介
我們也可以使用 ifconfig 來讓網路介面運作或停用。
用法 : ifconfig [downlupj interface
假設我們要讓網路卡 vrO 停用:
# ifconfig vrO down
我們也可以使用 ifconfig 來設定網路上的 IP 位址。假設要設定 IP 爲
192. 】 68 X 1 1,而子網路遮罩爲 255,255.255.0 :
® # ifconfig vrO 192.168.0,1 netmask 255.255.255.0
接著再使用 ifconfig 將 vrO 啓用:
(^) # ifconfig vrO up
18.5.3 arp
顯示 rnp 位址。例如我們要顯示 192. 168 几 2這台機器的網路卡號:
@ $ arp 192.168,0.1
402
chapter 18
指令應用~~
1 8.5.4 traceroute
追蹤由本機到某台主機所使用的路铿。當我們使用 ping 來撿查網路連
線狀況時,如果發現無法連線,我們可以使用 traceroute 來撿查到底是網
路上的哪一台主機有問題。 1
$ traceroute wwwireebsd.org
18.5.5 netstat
顯示網路狀況。我們可以使用 netstat 來顯示目前的連線狀況。 例如:
$ netstat -a
Active Internet connections (including serve
rs)
Proto Recv-Q Send-Q
Local Address Forei
gn Address (state)
tcp4
0
20 v
mw.ssh 198
^Z 27 z 4 z 49.1780 ESTABLISHED
tcp4
0
0
*.http
V LISTEN
tcp4
0
0
'https
V LISTEN
tcp4
0
0
*.smtp
? LISTEN
tcp4
0
0
*,ssh
“ LISTEN
tcp4
0
0
*.pop3
V LISTEN
udp4
0
0
*.sysiog
* *
udp6
0
0
'syslog
翁 *
Active UNIX domain sockets
Address
Type Recv-Q Send-Q Inode
Conn Refs Nextref Addr
cd864800dgram
0
0 0
cd84ef00 cd864fc0
cd864fc0dgram
0
0 0
cd84ef00 0
403
L g^Fr®eB 編入門應用 □ □ □ 一
我們可以由上面的結果看到目前有一個使用者正使用 ssh 連到我們的網
站。經由上表,我們可以看出我們所提供的服務有哪些,目前的使用情
形如何。如果我們希望 Foreign Address 直接顯示 IP ,可以使用參數 - n 。
我們也可以使用參數 - i 來查看網路介面的使用情形:
$ netstat -ai
Name Mtu Network Address [pkts lerrs Opkts Oerrs Coll
dcO 1500 < Link #1> 00;80: c 8: f 6: b 2:66 68890922 15997 8370716 1256 60296
33:33: c 0: f 6:78: s 9
dcO 1500 fe 80:1 : :280 feSO : 1 : :281 : cBff : 0 - 0 --
ff 02:1::2: c 1 f 7:78 e 9( refs : 1}
ff 02:1::1 ( refs : 1}
ff 02:1;:1: ffe 7: b 266( refs ; 1)
IpO * 1500 < Ltnk #2> 0 0 0 0 0
loO 16384 < Link #3> 34050 0 34050 0 0
我們簡單說明一下各襴位所代表的意義:
鱷 Name :設備的名稱。
IVftu : 最大的傳送單元 ( un 幻。
M Network :此介面所提供的網路或目的地主機。
矚 Address :介面的位址。
_ [pkts :表示接收到的封包。
M 1 嶋: 表示接收到但破損的封包數量,
^ Opkts =表示送出的封包。
|3 Oerrs :表示送出但破損的封包。
_ Coll :表示發生碰撞 ( Collision ) 次數,當網路負荷量大時,封包送出時較易發生碰
chapter 18
指令應用
撞,碰撞產生時,系統嗇等待一段時間霤試再次送出 封包。 碰撞次數越多,連線品
質 越差。
18.5.6 sockstat
列出開啓中的 socket
*■*
$ sockstat
USER COMMAND PID FD PROTO L
root telnetd 52897 0 tcp4 192.168.0.1:^3 192.168.0.2:1969
root sshd 34063 4tcp4 *:22 *
nobody httpd 11670 16 tcp4 *:443
nobody httpd 11670 17 tcp4 *:80
root sendmafl 117 4 tcp4 *:25 *:*
root sendmail 117 5 tcp4 *:5B7 *:
root inetd 109 4 tcp4 *:21 *
USER COMMAND PID FD PROTO ADDRESS
mysql mysqld 170 6 stream /tmp/mysqLsock
root sendmai! 117 3 dgram syslogd[100]:3
root syslogd 100 3 dgram /var/run/log
每個欄位所代表的意義 如下:
_ USER : 哪個使用者閧啓的 socket 。
_ COMMAND ■ 經由 哪一個 指令。
IS PID : 該指令的 process ID 是多少。
圖 DF : socket 的 file descriptor number
;AL ADDRESS FOREIGN ADDRESS
405
] 厂 _ (FreeBSD 入 Pi 廳用 ] □□ L
M PROTO : 哪一種協定。
画 g LOCAL ADDRESS :本地的位址及 port (Internet sockets only )。
FOREIGN ADDRESS - 寐源的位址及 port (Internet sockets only) o
_ ADDRESS : socket 開 啓的檔 案或目的程式 (UNIX sockets only ) 。
18.5.7 mail
郵件處理程式。古老的 UNIX 郵件處理程式,這個程式對於不熟悉的人
使用起來可能有點困難。但是這是在每個 UNIX 系統中都會有的程式,
有時在沒有其他選擇的狀況下,我們還是要使用它,至少要知道如何用
它來收發信件。
假設我們要寄信給本機的 root :
$ mail root
如果我們要寄信給非本機的使用者,可以使用的收件人格式如下:
(^) user@cc,nGU.edu.tw
(^) user@\[140.115.1.13\]
執行了 mail 之後,程式會先要求我們輸入郵件主旨,輸入後就可以開
始打本文了。當完成本文的編輯之後,可以按 Ctrl+D 來將信件送出,或
是按二次 Ctrl+c 取消。
我們也可以在執行 mail 時加上參數 -s " subject 1 ' 來指定主旨:
(^) $ mail -s '' hi , my friend " jack @ mymail.com
406
chapter 18
m^mm~
如果我們想要將一個文字檔的內容當做本文送出,例如,我們可以先編
輯一個文字檔 contenttxt ^接著使用下列方式:
$ mail -s "hi, my friend" jack@mymail,com < contenttxt
說完了寄信,我們來了解一下如何收信。我們可以打 mail 來收信,如
果是 root 還可以使用 mail -u user 來收使用者 user 的信件。
$mail
7var/maii/roof: 12 messages 10 unread
>U 1 jack Fri Feb 22 03:02 42/690 "Hi friend"
U 2 jack Fri Feb 22 03:02 74/2620 ,f see you tomorrow 11
U 3 mary@abc.com Sat Feb 23 03:06 570/33527 "dorVt forget 1 ,
&
最後面出現的 & 爲 mail 程式命令列的提示符號,在第一封信件開頭有
—個符號 V '表示目前作用中的信件。我們可以直接輸入郵件編號來讀取
信件。另外,我們也可以輸入下列 指令:
h
列出所有信件。
r
回覆目前作用中的信件
0
n
讀取下一封 信件。
P
if 取前一封信件。
pre [mail number ]
保留編號為 mail number 的信件在系統的 mailbox 中 (/ var / mail / 卜
程式 moil 對於己讀取的信件*預設會將它搬到使用者家目錄下的
mbox 中。我們如果 B 後還想要使用 pop 3 來收該信件,就必須使用
pre 將該信件保留在系統的郵件目錄中 u
d
刪除作用中的 信件。
z
顯示下一頁信件列表。
q
離開 mail 。
407
g^FreeBSD 入 P1 廳用 □ □ □
18-5,8 tel n net
使用終端機遠端登入網路上的主機。例如:
(^) $ telnet bbs.mgt.ncu.edu.tw
如果在 telnet 時要能輸入中文,必須加上參數4 :
$ telnet -8 bbs+mgt.ncu+edu.tw
18.5.9 ssh
使用 telnet 並未加資料加密,我們很容易在不知不覺中洩露資訊。如果
要登入的主機有提供 ssh 登入的話,最好使用 ssh 。
用法 : ssh username ©hostname
ssh hostname
例如:
® $ssh mary@140.115.77,11
$ ssh jack@mydomaioxom
(S) $ ssh mydomainxom
只打 hostname 而沒有使用者名稱,登入名稱會是你目前所用的使用者
名稱。
如果所連線的主機是第一次連線會出現下列一堆東西,打 yes 1 ’ 三個字
即可 :
408
chapter 18
指令應用
The authenticity of host '140.115J7.ir can
RSA key fingerprint is 13:93:8a:61:31 : df:41:
Are you sure you want to continue connecting
be established.
3f:7a:0a:77:ad:7e:49:e7i3f.
(yes/no)? yes
18.5.10 ftp
檔案傳輸程式 ° 如果要登入的主機允許暱名登入,我們使用參數 -a 來
自動 豐入。
$ ftp -a freebsd.csie.nctu.edu.tw
進入 ftp 之後,會出現命令的提示列。我們可以輸入以下的 指令:
heip 或?
顯示可以使用的指令。
Is
列出遠端所在目録的檔案
0
pwd
顯示遠端所目錄位置。
cddir
進入遠端的 dir 目錄1
get file
從遠端取回 fiie 檔案。
put file
將本地端的 file 檔案上傳 i
[(] 遠端 機器。
acsii
使用文字模式傳送檔案。
binary
使用二進位模式傳送檔案
D
bye
結束 ftp «
mget *.tgz
取回遠端所有名稱為 Mqz 的檔案。
mput 'tgz
上傳本地所有 *.tgz 的檔譯
!ls
顯示本地所在目錄下的檔_
套。
Ipwd 或 Ipwd
顯示本地所在目錄。
led [ dir ]
切換本地所在目錄。
409
^]Fr»®BSD 入 fl 應 □ I
□
18.5.11 nslookup
網路主機名稱査詢。如果我們要查詢 www . freebsd . org 所對映的 IP ,最
簡單的用法是=
$ nslookup www.freebsd.org
我們也可以在上述指令最後面加上要查詢的 DNS 主機:
(^) $ nslookup www.freebsd,orgdns.hinet.net
我們也可以使用 IP 來進入反查:
C® $ nslookup 216.136.204.21
18.5_12dig
是另一個功能強大的主機名稱査詢工具。簡單的用法如下:
$ dig -X 216 J36,204.21
(^) $ dig www.freebsd.org
18.5.13 tcpdump
顯示或記錄網路封包。如果要使用 tcpdump ,在核心中必須要有
Berkeley packet filter ,而且有 / dev / bpf ^ 0 如果沒有請在核心設定中加入下
面這一行,並重新編輯核心:
410
■
chapter 18
指令應用
執行 tcpdump 後,它會打開指定介面的 promiscuous mode (介面必須支
援才有 用)。 所謂的 promiscuous mode (雜亂模式)是指不管是否和本機有
關的封包都接收進來,要達到這樣的效果,必須藉由 bpf 的支援。
我們可以使用 tcpdump 來觀察到達某一個網路介面的封包。例如我們要
監看介面 vrO 的封包:
(^) # tcpdump h vrO
如果要結束直接按 Ctrl+C 即可。如果限制封包數量,可以使用參數 -
c 。我們也可以使用參數 - w 來將捕捉到的封包存成檔案,在這裡我們存
成 dump 這個檔案:
(r^) # tcpdump -c 20 4 vrO -w dump
使用參數 - r 可以讀取儲存的封包 資料:
($) # tcpdump -r dump
爲了控制 tcpdump 能 dump 我們想要的封包,我們還可以在指令最後加上
—些 expression 來控制封包的記錄。關於 expression 的用法請 man tcpdump 。
另外介紹一個好用的分析工具 tcpshow ,我們可以使用 ports 來安裝 。
(r^) # cd /usr/ports/net/tcpshow
林 make install clean
接著就耵以使用 tcpshow 來分析我們儲存的封包內容:
preeBSD 入 《 鼸相匚 □
# tcpshow <dump | more
Packet 8
TIME: 04:53:10.938750 (0.011744)
LINK: 00:80:2D:BB:65:38 -> 00:50:AA:00:DC:DD type=IP
IP: tw -> 189 hlen=20 TOS-OO dgramlen=44 id =4353
MF/DF=0/1 frag=0 TTL=52 proto=TCP cksum=C56B
TCP: port http -> 2451 seq=3298970558 ack=2899053999
filen^=24 (data=0) UAPRSF-010010 wnd=65535 cksum=8549 urg=0
DATA: <No data>
我們簡單的說明一下這個封包的內容。第一部份是時間 TIME 。
第二行是 LINK ,顯示了來源-> 目的地的網路卡號,另外經由
type = IP ,我們知道這是一個 ahemetjtl 的 frame 。
第三部份 IP , tw -> 189是來 源段目 的地的位址。 hlen 是 header length
大小是20 bytes ,而整個 IP 封包 ( dgramlen ) 的大小是44 bytes °
第四部份是 TCP ,來源是的 port 是 http (內定是 80) ,而目的地的 port
是2451 ° 接下來是 TCP 封包的 sequence number 及 acknowledgement 編
號。 TCP 的 header length 是24,加上 IP 的 header 20長度剛好是44,和
dgramlen 的長度一樣,這個封包應該沒有破損。
最後,這個封包並沒有包含其他的資料。
412
chapter
\ Shell Script
> FreeBSD 入 « 躍用 □ □ □ □ □ □ U □ □ ^
19.1 槪論
Shell Script 是一個類似 MS Windows 中 .bat 檔的東西,簡單的說, Shell
Script 就是將一堆 shell 中的指令放在一個文字檔中來執行。因此,爲了
能寫出一個 shell Script ,你必須先對 UNIX 指令有初步的認識。身爲一個
UNIX 系統的管理者,一定要會使用 shell script 來使管理工作更加容易。
一般我們會將 Shell Script 的副擋名命名爲汕,但並非一定要這麼做,
這樣做只是爲了要更容易管理這些檔案。在介紹如何 Shell Script 的內容
之前,先來看如何寫出一個 Shell Script 並執行它。假設要寫一個名爲
testsh 的 Shell Script ,首先用你習慣使用的文字編輯軟體來開一個檔案名
爲 test.sh 內容 如下:
#!/bin/sh
echo Hdlo world!!
第一行是必需的,用來定義你要使用的 shell -這裡我們定義要使用的
是 Bourne Shell ,其所在路徑是 /bin/sh 。在 UNIX 系統中有許多不同的
Shell 可以使用,而每個 Shell 的特性及用法都有些許的不同。因此,在寫
Shell Script 時,我們會針對 Bourne Shell (sh) 來寫,因爲 sh 是所有 UNIX
系統中都會有的 Shell 。就算你執行 Shell Script 時的環境不是使用 sh ,只
要加上第一行 #!/bin/sh 就可以在執行此 Shell Script 時使用 sh 。而第二行
的 echo 代表列出一個字串,我們常使用它來輸出寶訊。將 testsh 存檔
後,我們就可以用下列其中一種方式執行它:
L 轉向輸入
sh < testsh
2. 如果要輸入參數的話,第_種方式便不適用,可以改用這種方法。
414
圃
<aiguments> 就是我們要輸入的參數,在
chapter T 9
Shell Script
上面的 test.sh 中並不需要輸入參數:
sh test.sh < arguments >
3, 你也可以改變 test.sh 的權限,將 f
可以只打 test.sh 來執 行它:
3 變成可以獨立執行的檔案,這樣就
chmod 奸 xtestsh
,/ test.sh
在 Shell Script 中,你們可以使用#
爲註解,在#後面的字串都將被視
爲註解而被式忽略。而 分號; 則代表新的一行,例如打 1 S ; 1 S - d 代表二個
指令。另外,我們可以使用變數、流程控制、甚至是副函式來使程式更
加靈活。以下的各章節我們會詳細加以 說明。
19.2 變數的使用
19.2,1 變數的使用
我們知道 Shell Script 是使用一堆
起見,我們不使用編輯檔案的方式來
的指令°首先,先打 sh 來進入 Bourne
指令拼湊而成,爲了方便說明及練習
執行,而改以在命令列中打我們要
Shell 。
在打了 sh 之後’會進入 Bourne Shell ’其一般使用者的提不字兀爲$ °以
下各指令開頭的$表示提示字元,而$之後的字串才是我們輸入的字串。
415
FreaBSD 入 H 壤用 □ 口 ]
在 Shell Script 中,所有的變數都視爲字串,因此並不需要在定義變數
前先定義變數類型。在 Shell 中定義和使用變數時有些許的差異。例如,
我們定義一個變數 color 並令它的値爲 red ,接著使用 echo 來印出變數
color 的値:
$ color=r8d
$ echo $color
red
在這裡,以 coloured 來定義變數 color 的値爲 red ,並以 echo $ cok>r 來
印出 color 這一個變數。在定義變數時,不必加$,但是在使用它時,必
須加上$。請注意,在等號的二邊不可以有空白,否則將出現錯誤,系
統會誤以爲你要執行一個指令。
我們再介紹一個範例:
$ docpath-/home/td/src/doc
$ echo $docpath
/home/td/src/doc
$ Is $docpath
abc,txt abc2.txt semmt.doc
$ fs $docpaht/*,txt
abc.txt abc2.txt
這裡我們定義了變數 docpath 的値爲 / home / td / src/doc ,並印出它。接著
我們使用 Is 這個指令來印出變數 docpath 目錄中所有檔案。再以 i s $ doc -
Path/^.txt 來印出 / home / td / src / doc / 目錄下所有副檔名爲 .txt 的檔案。
我們再來看一個例子,說明如何使用變數來定義 變數:
416
chapter 19
Shell Script
$ tmppath=/tmp
$ tmpfile-Stmppath/abc.txl
$ echo $tmpfile
/tmp/abc.txt
另外,我們也可以使用指令輸出成 f
位於鍵盤左上角的,在 shell script 中,
§ 變數,請注意這裡使用的二個 ~ 是
使用包起來的代表執行該指令:
$ now='date'
$ echo $now
Mon Jan 14 09:30:14 CSX 2002
如果在變數之後有其他字串時,要使用下列方式來使用變數:
$ light=dark
$ echo ${light}blue
darkblue
$ echo "$iighrblue
darkblue
這裡雙引號中的字將會被程式解震
Slight 而非 dark 。
賣,如果是使用單引號將直接印出
經由上面幾個簡單的例子,相信您對變數的使用已有初步的認識。另外
有一些我們必須注意的事情:
$ color-blue
$ echo $color
blue
$ echo ”$color
417
BSD 入 n 應用 □ □
blue
$ echo _$color T
$color
$ echo \$color
$color
$ echo one two three
one two three
$ echo ''one two three 11
one two three
我們可以看到上面各個執行結果不大相同。在 Shell Script 中,雙引號
內容中的特殊字元不會被忽略,而單引號中的所有特殊字元將被忽略。
另外,\之後的一個字元將被視爲普通字串。
19-2.2 程式會自動定義的變數
在執行 Shell Script 時,程式會自動產生一些變數:
$?
厂表示上一個指令的離開狀況,一般指令正常離開會傳回 0 。不正常離開則會傳回 卜 2
等 數簡。
$$
這一個 shell 的 process ID number
$!
最後一個在背景執行的程式的 process number
$-
這個參數包含了傳遞給 shell 旗標 (flag) =
$1
代表第一個參數, $2 則為第二個 參數, 依此類推 。而 $0 為這個 shell script 的擋
名 9
$#
執行時,給這個 Shell Script 參數的個數
$*
包含所 有輸入 的參數,$@即代表 $U2 直到所有參數結束。將所有參數無
間隔的連在一起,存成一個單一的參數^也就是說 r 代表了 V $2 $3.:^
418
上面例子中的第一行是 Is ,我們可以看到存在一個目錄 / home ,接者
echo $?時,出現0表示上一次的命令正常結束。接著我們 k 一個不存在
的目錄,再看$?這個變數變成2,表示上一次執行離開的結果不正常。
最後一個 echo $? 所得到的結果是0,因爲上一次執行 echo 正常顯示2。
如果寫一個檔案名爲 abc . sh ,內容如下:
#!/bin/sh
echo $#: $1 $2 $3 $4 $5 $6 $7 $8 $9
echo $@
接著以下列指令來執行該檔案
419
m
FreeBSD 入 n 應用
□ □ □
$ chmod a+x abc.sh
$ ./abash a T, b c d ,T a f
4:a b c d e f
a b cd e f
上面最後二行即爲執行結果。我們耵以看到$#即爲參數的個數,而$1,
$2, $3.,. 分別代表了輸入的參數 Wb c d ”, Wf _ ,而最後的$@則是所
有參數。
19.2.3 系統内定的標準變數
你可以使用 set 這個指令來看目前系統中內定了哪些參數。一般而言會
有 $ HOME , SSHELL , $ USER , $PATH 等。
$ echo $HOME
/home/jack
$ echo $PATH
/usr/bin:/usr/sbin:/bin
19.2.4 空變數的處理
如果程式執行時,有一個變數的値尙未被給定,你耵以利用下列方式來
設定對於這種情形提出警告:
$ eGho $oumber one
one
420
chapter 19
Shell Script
$ set -u
$ echo Snumber one
sh: ERROR: number: Parameter not set
在 S et - u 之後,如果變數尙未設定,則會提出警告。你也可以利用下列
的方式來處理一些空變數及變數的代換:
${var>word}
如果變數 var 尚未設定或是 nulh 則將使用 word 這個値^但不改變 var 變數
的内容
${var:=word}
如果變數 var 尚未設定或是 null ,則變數 var 的内容將等於 word 這個字串,
並使用這個新的値。
${var:?word}
如果變數 var 已經設定了,而且不是 null | 則將使用變數 var 。否則則印出
word 這個字串,並強制離開程式。我們可以設定一個字串 "Parameter null or
not set 11 來在變數未設定時印出,並終止 程式。
${var:+word}
如果變數 var 已經設定了,而 S 不是 null ,則以 word 這個字串取代它,否則
就不取代。
我們以下面的例子來說明:
$ echo $name Wang
Wang
$ echo ${name>Jack} Wang
Jack Wang
$ echo $name Wang
Wang
上面的例子中,變數 $ name 並未被取代,而下面的例子中, $ name 將被 取代:
$ echo $name Wang
Wang
$ echo ${name:=Jack} Wang
421
t^eBSD 入 ”臟用口 □ □ □
□ □
Jack Wang
$ echo $name Wang
Jack Wang
19.3 運算符號
19.3.1 四則運算
在 shell 中的四則運算必須使用 expr 這個指令來輔助。因爲這是一個指
令,所以如果要將結果指定給變數,必須使用、包起來。請注意,在 + -
*/ 的二邊都有空白,如果沒有空白將產生錯誤:
$ expr 5 -2
3
$ som='expr5 + 10'
$ echo $sum
15
$ sum='expr $sum / 3'
$ echo $sum
5
還有一個要特別注意的是乘號*在用 expr 運 算時, 不耵只寫*。因爲*
有其他意義,所以要使用\*來代表。另外,也可以用%來求餘數。
$ count='expr 5 \* 3'
$ echo $count
$ echo 'expr $count % 3'
5
422
chapter 19
Shell Script
我們再列出更多使用 expr 指令的方式
之後的表達示。有的符號有特殊意義
如\*,否則必須用單引號將它括起來
下列表中爲可以放在指令 expr
必須以\將它的特殊意義去除,例
如:
類別
口 。 /Zi
說明
_
條件判斷
exprl \ | expr ;
如果 exprl 不瑋零或 null 則傳回 exprl * 否則傳回 expr 2 。
exprl \& expr ;
1
如果 exprl 及 expr 2 都不為零或 nulh 則傳回 exprl ,否則
傳回0。
四則運算
exprl + expr 2
傳回 exprl 加 expr 2 後的値。
exprl - expr 2
傳回 exprl M expr ? 後的值°
expr IV expr 2
傳回 exprl 乘
expr 2 後的値。
exprl / expr 2
傳回 exprt 除 expr 2 後的値°
exprl % expr 2
傳回 exprl 除 expr 2 的餘數。
大小判斷
exprl \> expr 2
如果 expr ! 大於 expr 2 則傳回1,否則傳回0。如果 exprl
及 expr 2 都是數字,則是以數字大小判斷,否則是以文字判
斷。以下皆同 f
exprl \< expr 2
如果 expM 小於 expr 2 則傳回1,否則傳回0。
exprl = expr 2
如果 expr 〗 等於 expr 2 則傳回1,否則傳回0。
exprl !- expr 2
如果 exprl 不等於 expr 2 則傳回1,否則傳回0。
exprl \>= expr 2
如果 exprl 大於或等於 expr 2 則傳回1,否則傳回0。
exprl \<= expr 2
如果 exprl 小於或等於 expr 2 則傳回1,否則傳回0。
文字處理
exprl : expr 2
比較一固定字^
下列字元來輔 E
. 匹配一個字5
$找字串的結 H
[ list ] 找符合 li !
* 找尋0個或-
\( \]傳回括;
隹,即 regular expression 。可以使用
卜
1 °
中的任何字串。
一個以上在*之前的字。
號中所匹配的字串。
423
FreeBSD 入 n 繼用口 □:: □二 --
我們針對比較複雜的文字處理部份再加以舉例:
$tty
ttypO
$ expr 'tty , : '\%.\)\$ n
pO
$ expr s tty ,: '.*\(„\)$ r
pO
上面執行 tty 的結果是 ttypO ,而在 expr 中,在:右側的運算式中,先找
表示0個或一個以上任何字元,傳回之後在結尾 ($) 時的二個字元
\(..\)。在第一個 expr 的式 子中, 因爲使用雙引號,所以在$之前要用…
個\來去除$的特殊意義,而第二個 expr 是使用單引號,在單引號内的
字都失去了特殊意義,所以在$之前不必加\。
19.3,2 簡單的條件判斷
最簡單的條件判斷是以&&及 II 這二個符號來表示。
$ \s /home && echo found
found
$ Is /dev/aaaa && echo found
Is: /dev/aaaa: No such file or directory
$ Is -d /home || echo not found
/home
$ Is /dev/aaaa && echo not found
Is: /dev/aaaa: No such file or directory
424
chapter 19
Shell Script
a&&b 如果 a 是真,則執行 b 。如果 a 是假,則不執行 b 。
a || b 如果 a 是假,則執行 b 。如果 a 是真,則不執行 b 。
19.3.3 以 test 來比較字串及數字
我們說過 Shell Script 是一堆指令的組合,所以在比較字串及數字時一樣
是經由系統指令來達成。這裡我們使用 test 及 [ 來做運算,運算所傳回的
結果是眞 (true) 或假 ( false) 。我們可以將它應用在條件判斷上。 test 和[都
是一個指令,我們可以使用 test 並在其後加上下表中的參數來判斷眞假。
或者也可以使用[表達示]來替代 test ,要注意的是 [] 中的空白間隔。
-n strl 如果字串 strl 的長度大於 0 圖傳回 true &
-z strl 如果字串 strl 的長度等於 0 則傳回 true 。
strl 如果字串 strl 不是 nuH 則傳回 true 。
strl = str2 如果 strl 等於 str2 則傳回 true 。等號二邊有空白。
strl != str2 如果 strl 不等於 str2 則傳回 true - != 的二邊有空白。
a -eq b Equal ,等於。 a 等於 b 則傳回真 (true) °
a -ne b Not equal ,不等於 ° a 不等旅 b 則傳回真 ( true ) 。
a -gt b Grwater than ,大於 D a 大於 b 則傳回真 ( true ) 。
a-ltb Less Than ,小於。 a 小於 b 則傳回真 (true)
a -ge b Greater or equal . 大於或等於。 a 大於或等於 b 則傳回真 (true) °
a -le b Less or equal ,小於或 等於。 a 小於或等於 b 則傳回真 ( true ) 。
我們舉例來說明:
$ test 5 -eq 5 && echo true
true
$ test abc!=cde && echo true
ture
425
FreeBSD 入 P1 屬朗 ] □ □ □ □
$ [ 6 'It 10 ] && echo true
ture
$ pwd
/home
$ echo $HOME
/home/jack
$ [ $HOME = pwd' ] |j echo Not home now
Not home now
19.3.4 以 test 來處理檔案
我們也可以使用 test 及 [ 來判斷一個檔案的類型。下表中爲其 參數:
-dfiie
如果 file 為目酬傳回真 。 "
-f file
如果 fife 是一般的檔案則傳回真 ( true ) 。
-L file
如果 file 是連結檔則傳回真 ( true ) 。
-b file
如果 file 是區塊特別檔則傳回真 ( true ) 。
-c file
如果 file 是字元特別檔則傳回真 ( true )。
-u file
如果 Hie 的 SUID 己設定則傳回真 (truej 。
-g file
如果 fite 的 SQD 己設定則傳回真 ( truej 。
-k file
如果■的 sticky bit 己設定則傳回真 ( true 卜
-s file
如栗 file 的檔案長度大於 0 則傳回真 (true 卜
-r file
如果 file 可以 讀則傳回真丨 truej 。
-w fife
如果 file 可以寫則傳回真 ( true 卜
-x fife
如果勤可以執行則傳回真 ( true ) 。
我們舉例來說明:
426
■
chapter 19
Shell Script
$ [ -d /bin ] && echo /bin is a directory
/bin is a directory
$ test -r /etc/motd && echo /etc/mold is readable
/etc/motd is readable
第一個指令測試 / bin 是否存在,而且是一個目錄,如果是則執行 echo
傳回一個字串。第二個指令是測試 / etc / motd 是否可以被讀取,如果是則
執行 echo 傳回一個字串。
19,4内建指令
在 Shell 中有一些內建的指令,這些內建的指令如流程控制及 cd 等指令
是 Shell 中的必備元素。另外還有一些爲了提高執行效率的指令’如
test 、 echo 等。有的內建指令在系統中也有同樣名1冉不同版本的相 W 指
令,但是如 test 、 echo 等在執行時會僞裝成是在 / bm 中的指令。
在寫 shell script 時,要注意指令是否存在
下列即爲常見的內建 指令:
exit
離開程式,如果在 exit 之後有加上數字’表示傳回値,如: exit 0。在 UNIX 系
統下,當程式正常結束 f 會傳回一個値0,如果不正常結束則會傳回一個非0 |
的數字。
.file
dot 指令,在 shell 中可以使用
或 , .profile 0 注意.和其後的指
:來呼叫一個外部檔案,例如 ■ /etc/rc.conf
令中間有空白。
echo
印出一個字串 ◊ 如果要使用非 s
nell 内建的 echo 則打 /bin/echo 來使用。
pwd
顯示目前所在自錄。
_-----
read var. “
從標準輸入(通常是 鍵盤) 讀入一行,然後將第一個字指派給跟在 read 之後的1
第一個參數,第二個字給第二_參數1依此類推,直到最後將所有字給最後一
427
入汽牖用] □[
個 黎數。 如果只有一個參數則將整行都給第一個 參數。
readonly [ var .,]
readonly 逞個指令如果沒有加參數則顯示目 前唯讀 的變數^如果有
加變數的話,則將該變數設定為睢 ■ 。
return [ n ]
離開所在函式,如果在其後有加數字的話,則傳回該數字。和 exit -
一樣’這個指令可以傳回該函式的執行結果,0表示正常結束。
set
將$1到 $ n 設定為其參數的字 D 例如:
$date
Mon Jan 21 11:19 CST 2002
$set ' date '
$ echo $4
11:]9
wait [ n ]
等待在執行程序 ( PID ) 為 n 的背景程式結束,如果沒有加參數 n 則
等待所有背景程式結束 &
exec command
執彳: T — 個外部 程式* 通常用於要改變到另一個 shell 或是執行不同的
使用者者介面,如:
exec / usr / local / bin/startkde
export [ var ]
設定環境變數,如果沒有參數則印出新的環境變數。
eval command
把參數當成 shell 命令來執行 ,如: 一
$ a = c ; b = m ; c = d ; cmd=date
$ eval $'echo $ a $ b $ c v
Mon Jan 21 11:19 CST 2002
428
chapter 19
Shell Script
19.5 流程控制
19.5.1 if 的條件判斷
基本語法:
if condition-list
then list
elff condition-list
then list
else list
fi
範例 一:
#!/bin/sh
if test -r /etc/motd
then cat /etc/motd
else echo "There is not motd or file is riot readable"
fi
說明:上面這一個程式是撿查 / etc/motd jl 個擋案是否可以讀,如果可以則印出
該檔案,否則印出檔案不可讀。
$ cat test.sh
#_&h
if [$1 -gt5]
429
pFre ❹ BSDAPI 靡用 □ □□□=][:」
then echo 11 $1 is bigger then 5"
elif [$1 -geO]
then echo w $1 is between 5 and 0."
else echo r, $1 is less then 0 广
fi
$ ./test,sh 3
3 is between 5 and 0.
說明:這裡我們建立一個檔名爲 test . sh 的檔案,以指令 cat test . sh 來看
它的內容。接著執行 ./ test. S h 3,表示輸入一個參數3。 test . sh 檔案的內容
表示依輸入的參數判斷參數大於5或介於5和0的中間,或者是小於0。
19.5.2 while 及 until 迴圈
基本 語法:
while condition-list
do fist
done
until condition-list
do list
done
範例一 :
#!/bin/sh
N1
430
J
while [ $i -le 5 ]
do
echo $i
i='expr $i + 1'
done
說明:首先令變數 i = r , 接著在迴 i
値,每印一次 i 就加1。直到 i 大於5
範例二:
#!/bin/sh
M
until [ $i -gt 5 ]
do
echo $i
i=、expr $i + V
done
0 -
chapter 19
Shell Script
圏中當 i 小於等於
才停止。
時就印出 i 的
說明:首先令變數 bl ,接著迴圏
止。每跑一次迴_就印出 i 的値,每印
會判斷,一直執行到 i 大於5才停
一次 i 就加1。注意 while 和 until
的判斷式中,一個是 -le ,一個是 -gt
厂 FreeBSD 入門鼸用 :] [L L [
19.5.3 for 迴圏
基本語法:
for name in wordl word2 …
do do-list
done
for name
do do-list
done
範例;
$ cat color, sti
#!/bin/sh
for color in blue red green
do
echo $color
done
$ ./cofor.sh
blue
red
green
說明:這個檔案 colorsh 中,會在每一次迴圏中將關鏈字 in 後面的字串
分配給變數 color 5 然後印出變數 color °關鏈字 in 讓我們可以依序設定一
些値並指派給變數,然而,我們也可以不使用關鏈字 hi 。如果沒有關鍵
432
chapter 19
Shell Script
字 in ,程式會自動讀取輸入的參數,並依序指派給 f or 之後的變數。請看
範例二。
$ cat coiorl .sh
#!/bin/sh
for color
do
echo $color
done
$ ,/ coiorl .sh black green yellow
black
green
yellow
說明:在 coiorl . sh 這個檔中, for 迴
在執行它時輸入三個參數,迴圏會自動
數 color ,並印出它。
圏沒有使用 in 這個關鍵字。但我們
將輸入的參數指派給 for 之後的變
19.5.4 case 判斷
基本語法:
case word in
patterni) listl ;;
pattern2) list2 ;;
433
FreeBSD 入 朽臞用口 □ □ □
esac
範例 :
$ cat num.sh
for num
do
case $num in
0|112|3) echo $num is between CK3;;
4|5|6|7) echo $num is between 4 一 7;;
8|9) echo $num is 8 or 9;;
*) echo $num is not on my fist;;
esac
done
$ ./num.sh 3 8a
3 is between 0^3
8 is 8 or 9
a is noton my list
說明:這個程式是用來判斷輸入的參數大小。 for 迴圏會將每一個輸入
的參數指定給變數 num ,而在 case 中,判斷變數 nuni 的內容符合哪一個
條件,同一個條件中的每個字用 I 分開。如果未符上面的條件則一定會符
合最後一個條件 * 。每一個要執行的 list 是以;;做結尾,如果有多行
list ,只要在最後一行加上一個;;即可°
434
chapter 19
Shell Script
19,6 函式的運用
在 Shell Script 中也可以使用函式 ( function ) 來使用程式模組化
基本語法:
函式有幾個要注意的地方=
M 在使用函式之前一定要先定義它,也就是在一個 Shell Script 中,一定要先寫函式
的内容,在檔案最後再寫蜜呼叫函式的程式部份。
在 Shell Script 中的變數全部都是全域變數 ( Global) ,所以在函式中的變數也會影
響函式外的其他部份。
■ 命令列輸入的參數在 Shell Script 中是以 $1, $2 .... 來讀取,但是這些參數並不會在
函式中出現。所以必須使用傳遞參數的方式來將要在函式中使用的變數傳給該函
式。傳遞的方法和在命令列中使用 Shell Script 的方式 一樣,例如 : name argl
arg2.. 。 傳進函式的變數會以 $1 , $2… 來儲存,這和命令列傳給 Shelf Script 的參數
名稱一樣但内容不同。
範例: ;
$ cat test.sh
#1 /bin/sh
ERRL0G=$1
435
FreeBSD 入 P1 臛 用口 ]
ok(>
{
read aos
case $ans in
[yYf) return 0;;
*) return 1;;
esac
)
errexit (}
{
echo $1
data » $ERRLOG
echo $1 » SERRLOG
exit
}
echo -n "Test errexit function [y/n] T,
ok && errexit 'Testing the errexit function 1 '
echo Normal termination
$ ,/test.sh err.fog
說明:
這個程式中有二個函式: errexit 及 ok 。第一行定義要將 log 檔存在傳給
這個 Shell Script 的第一個參數。接著是二個函式,之後印出一行字,
echo - n 表示印出字後游標不換行。然後再執行 ok 這個函式,如果 ok 函
式執行成功則再執行 errexit 函式,並傳給 errexit 函式一個字串,最後再
印出一個字串。
436
在 ok 函式中,使用 read 指令來讀入
判斷使用者輸入的値是否爲 Y 或 y
行,如果不是則傳回0代表成功執行函
如果 ok 函式傳回1便不會執行 enexii
中,會先印出要傳給 errexit 的 參數”
在指定的檔案中。
it 函式。如果是0則在 errexit 函式
Testing the errexit function f, J 並言己 H
chapter 19
Shell Script
個參數並指派給變數 ans 。接著
如果是則傳回1代表沒有成功執
式 ok °
437
FreeBSD 入 鬥應賴口 □□□□.-[
438
_Fr®eBSD 入 Cl 廳用 ] □□□[:.
A_1 The FreeBSD Copyright
Copyright 1994-2002 FreeBSD, Inc. All rights reserved*
Redistribution and use in source and binary forms, with or without modification, are
permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this list of
conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, this list
of conditions and the following disclaimer in the documentation and/or other mate¬
rials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE FREEBSD PROJECT ”AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
FOR A PARTICULAR PURPOSE ARE DISCLAIMED, IN NO EVENT SHALL
THE FREEBSD PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUB¬
STITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
The views and conclosions contained in the software and documentation are those of
the authors and should not be interpreted as representing official policies,either
expressed or implied, of the FreeBSD Project or FreeBSD, Inc.
440
附錄 A
A.2 The 4.4 BSD Copyright
All of the documentation and software included in the 4.4BSD and 4.4BSD-Lite
Releases is copyrighted by The Regents of the University of California,
Copyright 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994 The Regents
of the University of California. All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are
permitted provided that the following conditions are met:
1- Redistributions of source code must retain the above copyright notice, this list of
conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, this list
of conditions and the following disclaimer in the documentation and/or other mate-
rials provided with the distribution,
3. All advertising materials mentioning features or use of this software must display
the following acknowledgement :
This product includes software developed by the University of California,Berkeiey
and its contributors.
4. Neither the name of the University nor the (lames of its contributors may be used to
endorse or promote products derived from this software without specific prior writ¬
ten permission.
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS
AS IS 11 AND ANY EXPRESS OR IMPLIED WARRANTIES , INCLUDING, BUT
NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
DIRECT , INDIRECT, INCIDENTAL , SPECIAL, EXEMPLARY, OR CONSEQUENT
441
奔增澡 BSD 入 P1 醒用,二 I
TIAL DAMAGES {INCLUDING, BUT NOT LIMITED TO s PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
The Institute of Electrical and Electronics Engineers and the American National
Standards Committee X3, on Information Processing Systems have given us permis¬
sion to reprint portions of their documentation.
In the following statement, the phrase v "this text 11 refers to portions of the system docu¬
mentation.
Portions of this text are reprinted and reproduced in electronic form in the second BSD
Networking Software Release, from IEEE Std 1003.1-1988, IEEE Standard Portable
Operating System Interface for Computer Environments (POSIX), copyright C 1988
by the Institute of Electrical and Electronics Engineers, Inc. In the event of any dis¬
crepancy between these versions and the original IEEE Standard, the original IEEE
Standard is the referee doaiment.
In the following statement, the phrase ''This material 11 refers to portions of the system
documentation.
This material is reproduced with permission from American National Standards
Committee X3, on Information Processing Systems, Computer and Business
Equipment Manufacturers Association (CBEMA), 311 First St., NW, Suite 500,
Washington, DC 20001-2178. The developmental work of Programming Language C
was completed by the X3J11 Technical Committee.
442
附錄 A
版權宣告
The views and conclusions contained in the software and documentation are those of
the authors and should not be interpreted as representing official policies, either
expressed or implied, of the Regents of the University of California.
A.3 GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed
Preamble
The licenses for most software are designed to take away your freedom to share and
change it* By contrast, the GNU General Public License is intended to guarantee your
freedom to share and change free software—tio make sure the software is free for all its
users. This General Public License applies tp most of the Free Software Foundation's
software and to any other program whose authors commit to using it. (Some other Free
Software Foundation software is covered by the GNU Library General Public License
instead.) You can apply it to your programs , too.
When we speak of free software, we are referring to freedom, not price. Our General
Public Licenses are designed to make sure that you have the freedom to distribute
copies of free software (and charge for this service if you wish),that you receive
source code or can get it if you want it, that you can change the software or use pieces
of it in new free programs; and that you know you can do these things*
443
鼸入 n 應用,
To protect your rights, wc need to make restrictions that forbid anyone to deny you
these rights or to ask you to surrender the rights. These restrictions translate to certain
responsibilities for you if you distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program,whether gratis or for a fee,
you must give the recipients all the rights that you have* You must make sure that they,
too, receive or can get the source code. And you must show them these terras so they
know their rights.
We protect your rights with two steps: (I) copyright the software, and (2) offer you
this license which gives you legal permission to copy, distribute and/or modify the
software.
A [so, for each author's protection and ours, we want to make certain that everyone
understands that there is no warranty for this free software. If the software is modified
by someone else and passed on, we want its recipients to know that what they have is
not the original, so that any problems introduced by others will not reflect on the origi¬
nal authors' reputations.
Finally, any free program is threatened constantly by software patents. We wish to
avoid the danger that redistributors of a free program will individually obtain patent
licenses, in effect making the program proprietary. To prevent this, we have made it
clear that any patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and modification follow,
TERMS AND CONDITIONS FOR COPYING,
DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains a notice placed
by the copyright holder saying it may be distributed under the terms of this General
Public License, The ” Progmm' below, refers to any such program or work, and a
444
mm A
"work based on the Pmgram ■’ means either the Program or any derivative work under
copyright law: that is to say, a work containing the Program or a portion of it, either
verbatim or with modifications and/or translated into another language, (Hereinafter,
translation is included without limitation in the term ” modification') Each licensee is
addressed as "you'
Activities other than copying, distribution and modification are not covered by this
License; they are outside its scope* The act oi running the Program is not restricted,
and the output from the Program is covered only if its contents constitute a work based
on the Program (independent of having been made by running the Program), Whether
that is true depends on what the Program does.
L You may copy and distribute verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and appropriately pub¬
lish on each copy an appropriate copyright notice and disclaimer of warranty; keep
intact all the notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License along with the
Program.
You may charge a fee for the physical act of transferring a copy, and you may at your
option offer warranty protection in exchange for a fee,
2* You may modify your copy or copies of the Program or any portion of it, thus form
ing a work based on the Program, and copy and distribute such modifications or
work under the terms of Section 1 above, provided that you also meet all of these
conditions:
a) You must cause the modified files to carry prominent notices staring that you
changed the files and the date of any change,
b) You must cause any work that you distribute or publish, that in whole or in part con
tains or is derived from the Program or any part thereof, to be licensed as a whole at
445
> FreeBSD 入門應 用口 □ □ =丨
no charge to all third parties under the terms of this License.
c) If the modified program normally reads commands interacti vely when run, you
must cause it, when started running for such interactive use in the most ordinary
way, to print or display an aniiooncement including an appropriate copyright notice
and a notice that there is no warranty (or else, saying that you provide a warranty)
and that users may redistribute the program under these conditions, and telling the
user how to view a copy of this License. (Exception: if the Program itself is interac¬
tive but does not normally print such an announcement, your work based on the
Program is not required to print an announcement)
These requirements apply to the modified work as a whole. If identifiable sections of
that work are not derived from the Program, and can be reasonably considered inde¬
pendent and separate works in themselves, then this License, and its terms, do not
apply to those sections when you distribute them as separate works. But when you dis¬
tribute the same sections as part of a whole which is a work based on the Program, the
distribution of the whole must be on the terms of this License, whose permissions for
other licensees extend to the entire whole,and thus to each and every part regardless
of who wrote it.
Thus, it is not the intent of this section to claim rights or contest your rights to work
written entirely by you; rather, the intent is to exercise the right to control the distribu¬
tion of derivative or collective works based on the Program.
In addition, mere aggregation of another work not based on the Program with the
Program (or with a work based on the Program) on a volume of a storage or distribu¬
tion medium does not bring the other work under the scope of this License.
3. You may copy and distribute the Program (or a work based on it. under Section 2) in
object code or executable form under the terms of Sections 1 and 2 above provided
that you also do one of the following:
446
附録 A
版權宣€
a) Accompany it with the complete corresponding machine-readable source code,
which must be distributed under the terras of Sections i and 2 above on a medium
customarily used for software interchange;; or,
b) Accompany it with a written offer, valid for at least three years, to give any third
party, for a charge no more than your cost of physically performing source distribu-
tion,a complete machine-readable copy of the corresponding source code, to be dis¬
tributed under the terras of Sections 1 and 2 above on a rnedium customarily used
for software interchange; or,
c) Accompany it with the information you received as to the offer to distribute corre
spending source code. (This alternative is allowed only for noncommercial distribu-
tion and only if you received the program in object code or executable form with
such an offer,in accord with Subsection b above.)
The source code for a work means the preferred form of the work for making modifi¬
cations to it. For an executable work,complete source code means all the source code
for all modules it contains,plus any associated interface definition files,plus the
scripts used to control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include anything that is normal-
ly distributed (in either source or binary form) with the major components (compiler,
kernel, and so on) of the operating system (j>n which the executable runs, unless that
component itself accompanies the executable*
If distribution of executable or object code is made by offering access to copy from a
designated place,then offering equivalent access to copy the source code from the
same place counts as distribution of the source code, even though third parties are nol
compelled to copy the source along with the object code.
4. You may not copy , modify, siiblicense, or distribute the Program except as expressly
provided under this License. Any attempt otherwise to copy, modify, sublicense or
distribute the Program is void, and will automatically terminate your rights under
447
|[ g ^ Fr ❹ eBSD 入 n 顧用口 □ 」 =
this License. However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such parties remain in
full compliance.
5. You are not required to accept this License, since you have not signed it. However,
nothing else grants you permission to modify or distribute the Program or its deriva¬
tive works. These actions are prohibited by law if you do not accept this License.
Therefore, by modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and all its terms
and conditions for copying, distributing or modifying the Program or works based
on it.
6. Each time you redistribute the Program (or any work based on the Program), the
recipient automatically receives a license from the original licensor io copy, distrib¬
ute or modify the Program subject to these terms and conditions. You may not
impose any further restrictions on the recipients 1 exercise of the rights granted here¬
in. You are not responsible for enforcing compliance by third parties to this License.
7. If, as a consequence of a court judgment or allegation of patent infringement or for
any other reason (not limited to patent issues),conditions are imposed on you
(whether by court order, agreement or otherwise) that contradict the conditions of
this License,they do not excuse you from the conditions of this License, if you can¬
not distribute so as to satisfy simoHaneousIy your obligations under this License and
any other pertinent obligations, then as a consequence you may not distribute the
Program at all. For example,if a patent license would not permit royalty-free redis¬
tribution of the Program by all those who receive copies directly or indirectly
through you, then the only way you could satisfy both it and this License would be
to refrain entirely from distribution of the Program,
If any portion of this section is held invalid or unenforceable under any particular cir¬
cumstance, the balance of the section is intended to apply and the section as a whole is
448
附錄 A
權宣告
intended to apply in other circumstances.
It is not the purpose of this section to induce you to infringe any patents or other prop-
er£ y ri g ht claims or to contest validity of any| such claims; this section has the sole pur-
pose of protecting the integrity of the free software distribution system, which is
implemented by public license practices. Many people have made generous contribu¬
tions to the wide range of software distributed through that system in reliance on con-
sistent application of that system; it is up to the author/donor to decide if he or she is
willing to distribute software through any other system and a licensee cannot impose
that choice.
This section is intended to make thoroughly clear what is believed to be a consequence
of the rest of this License.
8. If the distribution and/or use of the Program is restricted in certain countries either
by patents or by copyrighted interfaces, the original copyright holder who places the
Program under this License may add an explicit geographical distribution limitation
excluding those countries, so that distribution is permitted only in or among coun-
tries not thus excluded. In such case, this! License incorporates the limitation as if
written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions of the
General Public License from time to time. Such new versions will be similar in spirit
to the present version, but may differ in detail to address new problems or concerns.
Each version is given a distinguishing version number. If the Program specifies a ver-
siem number of this License which applies to it and "any later version' you have the
option of following the terms and conditions either of that version or of any later ver¬
sion published by the Free Software Foundation. If the Program does not specify a ver¬
sion number of this License, you may choose any version ever published by the Free
Software Foundation.
449
preeBSD 入 ri 應用 □
□
□ □
□
10. If you wish to incorporate parts of the Program into other free programs whose dis
tribution conditions are different,write to the author to ask for permission. For soft¬
ware which is copyrighted by the Free Software Foundation,write to the Free
Software Foundation; we sometimes make exceptions for this- Our decision will be
guided by the two goals of preserving the free status of all derivatives of our free
software and of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO
WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW, EXCEPT WHEN OTHERWISE STATED IN WRITING
THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE
PROGRAM "AS IS n WITHOUT WARRANTY OF ANY KIND, EITHER
EXPRESSED OR IMPLIED , INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND
PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PRO¬
GRAM PROVE DEFECTIVE,YOU ASSUME THE COST OF ALL NECES¬
SARY SERVICING,REPAIR OR CORRECTION.
12 + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED
TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER
PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS
PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING
ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAM-
ages arising out of the use or inability to use the program
(INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
450
附錄 A
RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY
OTHER PROGRAMS),EVEN IF SUCH HOLDER OR OTHER PARTY HAS
BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New
Programs
If you develop a new program, and you want it to be of the greatest possible use to the
public,the best way to achieve this is to make it free software which everyone can
redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest to attach them to the
start of each source file to most effectively convey the exclusion of warranty ; and each
file should have at least the "copyright” line and a pointer to where the full notice is
found.
one line to give the program's name and an idea of what it does.
Copyright (C) yyyy name of author
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License,or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied war-
45 ]
$ FreeBSD 入 n 廳坩]
ranty of
MERCHANTABILITY or FITNESS FORA PARTICULAR PUR”
POSE. See the
GNU General Public License for more details.
You should have received u copy of the GNU General Public
License
along with this program; if not, write to the Free Software
Foundation y !nc-,59 Temple Place - Suite 330, Boston,MA
02111-1307, USA.
Also add information on how to contact you by electronic and paper maii.
If the program is interactive, make it output a short notice like this when it starts in an
interactive mode:
Gnomovision version 69, Copyright (C) year name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for
details
type "show w\ This is free software, and you are welcome
to redistribute it under certain conditions; type "show c'
for details.
The hypothetical commands 'show w' and "show c 1 should show the appropriate parts
of the General Public License. Of course,the commands you use may be called some¬
thing other than "show w 1 and "show c f ; they could even be mouse-clicks or menu
items—whatever suits your program.
You should also get your employer (if you work as a programmer) or your school, if
any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample;
alter the names:
452
附錄 A
權宣告
Yoyodyne, Inc” hereby disclaims all copyright
interest in the program r Gnomovision r
(which makes passes at compilers) written
by James Hacker.
signature ofTy Coon, 1 April 1989
Ty Coon,President of Vice
A.4 GNU LIBRARY GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1991 Free Software Foundation, Inc.
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
[This is the first released version of the library GPL. It is
numbered 2 because it goes with version 2 of the ordinary GPL.]
Preamble
The licenses for most software are designed to take away your freedom to share and
change it. By contrast, the GNU General Public Licenses are intended to guarantee
your freedom to share and change free software—to make sure the software is free for
all its users.
Fr ❹ eBSD 入 ft 顧用 □ □
□
This license, the Library General Public License, applies to some specially designated
Free Software Foundation software, and to any other libraries whose authors decide to
use it You can use it for your libraries, too.
When we speak of free software, we are referring to freedom, not price. Our General
Public Licenses are designed to make sure that you have the freedom to distribute
copies of free software (and charge for this service if you wish),that you receive
source code or can get it if you want it, that you can change the software or use pieces
of it in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid anyone to deny you
these rights or to ask you to surrender the rights. These restrictions translate to certain
responsibilities for you if you distribute copies of the library, or if you modify it.
For example, if you distribute copies of the library, whether gratis or for a fee, you
must give the recipients all the rights that we gave you. You must make sure that they,
too, receive or can get the source code. If you link a program with the library, you
must provide complete object files to the recipients so that they can relink them with
the library, after making changes to the library and recompiling it + And yoo must show
them these terms so they know their rights.
Our method of protecting your rights has two steps: (1) copyright the library, and (2)
offer you this license which gives you legal permission to copy, distribute and/or mod¬
ify the library-
Also, for each distributor's protection, we want to make certain that everyone under¬
stands that there is no warranty for this free library. If the library is modified by some¬
one else and passed on, we want its recipients to know that what they have is not the
original version, so that any problems introduced by others wili not reflect on the orig¬
inal authors' reputations.
附錄 A
版權宣告
Finally,any free program is threatened constantly by software patents. We wish to
avoid the danger that companies distributing free software will individually obtain
patent licenses, thus in effect transforming the program into proprietary software. To
prevent this, we have made it clear that any patent must be licensed for everyone’s free
use or not licensed at all.
Most GNU software, including some libraries, is covered by the ordinary GNU
General Public License,which was designed for utility programs. This license, the
GNU Library General Public License, applies to certain designated libraries. This
license is quite different from the ordinary one; be sure to read it in full,and don't
assume that anything in it is the same as in the ordinary license.
The reason we have a separate public license for some libraries is that they blur the
distinction we usually make between modifying or adding to a program and simply
using it Linking a program with a library, without changing the library, is in some
sense simply using the library, and is analogous to running a utility program or appli¬
cation program* However, in a textual and legal sense,the linked executable is a com¬
bined work, a derivative of the original library, and the ordinary General Public
License treats it as such.
Because of this blurred distinction, using tjhe ordinary General Public License for
libraries did not effectively promote software! sharing,because most developers did not
use the libraries. We concluded that weaker conditions might promote sharing better.
However, unrestricted linking of non-free programs would deprive the users of those
programs of all benefit from the free status of the libraries themselves. This Library
General Public License is intended to permilt developers of non^free programs to use
free libraries, while preserving your freedom as a user of such programs to change the
free libraries that are incorporated in them, {We have not seen how to achieve this as
regards changes in header files,but we have achieved it as regards changes in the actu¬
al functions of the Library.) The hope is that this will lead to faster development of
455
FreeBSD 入 n 醒用
free libraries.
The precise terms and conditions for copying, distribution and modification follow.
Pay close attention to the difference between a "work based on the library 11 and a
"work that uses the library M . The former contains code derived from the library, while
the latter only works together with Ihe library.
Note that if is possible for a library to be covered by the ordinary General Public
License rather than by this special one.
TERMS AND CONDITIONS FOR COPYING, DISTRI¬
BUTION AND MODIFICATION
0- This License Agreement applies to any software library which contains a notice
placed by the copyright holder or other authorized party saying it may be distributed
under the terms of this Library General Public License (also called f, this License”).
Each licensee is addressed as ”you T ’.
A "library" means a collection of software functions and/or data prepared so as to be
conveniently linked with application programs (which use some of those functions and
data) to form execotables*
The "Library", below, refers to any such software library or work which has been dis¬
tributed under these tenrus. A "work based on the Library' 1 means either the Library or
any derivative work under copyright law; that is to say, a work containing the Library
or a poition of it, either verbatim or with modifications and/or translated straightfor¬
wardly into another language. (Hereinafter, translation is included without limitation in
the terra lp modification 11 .)
456
附錄 a
Source code" for a work means the preferred form of the work for making modifica¬
tions to it For a library, complete source code means all the source code for all mod-
ules it contains, plus any associated interface definition files, plus the scripts used to
control compilation and installation of the library.
Activities other than copying, distribution ^nd modification are not covered by this
License; they are outside its scope. The act of running a program using the Library is
not restricted, and output from such a program is covered only if its contents constitute
a work based on the Library (independent of the use of the Library in a tool for writing
it). Whether that is true depends on what the Library does and what the program that
uses the Library does.
1 ■ You may copy and distribute verbatim copies of the Library's complete source code
as you receive it,in any medium, provided that you conspicuously and appropriately
publish on each copy an appropriate copyright notice and disclaimer of warranty;
keep intact all the notices that refer to this License and to the absence of any war¬
ranty; and distribute a copy of this License along with the Library.
You may charge a fee for the physical act of transferring a copy, and you may at your
option offer warranty protection in exchange for a fee.
2 - You nia y modify your copy or copies of th^ Library or any portion of it, thus form
ing a work based on the Library, and copy End distribute such modifications or work
under the terms of Section 1 above, provided that you also meet all of these condi ,
tions:
a) The modified work must itself be a software library.
b) You must cause the files modified to carry prominent notices stating that you
changed the files and the date of any change.
c) You must cause the whole of the work to be licensed at no charge to all third parties
457
j .gy FreeBSD 入 n 應用 ]□ □ □ □ Z L.
under the terms of this License.
d) If a facility in the modified Library refers to a function or a table of data to be sup
plied by an application program that uses the facility, other than as an argument
passed when the facility is invoked, then you must make a good faith effort to
ensure that, in the event an application does not supply such function or table, the
facility still operates, and performs whatever part of its purpose remains meaning¬
ful. (For example, a function in a library to compute square roots has a purpose that
is entirely well-defined independent of the application. Therefore^ Subsection 2d
requires that any application-supplied function or table used by this function must
be optional: if the application does not supply it, the square root function must still
compute square roots.)
These requirements apply to the modified work as a whole. If ideniittable sections
of that work are not derived from the Library, and can be reasonably considered
independent and separate works in themselves, then this License, and its terms, do
not apply to those sections when you distribute them as separate works. But when
you distribute the same sections as part of a whole which is a work based on the
Library, the distribution of the whole must be on the terms of this License, whose
permissions for other licensees extend to the entire whole, and thus to each and
every part regardless of who wrote it*
Thus, it is not the intent of this section to claim rights or contest your rights to work
written entirely by you; rather, the intent is to exercise the right to control the distri¬
bution of derivative or collective works based on the Library*
In addition, mere aggregation of another work not based on the Library with the
Library (or with a work based on the Library) on a volume of a storage or distribution
medium does not bring the other work under the scope of this License,
3, You may opt to apply the terms of the ordinary GNU General Public License instead
of this License to a given copy of the Library. To do this, you must alter all the
458
附錄 A
¥權宣告
notices that refer to this License, so that | they refer to the ordinary GNU General
Public License, version 2, instead of to this License. (If a newer version than ver-
sion 2 of the ordinary GNU General Public License has appeared, then you can
specify that version instead if you wish.) Do not make any other change in these
notices*
Once this change is made in a given copy,it is irreversible for that copy, so the ordi¬
nary GNU General Public License applies to all subsequent copies and derivative
works made from that copy.
This option is useful when you wish to copy part of the code of the Library into a pro¬
gram that is not a library.
4 You may copy and distribute the Library (or a portion or derivative of it, under
Section 2) in object code or executable form under the terms of Sections i and 2
above provided that you accompany it with the complete corresponding machine-
readable source code, which must be distributed under the terms of Sections 1 and 2
above on a medium customarily used for software interchange*
If distribution of object code is made by offering access to copy from a designated
place, then offering equivalent access to copy the source code from the same place sat¬
isfies the requirement to distribute the source code,even though third parties are not
compelled to copy the source along with the object code.
5. A program that contains no derivative of any portion of the Library, but is designed
to work with the Library by being compiled or linked with it,is called a "work that
uses the Library' Such a work, in isolation, is not a derivative work of the Library,
and therefore falls outside the scope of this License*
However, linking a ” work that uses the Library" with the Library creates an executable
that is a derivative of the Library (because it contains portions of the Library), rather
than a ” work that uses the library' The executable is therefore covered by this
459
FreeBSD 入 P1 應用 □ □ □ □ :
License. Section 6 states terms for distribution of such executables.
When a ’『work that uses the Library" uses material from a header file that is part of the
Library, the object code for the work may be a derivative work of the Library even
though the source code is not. Whether this is true is especially significant if the work
can be linked without the Library, or if the work is itself a library. The threshold for
this to be true is not precisely defined by law*
If such an object file uses only numerical parameters, data structure layouts and acces¬
sors, and small macros and small inline functions (ten lines or less in length), then the
use of the object file is unrestricted, regardless of whether it is legally a derivative
work. (Executables containing this object code plus portions of the Library will still
fail under Section 6,)
Otherwise, if the work is a derivative of the Library, you may distribute the object
code for the work under the terms of Section 6. Any executables containing that work
also fall under Section 6, whether or not they are linked directly with the Library itself.
6 ‘ As an exception to the Sections above, you may also compile or link a " work that
uses the Library 11 with the Library to produce a work containing portions of the
Library, and distribute that work under terms of your choice, provided that the terms
permit modification of the work for the customer's own use and reverse engineering
for debugging such modifications.
You must give prominent notice with each copy of the work that the Library is used in
it and that the Library and its use are covered by this License. You must supply a copy
of this License. If the work during execution displays copyright notices, you must
include the copyright notice for the Library among them, as well as a reference direct¬
ing the user to the copy of this License. Also, you must do one of these things:
a) Accompany the work with the complete corresponding machine-readabte source
code for the Library including whatever changes were used in the work (which must
460
附錄 A
版權宣告
be distributed under Sections 1 and 2 above); and, if the work is an executable
linked with the Library, with the complete machine-readable "work that uses the
Library", as object code and/or source codje, so that the user can modify the Library
and then relink to produce a modified executable containing the modified Library.
(It is understood that the user who changes the contents of definitions files in the
Library will not necessarily be able to recompile the application to use the modified
definitions.)
b) Accompany the work with a written offer,valid for at least three years, to give the
same user the materials specified in Subsection 6a , above, for a charge no more than
the cost of performing this distribution.
c) If distribution of the work is made by offering access to copy from a designated
place, offer equivalent access to copy the above specified materials from the same
pi ace.
d) Verify thal the user has already received a copy of these materials or that you have
already sent this user a copy.
For an executable, the required form of the 11 work that uses the Library T, must
include any data and utility programs needed for reproducing the executable from it.
However, as a special exception, the source code distributed need not include any¬
thing that is normally distributed (in either source or binary form) with the major
components (compiler, kernel,and so on) M the operating system on which the exe¬
cutable runs, unless that component itself accompanies the executable.
It may happen that this requirement contradicts the license restrictions of other pro¬
prietary libraries that do not normally accompany the operating system. Such a con¬
tradiction means you cannot use both them and the Library together in an exe¬
cutable that you distribute.
7. You may place library facilities that are a work based on the Library side-by-side in
a single library together with other library facilities not covered by this License, and
461
D FraeBSD 入 n 顧甩 □ □□□]—:
distribute such a combined library, provided that the separate distribution of the
work based on the Library and of the other library facilities is otherwise permitted,
and provided that you do these two things:
a) Accompany the combined library with a copy of the same work based on the
Library, uncombined with any other library facilities- This must be distributed under
the terms of the Sections above.
b) Give prominent notice with the combined library of the fact that part of it is a work
based on the Library, and explaining where to find the accompanying uncombmed
form of the same work,
8, You may not copy, modify, sublicense, link with, or distribute the Library except as
expressly provided under this License, Any attempt otherwise to copy, modify, sub¬
license, link with, or distribute the Library is void, and will automatically terminate
your rights under this License. However, parties who have received copies, or
rights, from you under this License will not have their licenses terminated so long as
such parties remain in full compliance.
9, You are not required to accept this License, since you have not signed it. However,
nothing else grants you permission to modify or distribute the Library or its deriva¬
tive works. These actions are prohibited by law if you do not accept this License.
Therefore, by modifying or distributing the Library (or any work based on the
Library), you indicate your acceptance of this License to do so, and all its terms and
conditions for copying, distributing or modifying the Library or works based on it.
10, Each time you redistribute the Library (or any work based on the Library), the
recipient automatically receives a license from the original licensor to copy, distrib¬
ute, link with or modify the Library subject to these terms and conditions. You may
not impose any further restrictions on the recipient^ exercise of the rights granted
herein. You are not responsible for enforcing compliance by third parties to this
License*
462
附錄 A
版權宣告
11, If,as a consequence of a court judgment qr allegation of patent infringement or for
any other reason (not limited to patent issues), conditions are imposed on you
(whether by court order, agreement or otherwise) that contradict the conditions of
i I
this License,they do not excuse you from the conditions of this License, If you can¬
not distribute so as to satisfy simultaneously your obligations under this License and
any other pertinent obligations, then as a consequence you may not distribute the
Library at all. For example, if a patent license would not permit royalty-free redistri¬
bution of the Library by all those who receive copies directly or indirectly through
you, then the only way you could satisfy both it and this License would be to refrain
entirety from distribution of the Library.
If any portion of this section is held invalid unenforceable under any particular cir¬
cumstance, the balance of the section is intended to apply, and the section as a whole is
intended to apply in other circumstances.
It is not the purpose of this section to induce you to infringe any patents or other prop¬
erty right claims or to contest validity of any |such claims; this section has the sole pur¬
pose of protecting the integrity of the free software distribution system which is impie-
mented by public license practices. Many people have made generous contributions to
the wide range of software distributed through that system in reliance on consistent
application of that system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot impose that
choice.
This section is intended lo make thoroughly clear what is believed to be a consequence
of the rest of this License*
12* If the distribution and/or use of the Library is restricted in certain countries either
by patents or by copyrighted interfaces, the original copyright holder who places the
Library under this License may add an explicit geographical distribution limitation
excluding those countries, so that distribution is permitted only in or among coun-
463
Fra ❹ BSD 入鬥廳坩 □匚 : □ □ L ;
tries not thus excluded. In such case, this License incorporates the limitation as if
written in the body of this License,
13. The Free Software Foundation may publish revised and/or new versions of the
Library General Public License from time to time. Such new versions will be simi¬
lar in spirit to the present version, but may differ in detail to address new problems
or concerns*
Each version is given a distinguishing version number. If the Library specifies a ver¬
sion number of this License which applies to it and "any later version\ you have the
option of following the terms and conditions either of that version or of any later ver¬
sion published by the Free Software Foundation. If the Library does not specify a
license version number, you may choose any version ever published by the Free
Software Foundation,
14. If you wish to incorporate parts of the Library into other free programs whose dis
tribution conditions are incompatible with these,write to the author to ask for per¬
mission. For software which is copyrighted by the Free Software Foundation, write
to the Free Software Fnufidation; we sometimes make excepiions for this. Our deci-
sion will be guided by the two goals of preserving the free status of all derivatives
of our free software and of promoting the sharing and reuse of software generatly.
NO WARRANTY
15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING
THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE
LIBRARY _ AS IS ,r WITHOUT WARRANTY OF ANY KIND,EITHER
464
附錄 A
版權宣€
EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND
PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE
LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECES^
SARY SERVICING, REPAIR OR CORRECTION.
16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED
TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER
PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS
PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING
ANY GENERAL , SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAM¬
AGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY
(INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY
OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS
BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New
Libraries
If you develop a new library, and you want it to be of the greatest possible use to the
public,we recommend making it free software that everyone can redistribute and
change. You can do so by permitting redistribution under these terms (or, alternatively,
under the terms of the ordinary General Public License).
465
Fr«oBSD 入 P1 壤用 □ □
□
To apply these terms, attach the following notices to the library. It is safest to attach
them to the start of each source file to most effectively convey the exclusion of war¬
ranty; and each file should have at least the ” copyright” line and a pointer to where the
full notice is found.
one line to give the library's name and an idea of what it does.
Copyright (C) year name of au thor
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License,or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied war¬
ranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PUR¬
POSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General
Public
License along with this Ubraiy; if not, write to the
Free Software Foundation, Inc„ 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA.
Also add information on how to contact you by electronic and paper mail.
You should also get your employer (if you work as a programmer) or your school,if
any, to sign a "copyright disclaimer 1 ' for the library, if necessary. Here is a sample;
alter the names:
466
附錄 A
版權宣告
Yoyodyne, Inc. f hereby disclaims all copyright interest in
the library 、 Frob l {a library for tweaking knobs) written
by James Random Hacker.
signature ofTy Coon, 1 April 1990
Ty Coon,President of Vice
That's all there is to it!
467
Fr® ❹ BSD 入 1*1 應用 —
軟體分類列表
J : 發 FreeBSD AH 酬 □ □□□□!"□ 1
目前在 FreeBSD pom 中,共收錄超過六千六百個軟體。以下爲 0 前所
有軟體的分類:
分類名稱
數量
說 明
Afterstep
23
Ports to support the AfterStep window manager.
Archivers
57
Utilities for archiving and unarchiving data
Astro
48
Applications related to astronomy.
Audio
289
Audio utilities - most require a supported sound card.
Benchmarks
25
Utilities for measuring system performance.
Biology
49
Software related to Biology.
Cad
37
Computer Aided Design utilities.
Chinese
n
Ported software for the Chinese market.
Comms
59
Communications utilities.
Converters
66
Format conversion utilities.
Databases
171
Database software.
Deskutils
52
Various Desktop utilities s
Deve!
760
Software development utilities and libraries.
Editors
242
Common text editors.
Elisp
157
Emacs lisp ports.
Emulators
88
Utilities for emulating other OS types.
French
8
Ported software for French countries.
Ftp
66
FTP client and server utilities.
Games
441
Various and sundry amusements.
German
19
Ported software for Germanic countries.
Gnome
215
Components of the Gnome Desktop environment.
Graphics
412
Graphics libraries and utilities.
Hebrew
4
Ported software for Hebrew language.
Ipv6
106
IPv6 related software*
Ire
62
Internet Relay Chat utilities.
Japanese
450
Ported software for the Japanese market
Java
101
Java language support
Kde
9?
Software for the K Desktop Environment
Korean
71
Ported software for the Korean market.
Lang
245
Computer languages.
470
^ 附錄 B
fyJ ~Ports 軟體分類列表
分類名稱
數量
明
Linux
173
Linux applicatior
s and support utilities.
Mail
285
Electronic mail p
pckages and utilities.
Math
163
Mathematical a
Dmpufation software.
Mbone
14
Applications and utilities for the mbone.
Misc
282
Miscellaneous utilities.
Net
604
Networking utilities.
News
76
USENET News support software.
Offix
6
An office automation suite of sorts.
Palm
30
Software support for the 3Com Palm(tm) series.
Perl5
672
Utilities/modules for the PERL5 language.
Picobsd
1
Ports to support RicoBSD,
Plan?
7
Software from the plan9 Operating System.
Print
292
Utilities for dealing with printing.
Python
170
Software related to the python language.
Ruby
197
Software related to the ruby language.
Russian
28
Ported software for the Russian market.
Science
9
Scientific applicdtlons.
Security
307
System security software.
Shells
32
Various shells (tcsh, bash, etc).
Sysutils
240
Various system utilities.
Tcl80
6
TCL v8.0 and packages which depend on it.
Tcl81
I
TCL v8J and packages which depend on it
Tcl82
]2
TCL v8.2 and paqkages which depend on it.
Tcl83
23
TCL v8.3 and packages which depend on it.
Textproc
347
Text processing/search utilities*
Tk42
3
Tk4.2 and packages which depend on it.
Tk80
16
TkS.O and packages which depend on it
Tk82
44
Tk8.2 and packages which depend on it.
Tk83
43
Tk8.3 and packages which depend on it.
TkstepSO
10
The Tk toolkit with NexTSTEP look and packages which
depend on it.
Ukrainian
7
Ported software for the Ukrainian market.
Vietnamese
13
Ported software for the Vietnamese market
Windowmaker
93
Ports to support the WindowMaker window manager
471
〕FreeBSD 入 fl 應 甩 ] □]—
分類名稱
數置
說 明
Www
498
WEB utilities (browers, HTTP servers, etc).
XI1
205
X Window System based utilities.
XI1 -clocks
35
X Window System based clocks,
29
X Window System based file managers.
XI 1-fonts
66
X Window System fonts and font utilities.
XI1-servers
39
X Window System servers.
XH-toolkits
152
X Window System based development toolkits.
XI 1-wm
78
X Window System Window Managers.
Zope
10
Software related to the zope platform.
472
JZg^FraeBSD 入門廳 用口 □ 」 ]
如果您想要自行製作 FreeBSD 安裝光碟,您耵以自各大 FTP 站台下載
FreeBSD 回來自行燒錄。 FreeBSD 各個 RELEASE 版本推出時,都會將光
碟的 ISO 檔釋出,如果您要燒錄 RELEASE 版的開機光碟,必須自 ftp 站
台下載 ISO 檔。如果您所要燒錄的版本是 STABLE 版,通常都沒有 ISO
檔可以下載,我們必須自行選擇所要燒錄的檔案回來燒錄。在這裡我們
就分別針對 RELEASE 及 STABLE 版本的光碟燒錄來加以說明。我們使
用的燒錄軟體是 NERO ,您可以自 http://www,nero.com F 載試用版本。
C.1 燒錄 RELEASE 版安裝光碟
首先,請到離您最近的 FTP 站台下載所需的 ISO 擋,以 FreeBSD 4.5-
RELEASE 爲例,我們以 FTP 軟體至 %//11從1^1€土!1_.6血加4>11他386/180-
IMAGES/4.5-RELEASE/ 目錄下,您可以看到以下幾個檔案:
4.5-instdUso
FreeBSD 安裝光碟,包含常用的 packages 。
4.5-mini.iso
FreeBSD 安裝光碟,只有安裝必備檔,不含常用的 packages 。
4,5-disc2jso
修復光碟 * 可以開機並可自光碟執行系統指令。
4,5-disc3jso
包含更多的 package 軟體。
4 + 5-disc4.iso
包含更多的 package 軟體。
CHECKSUM.MD5
各個 ISO 檔的 MD5 檢查結果。
我們選擇第一個 INSTALL 光碟下載後,將擋名改成 4,5-instalbug 後,
請依下列步驟進行燒錄:
Stepl :進入 NERO 後,使用 [File]->[0pen] 開啓檔案
474
附錄 c _
製作 FreeB^S 安裝光碟
step 2 : 選擇檔案類型爲 CD - Image (气 nrg ) ,並選取檔案。
接著將出現下列畫面,直接選 OK 即可:
475
J ; "10 FreeBSD APWm □ □ C Z
Step 3 : 進入燒錄。我們點選 Finalize 將 CD 終結,並選 Write 進行燒
錄。如此便耵以燒錄出一片具光碟開機能力的 FreeBSD 光碟。
476
附錄 c _
製作 FreeBSD 安裝光碟
C_2 燒錄 STABLE 版安裝光碟
由於 STABLE 版並沒有 ISO 檔可以下載,因此我們必須自行選擇要下
載的檔案。我們以燒錄 FreeBSD 4.5-20020323- STABLE 版爲例,請以
FTP 軟體連接到 ftp :// freebsd . csie . nctu . edu . tw / piib / i 3 86/4,5 -200203 23 - STA ¬
BLE 目錄下,我們要選取除了下列三個目錄外的所有 檔案:
4.5-20020323 -STABLE
如果選了這個目録 | 將-
—直重 覆的下載所有 目録。
packages
由於 packages 目錄鏈結到其他目錄下,而且檔案很多,無法完全裝
入光 碟中。
XF 86336
這個目録也是鏈結到其他目錄下,使用一般 FTP 軟體可能無法順利下
載。它的内容通常並未因 RELEASE 或 STABLE 而有所不同,我捫可以
直接從 RELEASE 光碟中複製該目録。
一 g^FreeBSII 入 fl 躧用匚□二二
下載完成後,就可以使用下例步驟來燒錄了:
Stepl :打開 NERO ,選擇燒錄吋開機光碟,如下圖:
接著選取開機映象檔所在,請先選 Image file ^再按 Browse 去下載完後
STABLE 版的 floppies 目錄中,選取 boot.flp 這個檔來當開機檔:
接著選取 "Enable expert settings T, f 再將 "Kind of emulation " 設爲
2,88 MB 。然後就吋以按 NEW 來加入要燒錄的檔案。
478
附錄 C : —
製作 FreeBSD 安裝光碟
Ste P 2 :我們將該來下載的所有檔案加入燒錄清單後,就 W 以執行寫入
Step 3 :寫入 CD 。在上圖中執行 "Write CD ” 後,將出現下列畫面,我
們直接選取 " Write " 即可進入燒錄。如此便完成 STABLE 版安裝光碟的製
作了。
479
網路服務事業部
博碩文化秉持服務、創新、進步的精神,為更多讀者提供
更豐富、迅速的售後服務,服務項目如下:
I 寄回讀者 回函: 即成為博碩之友,並可獲贈 。最 新出版情報”一份。
2. 免費書籍內容諮詢服務
@僅限於對「書籍內容」及「光碟使用」部份,譆以正楷寫明書名、作者'頁碼 ,並詳
述您的問題內容,我們才能清楚地為您解答,請傳真至 (02)2696-2867 或利用客服信
箱。
◎在收到您的書面問題資料後,將會由作者或相關人員為您說明,原則上於一週內為您
答覆。
◎因本公司未代理軟體銷售,所以有關軟體問題請直接連絡相關軟體廠商或代 理商。
3. 換書: 書籍內容有瑕疵、毀損及短少時’僅限更換相同產品。請您先以客服電話登記
後 , 將該書直接寄回網路服務事業部,並註明姓名'電話'寄送地址,本公司將於收到
薔籍後一週內將新書補寄予您。
七 附件遺失 補發: 請附購買發票或收據証明影本傳真至 (02)2696-2867
@光碟類[劃撥費用〗00元(內含光碟+掛號費)】
◎磁片類【填寫 E-moil 帳號,方便為您傳送檔案】
◎部份書籍限於版權限定,無法提供附件分售,請見諒。
◎傳真資料請註明購買書名、姓名、電話、寄送地址及劃撥收據。
5. 博碩文化網址 http://www.drmaster.conn.tw
◎提供您最新出版書訊'書籍更正區、下載區、留言版。
◎留言版:您也可利用留言詳述您的問題內容。
O 免費電子報申請:於網站首頁登録 E - moil 帳號 或於讓 者回函中註明均可。
6, 各式査詢 服務: 新書資料、書店位址、訂購方式請利用客服電話。
以上服務項目請多利用客服傳真或客服信箱,如使用客服傳真,請註明網路服務事業部
李琬茹收,我們將立即與您聯絡。
服務時間:週一到週五 08:30am 〜 5:30pm
客服電話: (02)2696-2869 分機 213 李琬茹
客服傳真: {02)2696^2867
客服信箱: Web@drm aster, com + tw
公司地址: 221台北縣汐止市新台五路一段1〗2號10樓 A 棟