diff --git a/zh_TW.Big5/books/handbook/Makefile b/zh_TW.Big5/books/handbook/Makefile
index d9cf0ea760..a57cbc9983 100644
--- a/zh_TW.Big5/books/handbook/Makefile
+++ b/zh_TW.Big5/books/handbook/Makefile
@@ -1,300 +1,300 @@
#
# $FreeBSD$
# Original revision: 1.108
#
# Build the FreeBSD Handbook.
#
# ------------------------------------------------------------------------
#
# Handbook-specific variables
#
# WITH_PGPKEYS The print version of the handbook only prints PGP
# fingerprints by default. If you would like for the
# entire key to be displayed, then set this variable.
# This option has no affect on the HTML formats.
#
# Handbook-specific targets
#
# pgpkeyring This target will read the contents of
# pgpkeys/chapter.sgml and will extract all of
# the pgpkeys to standard out. This output can then
# be redirected into a file and distributed as a
# public keyring of FreeBSD developers that can
# easily be imported into PGP/GPG.
#
# ------------------------------------------------------------------------
.PATH: ${.CURDIR}/../../share/sgml/glossary
MAINTAINER= doc@FreeBSD.org
DOC?= book
FORMATS?= html-split
HAS_INDEX= true
USE_PS2PDF= yes
INSTALL_COMPRESSED?= gz
INSTALL_ONLY_COMPRESSED?=
IMAGES_EN = advanced-networking/isdn-bus.eps
IMAGES_EN+= advanced-networking/isdn-twisted-pair.eps
IMAGES_EN+= advanced-networking/natd.eps
IMAGES_EN+= advanced-networking/net-routing.pic
IMAGES_EN+= advanced-networking/static-routes.pic
IMAGES_EN+= geom/striping.pic
IMAGES_EN+= install/adduser1.scr
IMAGES_EN+= install/adduser2.scr
IMAGES_EN+= install/adduser3.scr
IMAGES_EN+= install/boot-loader-menu.scr
IMAGES_EN+= install/boot-mgr.scr
IMAGES_EN+= install/config-country.scr
IMAGES_EN+= install/console-saver1.scr
IMAGES_EN+= install/console-saver2.scr
IMAGES_EN+= install/console-saver3.scr
IMAGES_EN+= install/console-saver4.scr
IMAGES_EN+= install/disklabel-auto.scr
IMAGES_EN+= install/disklabel-ed1.scr
IMAGES_EN+= install/disklabel-ed2.scr
IMAGES_EN+= install/disklabel-fs.scr
IMAGES_EN+= install/disklabel-root1.scr
IMAGES_EN+= install/disklabel-root2.scr
IMAGES_EN+= install/disklabel-root3.scr
IMAGES_EN+= install/disk-layout.eps
IMAGES_EN+= install/dist-set.scr
IMAGES_EN+= install/dist-set2.scr
IMAGES_EN+= install/docmenu1.scr
IMAGES_EN+= install/ed0-conf.scr
IMAGES_EN+= install/ed0-conf2.scr
IMAGES_EN+= install/edit-inetd-conf.scr
IMAGES_EN+= install/fdisk-drive1.scr
IMAGES_EN+= install/fdisk-drive2.scr
IMAGES_EN+= install/fdisk-edit1.scr
IMAGES_EN+= install/fdisk-edit2.scr
IMAGES_EN+= install/ftp-anon1.scr
IMAGES_EN+= install/ftp-anon2.scr
IMAGES_EN+= install/hdwrconf.scr
IMAGES_EN+= install/keymap.scr
IMAGES_EN+= install/main1.scr
IMAGES_EN+= install/mainexit.scr
IMAGES_EN+= install/main-std.scr
IMAGES_EN+= install/main-options.scr
IMAGES_EN+= install/main-doc.scr
IMAGES_EN+= install/main-keymap.scr
IMAGES_EN+= install/media.scr
IMAGES_EN+= install/mouse1.scr
IMAGES_EN+= install/mouse2.scr
IMAGES_EN+= install/mouse3.scr
IMAGES_EN+= install/mouse4.scr
IMAGES_EN+= install/mouse5.scr
IMAGES_EN+= install/mouse6.scr
IMAGES_EN+= install/mta-main.scr
IMAGES_EN+= install/net-config-menu1.scr
IMAGES_EN+= install/net-config-menu2.scr
IMAGES_EN+= install/nfs-server-edit.scr
IMAGES_EN+= install/ntp-config.scr
IMAGES_EN+= install/options.scr
IMAGES_EN+= install/pkg-cat.scr
IMAGES_EN+= install/pkg-confirm.scr
IMAGES_EN+= install/pkg-install.scr
IMAGES_EN+= install/pkg-sel.scr
IMAGES_EN+= install/probstart.scr
IMAGES_EN+= install/routed.scr
IMAGES_EN+= install/security.scr
IMAGES_EN+= install/sysinstall-exit.scr
IMAGES_EN+= install/timezone1.scr
IMAGES_EN+= install/timezone2.scr
IMAGES_EN+= install/timezone3.scr
IMAGES_EN+= install/userconfig.scr
IMAGES_EN+= install/userconfig2.scr
IMAGES_EN+= mail/mutt1.scr
IMAGES_EN+= mail/mutt2.scr
IMAGES_EN+= mail/mutt3.scr
IMAGES_EN+= mail/pine1.scr
IMAGES_EN+= mail/pine2.scr
IMAGES_EN+= mail/pine3.scr
IMAGES_EN+= mail/pine4.scr
IMAGES_EN+= mail/pine5.scr
IMAGES_EN+= install/example-dir1.eps
IMAGES_EN+= install/example-dir2.eps
IMAGES_EN+= install/example-dir3.eps
IMAGES_EN+= install/example-dir4.eps
IMAGES_EN+= install/example-dir5.eps
IMAGES_EN+= security/ipsec-network.pic
IMAGES_EN+= security/ipsec-crypt-pkt.pic
IMAGES_EN+= security/ipsec-encap-pkt.pic
IMAGES_EN+= security/ipsec-out-pkt.pic
IMAGES_EN+= vinum/vinum-concat.pic
IMAGES_EN+= vinum/vinum-mirrored-vol.pic
IMAGES_EN+= vinum/vinum-raid10-vol.pic
IMAGES_EN+= vinum/vinum-raid5-org.pic
IMAGES_EN+= vinum/vinum-simple-vol.pic
IMAGES_EN+= vinum/vinum-striped-vol.pic
IMAGES_EN+= vinum/vinum-striped.pic
IMAGES_EN+= virtualization/parallels-freebsd1.png
IMAGES_EN+= virtualization/parallels-freebsd2.png
IMAGES_EN+= virtualization/parallels-freebsd3.png
IMAGES_EN+= virtualization/parallels-freebsd4.png
IMAGES_EN+= virtualization/parallels-freebsd5.png
IMAGES_EN+= virtualization/parallels-freebsd6.png
IMAGES_EN+= virtualization/parallels-freebsd7.png
IMAGES_EN+= virtualization/parallels-freebsd8.png
IMAGES_EN+= virtualization/parallels-freebsd9.png
IMAGES_EN+= virtualization/parallels-freebsd10.png
IMAGES_EN+= virtualization/parallels-freebsd11.png
IMAGES_EN+= virtualization/parallels-freebsd12.png
IMAGES_EN+= virtualization/parallels-freebsd13.png
IMAGES_EN+= virtualization/virtualpc-freebsd1.png
IMAGES_EN+= virtualization/virtualpc-freebsd2.png
IMAGES_EN+= virtualization/virtualpc-freebsd3.png
IMAGES_EN+= virtualization/virtualpc-freebsd4.png
IMAGES_EN+= virtualization/virtualpc-freebsd5.png
IMAGES_EN+= virtualization/virtualpc-freebsd6.png
IMAGES_EN+= virtualization/virtualpc-freebsd7.png
IMAGES_EN+= virtualization/virtualpc-freebsd8.png
IMAGES_EN+= virtualization/virtualpc-freebsd9.png
IMAGES_EN+= virtualization/virtualpc-freebsd10.png
IMAGES_EN+= virtualization/virtualpc-freebsd11.png
IMAGES_EN+= virtualization/virtualpc-freebsd12.png
IMAGES_EN+= virtualization/virtualpc-freebsd13.png
IMAGES_EN+= virtualization/vmware-freebsd01.png
IMAGES_EN+= virtualization/vmware-freebsd02.png
IMAGES_EN+= virtualization/vmware-freebsd03.png
IMAGES_EN+= virtualization/vmware-freebsd04.png
IMAGES_EN+= virtualization/vmware-freebsd05.png
IMAGES_EN+= virtualization/vmware-freebsd06.png
IMAGES_EN+= virtualization/vmware-freebsd07.png
IMAGES_EN+= virtualization/vmware-freebsd08.png
IMAGES_EN+= virtualization/vmware-freebsd09.png
IMAGES_EN+= virtualization/vmware-freebsd10.png
IMAGES_EN+= virtualization/vmware-freebsd11.png
IMAGES_EN+= virtualization/vmware-freebsd12.png
# Images from the cross-document image library
IMAGES_LIB= callouts/1.png
IMAGES_LIB+= callouts/2.png
IMAGES_LIB+= callouts/3.png
IMAGES_LIB+= callouts/4.png
IMAGES_LIB+= callouts/5.png
IMAGES_LIB+= callouts/6.png
IMAGES_LIB+= callouts/7.png
IMAGES_LIB+= callouts/8.png
IMAGES_LIB+= callouts/9.png
IMAGES_LIB+= callouts/10.png
IMAGES_LIB+= callouts/11.png
IMAGES_LIB+= callouts/12.png
IMAGES_LIB+= callouts/13.png
IMAGES_LIB+= callouts/14.png
IMAGES_LIB+= callouts/15.png
#
# SRCS lists the individual SGML files that make up the document. Changes
# to any of these files will force a rebuild
#
# SGML content
SRCS+= audit/chapter.sgml
SRCS+= book.sgml
SRCS+= colophon.sgml
SRCS+= freebsd-glossary.sgml
SRCS+= advanced-networking/chapter.sgml
SRCS+= basics/chapter.sgml
SRCS+= bibliography/chapter.sgml
SRCS+= boot/chapter.sgml
SRCS+= config/chapter.sgml
SRCS+= cutting-edge/chapter.sgml
SRCS+= desktop/chapter.sgml
SRCS+= disks/chapter.sgml
SRCS+= eresources/chapter.sgml
SRCS+= firewalls/chapter.sgml
SRCS+= geom/chapter.sgml
SRCS+= install/chapter.sgml
SRCS+= introduction/chapter.sgml
-#SRCS+= jails/chapter.sgml
+SRCS+= jails/chapter.sgml
SRCS+= kernelconfig/chapter.sgml
SRCS+= l10n/chapter.sgml
SRCS+= linuxemu/chapter.sgml
SRCS+= mac/chapter.sgml
SRCS+= mail/chapter.sgml
SRCS+= mirrors/chapter.sgml
SRCS+= multimedia/chapter.sgml
SRCS+= network-servers/chapter.sgml
SRCS+= pgpkeys/chapter.sgml
SRCS+= ports/chapter.sgml
SRCS+= ppp-and-slip/chapter.sgml
SRCS+= preface/preface.sgml
SRCS+= printing/chapter.sgml
SRCS+= security/chapter.sgml
SRCS+= serialcomms/chapter.sgml
SRCS+= users/chapter.sgml
SRCS+= vinum/chapter.sgml
SRCS+= virtualization/chapter.sgml
SRCS+= x11/chapter.sgml
# Entities
SRCS+= chapters.ent
SYMLINKS= ${DESTDIR} index.html handbook.html
# Turn on all the chapters.
CHAPTERS?= ${SRCS:M*chapter.sgml}
SGMLFLAGS+= ${CHAPTERS:S/\/chapter.sgml//:S/^/-i chap./}
SGMLFLAGS+= -i chap.freebsd-glossary
pgpkeyring: pgpkeys/chapter.sgml
@${JADE} -V nochunks ${OTHERFLAGS} ${JADEOPTS} -d ${DSLPGP} -t sgml ${MASTERDOC}
#
# Handbook-specific variables
#
.if defined(WITH_PGPKEYS)
JADEFLAGS+= -V withpgpkeys
.endif
URL_RELPREFIX?= ../../../..
DOC_PREFIX?= ${.CURDIR}/../../..
#
# rules generating lists of mirror site from XML database.
#
XMLDOCS= mirrors-ftp:::mirrors.sgml.ftp.inc.tmp \
mirrors-cvsup:::mirrors.sgml.cvsup.inc.tmp \
eresources:::eresources.sgml.www.inc.tmp
DEPENDSET.DEFAULT= transtable mirror
XSLT.DEFAULT= ${XSL_MIRRORS}
XML.DEFAULT= ${XML_MIRRORS}
NO_TIDY.DEFAULT= yes
PARAMS.mirrors-ftp+= --param 'type' "'ftp'" \
--param 'proto' "'ftp'" \
--param 'target' "'handbook/mirrors/chapter.sgml'"
PARAMS.mirrors-cvsup+= --param 'type' "'cvsup'" \
--param 'proto' "'cvsup'" \
--param 'target' "'handbook/mirrors/chapter.sgml'"
PARAMS.eresources+= --param 'type' "'www'" \
--param 'proto' "'http'" \
--param 'target' "'handbook/eresources/chapter.sgml'"
SRCS+= mirrors.sgml.ftp.inc \
mirrors.sgml.cvsup.inc \
eresources.sgml.www.inc
CLEANFILES+= mirrors.sgml.ftp.inc mirrors.sgml.ftp.inc.tmp \
mirrors.sgml.cvsup.inc mirrors.sgml.cvsup.inc.tmp \
eresources.sgml.www.inc eresources.sgml.www.inc.tmp
.include "${DOC_PREFIX}/share/mk/doc.project.mk"
.for p in ftp cvsup
mirrors.sgml.${p}.inc: mirrors.sgml.${p}.inc.tmp
${SED} -e 's,<\([^ >]*\)\([^>]*\)/>,<\1\2>\1>,;s,,,'\
< $@.tmp > $@ || (${RM} -f $@ && false)
.endfor
eresources.sgml.www.inc: eresources.sgml.www.inc.tmp
${SED} -e 's,<\([^ >]*\)\([^>]*\)/>,<\1\2>\1>,;s,,,'\
< $@.tmp > $@ || (${RM} -f $@ && false)
diff --git a/zh_TW.Big5/books/handbook/book.sgml b/zh_TW.Big5/books/handbook/book.sgml
index 76265f3c0d..bd4a0d45ae 100644
--- a/zh_TW.Big5/books/handbook/book.sgml
+++ b/zh_TW.Big5/books/handbook/book.sgml
@@ -1,321 +1,324 @@
%books.ent;
%chapters;
%txtfiles;
+
%pgpkeys;
]>
FreeBSD 使用手冊
FreeBSD 文件計畫
February 1999
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
+ 2008
FreeBSD 文件計畫
&bookinfo.legalnotice;
&tm-attrib.freebsd;
&tm-attrib.3com;
&tm-attrib.3ware;
&tm-attrib.arm;
&tm-attrib.adaptec;
&tm-attrib.adobe;
&tm-attrib.apple;
&tm-attrib.corel;
&tm-attrib.creative;
&tm-attrib.cvsup;
&tm-attrib.heidelberger;
&tm-attrib.ibm;
&tm-attrib.ieee;
&tm-attrib.intel;
&tm-attrib.intuit;
&tm-attrib.linux;
&tm-attrib.lsilogic;
&tm-attrib.m-systems;
&tm-attrib.macromedia;
&tm-attrib.microsoft;
&tm-attrib.netscape;
&tm-attrib.nexthop;
&tm-attrib.opengroup;
&tm-attrib.oracle;
&tm-attrib.powerquest;
&tm-attrib.realnetworks;
&tm-attrib.redhat;
&tm-attrib.sap;
&tm-attrib.sun;
&tm-attrib.symantec;
&tm-attrib.themathworks;
&tm-attrib.thomson;
&tm-attrib.usrobotics;
&tm-attrib.vmware;
&tm-attrib.waterloomaple;
&tm-attrib.wolframresearch;
&tm-attrib.xfree86;
&tm-attrib.xiph;
&tm-attrib.general;
歡迎使用FreeBSD! 本使用手冊涵蓋範圍包括了
FreeBSD &rel2.current;-RELEASE 和
FreeBSD &rel.current;-RELEASE 的安裝和日常使用。
這份使用手冊是很多人的集體創作,而且仍然『持續不斷』的進行中。
許多章節仍未完成,已完成的部份也有些需要更新。
如果您有興趣協助本計畫的話,請寄 e-mail 到 &a.doc;。
在 FreeBSD 網站
可以找到這份文件的最新版本(舊版文件可從 取得),也可以從 FreeBSD FTP 伺服器
或是眾多 mirror 站臺
下載不同格式的資料。
如果比較偏好實體書面資料,那可以在
FreeBSD Mall 購買。
此外,也可以在 使用手冊
中搜尋資料。
&chap.preface;
開始使用 FreeBSD
這部份是提供給初次使用 FreeBSD 的使用者和系統管理者。
這些章節包括:
介紹 FreeBSD 給您。
在安裝過程給您指引。
教您 &unix; 的基礎及原理。
展示給您看如何安裝豐富的 FreeBSD 的應用軟體
向您介紹 X, &unix; 的視窗系統以及詳細的桌面環境設定,讓您更有生產力。
我們試著儘可能的讓這段文字的參考連結數目降到最低,讓您在讀使用手冊的這部份時可以不太需要常常前後翻頁。
一般性工作
既然基礎的部分已經提過了,接下來的這個部分將會討論一些常會用到的 FreeBSD
的特色,這些章節包括:
介紹給您常見且實用的桌面應用軟體:網頁瀏覽器、生產力工具、文件檢視程式等。
介紹給您眾多 FreeBSD 上可用的多媒體工具。
解釋如何編譯自訂 FreeBSD 核心以增加額外系統功能的流程。
詳細描述列印系統,包含桌上型印表機及網路印表機的設定。
展示給您看如何在您的 FreeBSD 系統中執行 Linux 應用軟體。
這些章節中有些需要您預先閱讀些相關文件,在各章節開頭的概要內會提及。
系統管理
FreeBSD 使用手冊剩下的這些章節涵蓋了全方位的 FreeBSD 系統管理。
每個章節的開頭會先描述在該您讀完該章節後您會學到什麼,也會詳述在您在看這些資料時應該要有的一些背景知識。
這些章節是讓您在需要查資料的時候翻閱用的。
您不需要依照特定的順序來讀,也不需要將這些章節全部過讀之後才開始用 FreeBSD。
+
網路通訊
FreeBSD 是一種廣泛的被使用在高效能的網路伺服器中的作業系統,這些章節包含了:
序列埠通訊
PPP 和 PPPoE
電子郵件
執行網路伺服程式
防火牆
其他的進階網路主題
這些章節是讓您在需要查資料的時候翻閱用的。
您不需要依照特定的順序來讀,也不需要將這些章節全部讀過之後才將 FreeBSD 用在網路環境下。
附錄
&chap.colophon;
diff --git a/zh_TW.Big5/books/handbook/chapters.ent b/zh_TW.Big5/books/handbook/chapters.ent
index de6b7e4f36..942b608bbe 100644
--- a/zh_TW.Big5/books/handbook/chapters.ent
+++ b/zh_TW.Big5/books/handbook/chapters.ent
@@ -1,62 +1,62 @@
-
+
diff --git a/zh_TW.Big5/books/handbook/jails/chapter.sgml b/zh_TW.Big5/books/handbook/jails/chapter.sgml
new file mode 100644
index 0000000000..2f4a453676
--- /dev/null
+++ b/zh_TW.Big5/books/handbook/jails/chapter.sgml
@@ -0,0 +1,815 @@
+
+
+
+
+
+ Matteo
+ Riondato
+ Contributed by
+
+
+
+
+ Jails
+
+ jails
+
+
+ 概述
+
+ 本章將介紹 &os; jail 為何,以及如何運用之法。
+ Jails 有時也常被認為是 chroot 環境
+ 的加強型替代品之一,它對系統管理者而言是非常好用的工具,
+ 此外,它的一些基本用法對進階使用者而言,也是相當有用。
+
+ 讀完這章,您將了解︰
+
+
+
+ jail 是什麼,以及它在 &os; 上可以發揮的作用。
+
+
+
+ 如何編譯、啟動、停止 jail。
+
+
+
+ jail 管理的基本概念:包括從 jail 內部或主機本身。
+
+
+
+ 其他有用的 jail 相關資源還有:
+
+
+
+ &man.jail.8; 線上說明。 這是有關 jail
+ 的完整說明 — &os; 內的啟動、停止、控制 &os; jail
+ 相關管理工具。
+
+
+
+ 郵遞論壇(mailing lists)及舊信檔案館(archives)。
+ &a.mailman.lists; 所提供的 &a.questions; 及其他郵遞論壇的舊信
+ ,已有包括一堆 jail 的有用資料。 通常,搜尋舊信或者在
+ &a.questions.name; 上發問,也相當有效。
+
+
+
+
+
+
+ Jail 相關術語
+
+ 為協助更容易理解 &os; 系統的 jail 相關部分,
+ 以及它們與 &os; 其他部分的相互作用關係,
+ 以下列出本章將使用的術語:
+
+
+
+ &man.chroot.2; (指令)
+
+ &os; 的 system call 之一,其作用為改變 process
+ 及其衍生 process 所能運用的根目錄 (/
+ dir)。
+
+
+
+
+ &man.chroot.2; (環境)
+
+ 指在 chroot
中運行的 process 環境。
+ 這包括了類似檔案系統的可見部分、可用的 UID、GID、網路卡及其他 IPC
+ 機制等資源。
+
+
+
+
+ &man.jail.8; (command)
+
+ 允許程式在 jail 環境下執行的系統管理工具。
+
+
+
+
+ host (系統、process、帳號等等)
+
+ jail 環境的控制系統。 host 系統可以使用全部可用的硬體資源,
+ 並能控制 jail 環境內外的 process。 host 系統與 jail 最大的差別在於
+ :在 host 系統中的 superuser processes 並不像在 jail
+ 環境那樣處處受到一堆限制。
+
+
+
+
+ hosted (系統、process、帳號等等)
+
+ 可用資源受到 &os; jail 限制的 process、帳號、或其他設備資源
+ 。
+
+
+
+
+
+
+ 背景故事
+
+ 由於系統管理是困難又繁瑣的工作,因此人們開發許多好用工具,
+ 以讓管理工作更加簡單輕鬆。 這些改善通常是讓系統能夠以更簡單的方式安裝、
+ 設定、維護,而有些改善目標則是系統安全的正確設定,使其能真正發揮原本用途,
+ 而非陷入安全風險之中。
+
+ &os; 系統所提供的一種用於強化安全的工具就是 jail
+ 。 Jail 是由 &a.phk; 於 &os; 4.X 開始導入,而在 &os; 5.X
+ 受到許多重大改良而集大成,成為強大而靈活的子系統,目前仍在持續開發、
+ 以提高其可用性、效能與安全。
+
+
+ 何為 Jail
+
+ BSD-like 作業系統自 4.2BSD 起即提供 &man.chroot.2;。
+ &man.chroot.8; 可用來變更一組 process 的根目錄位置,
+ 藉此建立與實體系統中相隔離的安全環境。 處於 chrooted 環境的
+ process 會無法不能存取世外的檔案或資源。 由於此因素,
+ 故即使攻擊者攻破某個處於 chroot 環境的 service,也不能攻破整個系統。
+ &man.chroot.8; 對於那些不太需要彈性或複雜又高級的簡單應用而言相當好用。
+ 另外,在引入 chroot 概念的過程中,曾經發現許多可脫逃 chroot 環境的方式,
+ 儘管這些問題在較新版本的 &os; kernel 均已修正,但很明顯地 &man.chroot.2;
+ 絕非用於強化安全的理想解決方案。 因此,
+ 勢必得實作新的子系統來解決這些問題。
+
+ 這就是為何要開發 jail 的最主要原因。
+
+ Jail 在各種方式分進合擊,改進傳統 &man.chroot.2; 環境的概念。
+ 在傳統的 &man.chroot.2; 環境中,只限制 process 對於檔案系統的存取部分,
+ 而系統資源的其他部分(例如系統帳號、執行中的 process、網路子系統)則是由
+ chroot process 與 host 系統的其他 process 一起共享。
+ Jail 以『虛擬化』來擴展這模型,不單只有檔案系統的存取,還延伸到
+ 系統帳號、&os; kernel 的網路子系統及其他系統資源的虛擬化。
+ 關於這些 jail 環境存取的細微調控,請參閱 。
+
+ jail 具有下列四項特色:
+
+
+
+ 目錄子樹(directory subtree) — 也就是進入 jail 的起點。
+ 一旦進入 jail 之後,process 就不再被允許跳到 subtree 以外。
+ &傳統會影響到 man.chroot.2; 最初設計的安全問題,就不會再影響
+ &os; jail。
+
+
+
+ 主機名稱(hostname) — 用於 jail 的 hostname。 由於
+ jail 主要用於網路服務,因此若各 jail 皆有名稱,
+ 對於系統管理工作的簡化會相當有效。
+
+
+
+ IP address — 是用來給 jail 使用,
+ 並且在 jail 生命週期內都無法變更。 通常 jail 的 IP address
+ 是現有網卡的 alias address,但這並不是必須的。
+
+
+
+ 指令(Command) — 準備在 jail 內執行的完整路徑。 這指令是相對於
+ jail 環境的根目錄,視 jail 環境的類型不同,而有所差異。
+
+
+
+ 除了上述之外,jail 也可擁有自己的帳號及 root
+ 帳號。 當然,這裡的root 權力會受制於 jail 環境內。
+ 並且從 host 系統的角度來看,jail 的 root
+ 並非無所不能的帳號。 此外 jail 的 root
+ 並不能執行其對於 &man.jail.8; 環境以外的一些關鍵性操作。
+ 關於 root 的能力與限制,將於稍後的
+ 介紹之。
+
+
+
+
+ 建立和控制 Jail
+
+ 有些系統管理者把 jail 分為下列兩種:complete(完全)
+ jail — 通常包括完整的 &os; 系統;另一種則為
+ service(服務)
jail —
+ 專門只跑某單一可能要用特殊權限的程式或 service。 這只是一種概念上的區分
+ ,並不影響如何建立 jail 的過程。 至於如何建立 jail 在 &man.jail.8;
+ 內有更詳細的說明:
+
+ &prompt.root; setenv D /here/is/the/jail
+&prompt.root; mkdir -p $D
+&prompt.root; cd /usr/src
+&prompt.root; make world DESTDIR=$D
+&prompt.root; cd etc/ &os; 6.0(含)
+之後就不需這步驟。
+&prompt.root; make distribution DESTDIR=$D
+&prompt.root; mount -t devfs $D/dev
+
+
+
+ 首先就是先為 jail 找個家。 該路徑是在 host 系統中的 jail
+ 實體位置。 習慣是放在 /usr/jail/jailname,
+ jailname 請替換為該 jail 的 hostname
+ 以便辨別。 通常 /usr
+ 會有足夠空間來存放 jail 檔案系統,對於 complete
jail
+ 而言,它通常包括了 &os; 預設安裝 base system 所有檔案的拷貝檔。
+
+
+
+ 該指令將會在 jail 目錄中安裝所需的 binary、library、manual 說明等
+ 。 這些是以傳統的 &os; 方式完成 — 即首先先編譯所有檔案,
+ 接著再裝到目的地。
+
+
+
+ 使用 distribution 這個
+ make target 來裝所有會用到的設定檔。
+ 簡單來說該動作就是把 /usr/src/etc/ 複製到 jail 環境內的
+ /etc,也就是
+ $D/etc/。
+
+
+
+ 對於 jail 環境而言,&man.devfs.8; 檔案系統的掛載並非必須,
+ 但另一方面,幾乎所有應用程式都會需要存取至少一個設備(device),
+ 這主要取決於該程式目的而定。 控制 jail 所能存取的設備非常重要,
+ 因為不正確的設定,會讓攻擊者對 jail 有機可趁。 至於如何透過
+ &man.devfs.8; 來控制的規則,可以參閱 &man.devfs.8; 及
+ &man.devfs.conf.5; 說明。
+
+
+
+ 裝好 jail 之後,就可以用 &man.jail.8; 工具。 &man.jail.8;
+ 需要四項必填參數,這些參數在 有介紹過。
+ 除了這四個參數之外,還可以指定其他參數,像是以特定帳號在 jail 中執行
+ process。
+ 參數取決於 jail 類型而定;對於 virtual system(虛擬系統)
+ ,那麼就選擇 /etc/rc,
+ 因為它會完成真正 &os; 系統啟動所需的操作。 對於 service(服務)
+ jail 而言,執行的指令取決於將在 jail 內執行的 service
+ 或應用程式而定。
+
+ Jail 通常要在系統開機時啟動,因此 &os; 的 rc
+ 機制提供一些便利的方式來簡化這些工作:
+
+
+
+ 開機時要啟動的 jail 清單要加到 &man.rc.conf.5; 設定檔:
+
+ jail_enable="YES" # 若設為 NO 則表示不自動啟動 jail
+jail_list="www" # 若有許多 jail 則請以空白隔開來寫
+
+
+
+ 對於每一筆在 jail_list 所列出的 jail,
+ 也要在 &man.rc.conf.5; 做出相對應的設定:
+
+ jail_www_rootdir="/usr/jail/www" # jail 的根目錄
+jail_www_hostname="www.example.org" # jail 的 hostname
+jail_www_ip="192.168.0.10" # jail 的 IP address
+jail_www_devfs_enable="YES" # 在 jail 內 mount devfs
+jail_www_devfs_ruleset="www_ruleset" # jail 內所用的 devfs 規則表
+
+ 在 &man.rc.conf.5; 所預設的 jail 啟動設定會跑
+ /etc/rc 內的 jail script,也就是說會假設 jail
+ 是完整的虛擬系統。 若要用 service jail 類型,則要另外指定啟動指令,
+ 方法是設定對應的
+ jail_jailname_exec_start
+ 設定。
+
+
+ 若欲知道所有可用的選項清單,請參閱 &man.rc.conf.5; 說明。
+
+
+
+ 也可以透過手動執行 /etc/rc.d/jail script
+ 來啟動或停止 rc.conf 所設定的 jail:
+
+ &prompt.root; /etc/rc.d/jail start www
+&prompt.root; /etc/rc.d/jail stop www
+
+ 目前尚無任何方法來很乾淨地關閉 &man.jail.8;。
+ 此乃因為正常用來關閉系統的指令,目前尚不能在 jail 中使用。 目前關閉 jail
+ 最佳的方式,是在 jail 內執行下列指令,或者 jail 外面透過 &man.jexec.8;
+ 執行下列指令:
+
+ &prompt.root; sh /etc/rc.shutdown
+
+ 詳情請參閱 &man.jail.8; 說明。
+
+
+
+ 微調與管理
+
+ 可以為 jail 設定許多不同選項,並讓 &os; 的 host 系統與 jail
+ 以各種不同方式組合搭配,以符合更多的應用用途。 本節要介紹的是:
+
+
+
+ 用以微調 jail 行為與安全限制的選項。
+
+
+
+ 可透過 &os; Ports Collection 安裝的高階 jail 管理程式,
+ 搭配這些程式可以達到一些 jail-based 解決方案。
+
+
+
+ &os; 所提供的 jail tuning 工具
+
+ 對於 jail 設定的微調,基本上都是透過設定 &man.sysctl.8; 變數來完成。
+ 系統提供一組 sysctl 的特殊子樹,全部相關的選項都在該子樹內,也就是
+ &os; kernel 中的 security.jail.* 子樹。
+ 下面則是與 jail 相關的主要 sysctl 設定及預設值,這些名稱都相當容易理解,
+ 如欲更進一步的資訊,請參閱 &man.jail.8; 與 &man.sysctl.8; 說明:
+
+
+
+ security.jail.set_hostname_allowed:
+ 1
+
+
+
+ security.jail.socket_unixiproute_only:
+ 1
+
+
+
+ security.jail.sysvipc_allowed:
+ 0
+
+
+
+ security.jail.enforce_statfs:
+ 2
+
+
+
+ security.jail.allow_raw_sockets:
+ 0
+
+
+
+ security.jail.chflags_allowed:
+ 0
+
+
+
+ security.jail.jailed: 0
+
+
+
+ 系統管理者可在 host system
+ 透過修改這些設定值來增加、取消 Jail 內 root
+ 帳號的預設限制。 請注意:有些限制是不能取消,在 &man.jail.8; 環境的
+ root 不能掛載或卸載檔案系統。 此外亦不能載入、
+ 卸載 &man.devfs.8; 規則、設定防火牆規則,或執行其他需修改 kernel
+ 資料的管理作業,例如設定 kernel 的 securelevel
+ 值。
+
+ &os; base system 內附一些基本工具,可用來查閱目前使用中的 jail、
+ 並接上(attach) jail 以執行管理指令。 &man.jls.8; 及 &man.jexec.8;
+ 均屬於 &os; base system 之一,可用來執行一些簡單工作:
+
+
+
+ 列出有在使用的 jail 及其相對應的 jail identifier
+ (JID)、IP address、
+ hostname、路徑。
+
+
+
+ 接上(Attach)正在運作中的 jail,並在其中執行指令以進行管理工作。
+ 這點在當 root 想乾淨關閉 jail 時相當有用,
+ &man.jexec.8; 也可用在 jail 中啟動 shell 以便對其進行管理,
+ 比如:
+
+ &prompt.root; jexec 1 tcsh
+
+
+
+
+
+ &os; Ports Collection 所提供的高階管理工具
+
+ 在諸多 third-party 所提供的 jail 管理工具當中,sysutils/jailutils 是最完整也最好用的。
+ 該套件是由一系列 &man.jail.8; 管理小工具所組成的。 詳情請參閱其網站介紹
+ 。
+
+
+
+
+ Jail 的應用
+
+
+
+
+
+ Daniel
+ Gerzo
+ Contributed by
+
+
+
+
+
+ Service Jails
+
+ 本節主要以 &a.simon; 寫的 為主,加上
+ Ken Tom locals@gmail.com 所更新的文章。
+ 本節介紹如何設定 &os; 以 &man.jail.8; 功能來增加額外的安全層面。
+ 這部分假設您系統跑的是 RELENG_6_0 或更新的版本,
+ 並且對本章先前部分均能理解。
+
+
+ Design
+
+ Jail 的主要問題之一在於如何對其進行更新、升級和管理。
+ 由於每個 jail 都是從頭重新編譯,對於單一 jail 而言,
+ 升級也許還不是很嚴重的問題,因為更新、升級並不會太麻煩。
+ 但對於一堆 jail 而言,升級不僅會耗費太多時間,並相當枯燥乏味。
+
+
+ 這些設定的前提是您對 &os; 使用、功能運用上有相當的經驗,
+ 若下面的設定對您來說太過複雜,建議您該考慮用較簡易的系統,像是
+ sysutils/ezjail,其提供更簡單的
+ &os; jail 管理方式。
+
+
+ 基本的想法是在不同的 jail 中儘量以安全的方式來共用資源
+ — 採用唯讀的 &man.mount.nullfs.8; 掛載,來讓升級更簡單,
+ 並把各個 service 放到不同的 jail 的作法會更加可行。 此外,
+ 其也提供對於如何增加、刪除、升級 jail 的簡便方式。
+
+
+ service 常見的例子包括:
+ HTTP server、DNS
+ server、SMTP server 等等。
+
+
+ 本節介紹的設定目的在於:
+
+
+
+ 建立簡易且容易理解的 jail 架構。 也就是說
+ 不必為每個 jail 都執行完整的 installworld
+ 。
+
+
+ 讓 jail 的新增、移除更簡單。
+
+
+ 讓 jail 的更新、升級更輕鬆。
+
+
+ 可以跑自行打造的 &os; 分支。
+
+
+ 對安全有更偏執狂的追求,儘可能降低被攻陷的可能。
+
+
+ 儘量節省空間與 inode。
+
+
+
+ 如同先前所提到的,這設計主要是靠把唯讀的主要模版
+ (也就是大家所熟知的 nullfs)掛載到每個
+ jail,並且讓每個 jail 有個可讀、寫的設備,這設備可以是獨立實體硬碟、
+ 、分割區、或以 vnode 為後端的 &man.md.4; 設備。 在本例當中,
+ 我們採用可讀寫的 nullfs 掛載。
+
+ 下面的表則介紹檔案系統的配置:
+
+
+
+ 每個 jail 都會掛載到 /home/j 底下的其中一個目錄。
+
+
+ /home/j/mroot 則是每個
+ jail 共用的模版,並對於所有 jail 而言都是唯讀。
+
+
+ 每個 jail 在 /home/j
+ 底下都有一個相對應的空目錄。
+
+
+ 每個 jail 都會有 /s 目錄,
+ 該目錄會連到系統的可讀寫部分。
+
+
+ 每個 jail 都會在 /home/j/skel 目錄建立自屬的可讀寫空間
+ 。
+
+
+ 每個 jailspace (各 jail 可讀寫的部分) 都建在 /home/js>。
+
+
+
+
+ 這邊假設所有 jail 都放在
+ /home 分割區。 當然,
+ 也可以依自身需求更改,但接下來的例子中,
+ 也要記得修改相對應的地方。
+
+
+
+
+
+ 建立模版
+
+ 本節將逐步介紹如何建立 jail 要用的唯讀主模版。
+
+ 建議先把 &os; 系統升級到最新的 -RELEASE 分支,至於如何做請參閱
+ Handbook 的
+ 相關章節。
+ 當更新完成之後,就要進行 buildworld 程序,此外還要裝 sysutils/cpdup 套件。
+ 我們將用 &man.portsnap.8; 來下載 &os; Ports Collection,
+ 在 Handbook 中對 Portsnap 章節
+ 中有相關介紹,初學者可以看看。
+
+
+
+ 首先,先建立唯讀的目錄結構給 jail 放 &os; binary,
+ 接著到 &os; source tree 目錄,並安裝 jail 模版:
+
+ &prompt.root; mkdir -p /home/j/mroot
+&prompt.root; cd /usr/src
+&prompt.root; make installworld DESTDIR=/home/j/mroot
+
+
+ 接著跟 &os; source tree 一樣,也把 &os; Ports Collection
+ 放一份供 jail 使用,以備 mergemaster
+ :
+
+ &prompt.root; cd /home/j/mroot
+&prompt.root; mkdir usr/ports
+&prompt.root; portsnap -p /home/j/mroot/usr/ports fetch extract
+&prompt.root; cpdup /usr/src /home/j/mroot/usr/src
+
+
+ 建立可讀寫部分的骨架:
+
+ &prompt.root; mkdir /home/j/skel /home/j/skel/home /home/j/skel/usr-X11R6 /home/j/skel/distfiles
+&prompt.root; mv etc /home/j/skel
+&prompt.root; mv usr/local /home/j/skel/usr-local
+&prompt.root; mv tmp /home/j/skel
+&prompt.root; mv var /home/j/skel
+&prompt.root; mv root /home/j/skel
+
+
+ 用 mergemaster 來裝漏掉的設定檔。
+ 接下來刪除 mergemaster
+ 所建立的多餘目錄:
+
+ &prompt.root; mergemaster -t /home/j/skel/var/tmp/temproot -D /home/j/skel -i
+&prompt.root; cd /home/j/skel
+&prompt.root; rm -R bin boot lib libexec mnt proc rescue sbin sys usr dev
+
+
+ 現在把可讀寫的檔案系統以 symlink 方式連到唯讀的檔案系統。
+ 請確認 symbolic link 是否有正確連到 s/ 目錄,若目錄建立方式不對,
+ 或指向位置不對,可能會導致安裝失敗。
+
+ &prompt.root; cd /home/j/mroot
+&prompt.root; mkdir s
+&prompt.root; ln -s s/etc etc
+&prompt.root; ln -s s/home home
+&prompt.root; ln -s s/root root
+&prompt.root; ln -s ../s/usr-local usr/local
+&prompt.root; ln -s ../s/usr-X11R6 usr/X11R6
+&prompt.root; ln -s ../../s/distfiles usr/ports/distfiles
+&prompt.root; ln -s s/tmp tmp
+&prompt.root; ln -s s/var var
+
+
+ 最後則是新增 /home/j/skel/etc/make.conf
+ ,並填入以下內容:
+
+ WRKDIRPREFIX?= /s/portbuild
+
+
+ 要設定 WRKDIRPREFIX 才可以讓各 jail
+ 得以順利編譯 &os; ports。請記住 ports 目錄是屬唯讀檔案系統。
+ 而搭配自訂的 WRKDIRPREFIX 才可以讓各 jail
+ 在可讀寫空間進行編譯。
+
+
+
+
+
+ 建立 Jail
+
+ 現在已經有完整的 &os; jail 模版,可以在
+ /etc/rc.conf 內做相關設定。
+ 下面這例子則示範如何建立 3 個 jail:NS
、
+ MAIL
、WWW
。
+
+
+
+ 在 /etc/fstab 加上下列設定,
+ 以便讓系統自動掛載各 jail 所需的唯讀模版與讀寫空間:
+
+ /home/j/mroot /home/j/ns nullfs ro 0 0
+/home/j/mroot /home/j/mail nullfs ro 0 0
+/home/j/mroot /home/j/www nullfs ro 0 0
+/home/js/ns /home/j/ns/s nullfs rw 0 0
+/home/js/mail /home/j/mail/s nullfs rw 0 0
+/home/js/www /home/j/www/s nullfs rw 0 0
+
+
+ 分割區的 pass number 標示為 0 就不會在開機時做 &man.fsck.8;
+ 檢查;而分割區的 dump number 標示為 0 則不會被 &man.dump.8;
+ 所備份。
+ 我們並不希望
+ fsck 檢查
+ nullfs 的掛載,或者讓
+ dump 備份 jail 內唯讀的 nullfs 掛載。
+ 這也就是為何上述 fstab
+ 每行設定後面都有兩欄為 0 0
。
+
+
+
+ 在 /etc/rc.conf 內設定 jail:
+
+ jail_enable="YES"
+jail_set_hostname_allow="NO"
+jail_list="ns mail www"
+jail_ns_hostname="ns.example.org"
+jail_ns_ip="192.168.3.17"
+jail_ns_rootdir="/usr/home/j/ns"
+jail_ns_devfs_enable="YES"
+jail_mail_hostname="mail.example.org"
+jail_mail_ip="192.168.3.18"
+jail_mail_rootdir="/usr/home/j/mail"
+jail_mail_devfs_enable="YES"
+jail_www_hostname="www.example.org"
+jail_www_ip="62.123.43.14"
+jail_www_rootdir="/usr/home/j/www"
+jail_www_devfs_enable="YES"
+
+
+ 之所以要把
+ jail_name_rootdir
+ 從 /home 改為 /usr/home 的原因在於 &os;
+ 預設安裝的 /home 目錄其實只是指向 /usr/home 的 symbolic link。 而
+ jail_name_rootdir
+ 變數須為 實體目錄 而非 symbolic link,
+ 否則 jail 會拒絕啟動。 可以用 &man.realpath.1;
+ 來決定該變數。 詳情請參閱 &os;-SA-07:01.jail 安全通告。
+
+
+
+ 替每個 jail 建立必須的唯讀檔案系統掛載點:
+
+ &prompt.root; mkdir /home/j/ns /home/j/mail /home/j/www
+
+
+ 為每個 jail 安裝可讀寫的模版。 請注意這時要用 sysutils/cpdup
+ ,它能確保每個目錄都有正確複製。
+
+
+ &prompt.root; mkdir /home/js
+&prompt.root; cpdup /home/j/skel /home/js/ns
+&prompt.root; cpdup /home/j/skel /home/js/mail
+&prompt.root; cpdup /home/j/skel /home/js/www
+
+
+ 如此一來就已完成 jail 環境建立,可以準備好要用了。
+ 請先為各 jail 掛載所須的檔案系統,再用
+ /etc/rc.d/jail script 來啟動:
+
+ &prompt.root; mount -a
+&prompt.root; /etc/rc.d/jail start
+
+
+
+ 現在 jail 應該就會啟動了。 若要檢查是否有正常啟動,可以用
+ &man.jls.8; 指令來看,該指令的執行結果應該類似下面:
+
+ &prompt.root; jls
+ JID IP Address Hostname Path
+ 3 192.168.3.17 ns.example.org /home/j/ns
+ 2 192.168.3.18 mail.example.org /home/j/mail
+ 1 62.123.43.14 www.example.org /home/j/www
+
+ 此時就可以登入各 jail 並新增帳號與設定相關 service 要用的 daemon
+ 。 上面的 JID 欄代表正在運作中的 jail 編號。
+ 可用下列指令以在 JID 編號 3 的 jail
+ 執行管理工作:
+
+ &prompt.root; jexec 3 tcsh
+
+
+
+ 升級
+
+ 有時由於安全問題或者 jail 內要用新功能,而需要把 &os;
+ 系統升級到更新。 這種安裝設計方式讓既有的 jail 升級變得更加容易。
+ jail 也可以把 service 停機時間(downtime)降到最低,因為 jail
+ 只需在最後關鍵才需要重開。 此外,萬一新版有問題的話,
+ 它也提供輕鬆回溯到舊版的功能。
+
+
+
+ 首先是照一般方式來升級 host system,再新增臨時的唯讀模版
+ /home/j/mroot2:
+
+ &prompt.root; mkdir /home/j/mroot2
+&prompt.root; cd /usr/src
+&prompt.root; make installworld DESTDIR=/home/j/mroot2
+&prompt.root; cd /home/j/mroot2
+&prompt.root; cpdup /usr/src usr/src
+&prompt.root; mkdir s
+
+ 同樣地,在執行 installworld
+ 時會建立一些用不著的目錄,請把這些砍掉:
+
+ &prompt.root; chflags -R 0 var
+&prompt.root; rm -R etc var root usr/local tmp
+
+
+ 重新建立到主系統的可讀寫空間 symlink:
+
+ &prompt.root; ln -s s/etc etc
+&prompt.root; ln -s s/root root
+&prompt.root; ln -s s/home home
+&prompt.root; ln -s ../s/usr-local usr/local
+&prompt.root; ln -s ../s/usr-X11R6 usr/X11R6
+&prompt.root; ln -s s/tmp tmp
+&prompt.root; ln -s s/var var
+
+
+ 現在可以關閉 jail:
+
+ &prompt.root; /etc/rc.d/jail stop
+
+
+ 卸載原先的檔案系統:
+
+
+ &prompt.root; umount /home/j/ns/s
+&prompt.root; umount /home/j/ns
+&prompt.root; umount /home/j/mail/s
+&prompt.root; umount /home/j/mail
+&prompt.root; umount /home/j/www/s
+&prompt.root; umount /home/j/www
+
+
+ 可讀寫空間(/s
+ 是掛載在唯讀檔案系統底下,故要先卸載。
+
+
+
+ 把舊的唯讀系統搬走,換成新的。 如此一來,
+ 可同時保留先前系統的備份,以備萬一升級後有問題可回復。
+ 這邊的命名方式採新唯讀檔案系統的建立時間,此外原先 &os;
+ Ports Collection 直接搬到新的檔案系統,以節省硬碟空間與 inode
+ :
+
+ &prompt.root; cd /home/j
+&prompt.root; mv mroot mroot.20060601
+&prompt.root; mv mroot2 mroot
+&prompt.root; mv mroot.20060601/usr/ports mroot/usr
+
+
+ 現在新的唯讀模版準備好了,只剩下重新掛載以及啟動 jail:
+
+ &prompt.root; mount -a
+&prompt.root; /etc/rc.d/jail start
+
+
+
+ 最後以 &man.jls.8; 來檢查 jail 是否均正常啟動。
+ 別忘了要在各 jail 內執行 mergemaster,還有相關設定檔以及
+ rc.d scripts 均要更新。
+
+
+
+