aboutsummaryrefslogtreecommitdiff
path: root/zh_CN.GB2312/books/handbook/disks
diff options
context:
space:
mode:
authorXin LI <delphij@FreeBSD.org>2006-03-15 19:38:56 +0000
committerXin LI <delphij@FreeBSD.org>2006-03-15 19:38:56 +0000
commitb99e83b0a7c48690c2e6b7699bbd549e9a2c8da1 (patch)
tree61578f2c24f19d8d92ac0907829272ba8ae92e3e /zh_CN.GB2312/books/handbook/disks
parentf266a6a31f7f22bbb73de28eccf694ca3317afaa (diff)
Notes
Diffstat (limited to 'zh_CN.GB2312/books/handbook/disks')
-rw-r--r--zh_CN.GB2312/books/handbook/disks/chapter.sgml575
1 files changed, 494 insertions, 81 deletions
diff --git a/zh_CN.GB2312/books/handbook/disks/chapter.sgml b/zh_CN.GB2312/books/handbook/disks/chapter.sgml
index df77722789..9602d96e03 100644
--- a/zh_CN.GB2312/books/handbook/disks/chapter.sgml
+++ b/zh_CN.GB2312/books/handbook/disks/chapter.sgml
@@ -2,7 +2,7 @@
The FreeBSD Documentation Project
The FreeBSD Simplified Chinese Project
- Original Revision: 1.241
+ Original Revision: 1.251
$FreeBSD$
-->
@@ -613,10 +613,10 @@ ar0: ATA RAID1 subdisks: ad4 ad6 status: DEGRADED</screen>
<procedure>
<step>
- <para>您首先需要将磁盘从阵列中移除以便您可以
- 安全的拆除它:</para>
+ <para>首先您应将包含故障盘的 ata 通道卸下,
+ 以便安全地将其拆除:</para>
- <screen>&prompt.root; <userinput>atacontrol detach 3</userinput></screen>
+ <screen>&prompt.root; <userinput>atacontrol detach ata3</userinput></screen>
</step>
<step>
@@ -624,23 +624,27 @@ ar0: ATA RAID1 subdisks: ad4 ad6 status: DEGRADED</screen>
</step>
<step>
- <para>把磁盘作为备用磁盘安装:</para>
+ <para>重新挂接 ata 通道:</para>
- <screen>&prompt.root; <userinput>atacontrol attach 3</userinput>
+ <screen>&prompt.root; <userinput>atacontrol attach ata3</userinput>
Master: ad6 &lt;MAXTOR 6L080J4/A93.0500&gt; ATA/ATAPI rev 5
Slave: no device present</screen>
</step>
<step>
+ <para>将新盘作为热备盘加入阵列:</para>
+
+ <screen>&prompt.root; <userinput>atacontrol addspare ar0 ad6</userinput></screen>
+ </step>
+
+ <step>
<para>重建阵列:</para>
<screen>&prompt.root; <userinput>atacontrol rebuild ar0</userinput></screen>
</step>
<step>
- <para>rebuild 命令挂起直到完成。然而,可以打开另一个终端
- (使用 <keycombo action="simul"><keycap>Alt</keycap> <keycap>F<replaceable>n</replaceable></keycap></keycombo>)
- 通过下面的命令来检查进程:</para>
+ <para>可以通过下面的命令来查看进度:</para>
<screen>&prompt.root; <userinput>dmesg | tail -10</userinput>
[output removed]
@@ -1057,16 +1061,20 @@ scsibus1:
<filename>/dev/acd0t02</filename>,第三个就是
<filename>/dev/acd0t03</filename>,等等。</para>
- <para>确保在 <filename>/dev</filename> 中存在合适的文件。
- </para>
+ <para>请务必确认在
+ <filename>/dev</filename> 中出现了对应的文件。
+ 如果您发现有某些项目缺失, 则应强制系统重新识别介质:</para>
+
+ <screen>&prompt.root; <userinput>dd if=/dev/acd0 of=/dev/null count=1</userinput></screen>
+
+ <note><para>在 &os; 4.X 中, 这些项的前缀并不包括零。
+ 如果发现 <filename>/dev</filename> 缺少所需的项,
+ 可以用 <command>MAKEDEV</command> 来生成:</para>
<screen>&prompt.root; <userinput>cd /dev</userinput>
&prompt.root; <userinput>sh MAKEDEV acd0t99</userinput></screen>
+ </note>
- <note><para>在 FreeBSD 5.0 中,&man.devfs.5; 会为您自动创建
- 并管理 <filename>/dev</filename> 中的节点,
- 所以不再需要使用
- <command>MAKEDEV</command>。</para></note>
</step>
<step>
@@ -1610,7 +1618,7 @@ cd0: Attempt to query device size failed: NOT READY, Medium not present - tray c
<author>
<firstname>Julio</firstname>
<surname>Merino</surname>
- <contrib>Original work by </contrib>
+ <contrib>原作 </contrib>
</author>
</authorgroup>
<!-- 24 Dec 2001 -->
@@ -1618,7 +1626,7 @@ cd0: Attempt to query device size failed: NOT READY, Medium not present - tray c
<author>
<firstname>Martin</firstname>
<surname>Karlsson</surname>
- <contrib>Rewritten by </contrib>
+ <contrib>重写 </contrib>
</author>
</authorgroup>
<!-- 27 Apr 2003 -->
@@ -1661,7 +1669,7 @@ cd0: Attempt to query device size failed: NOT READY, Medium not present - tray c
<para>有时这些条目必须在 <filename>/dev</filename> 目录中进行重建。
可以这样做:</para>
- <screen>&prompt.root; <userinput>cd /dev && ./MAKEDEV "fd*"</userinput></screen>
+ <screen>&prompt.root; <userinput>cd /dev &amp;&amp; ./MAKEDEV "fd*"</userinput></screen>
</sect4>
<sect4>
@@ -2018,6 +2026,86 @@ sa0(ncr1:4:0): Logical unit is in process of becoming ready</screen>
</sect2>
</sect1>
+ <sect1 id="backup-strategies">
+ <sect1info>
+ <authorgroup>
+ <author>
+ <firstname>Lowell</firstname>
+ <surname>Gilbert</surname>
+ <contrib>原作 </contrib>
+ </author>
+ </authorgroup>
+ <!-- 3 Dec 2005 -->
+ </sect1info>
+
+ <title>备份策略</title>
+
+ <para>设计备份计划的第一要务是确认以下问题皆已考虑到:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>磁盘故障</para>
+ </listitem>
+ <listitem>
+ <para>文件的意外删除</para>
+ </listitem>
+ <listitem>
+ <para>随机的文件损毁</para>
+ </listitem>
+ <listitem>
+ <para>机器完全损毁 (例如火灾), 包括破坏全部在线备份。</para>
+ </listitem>
+ </itemizedlist>
+
+ <para>针对上述的每个问题采用完全不同的技术来解决是完全可行的。
+ 除了只包含少量几乎没有价值数据的个人系统之外,
+ 一般来说很少有一种技术能够同时兼顾前面所有的需要。</para>
+
+ <para>可以采用的技术包括:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>对整个系统的数据进行存档, 备份到永久性的离线介质上。
+ 这种方法实际上能够提供针对前面所有问题的保护, 但这样做通常很慢,
+ 而且恢复时会比较麻烦。 您可以将备份置于近线或在线的状态,
+ 然而恢复文件仍然是一个难题, 特别是对没有特权的那些用户而言。</para>
+ </listitem>
+
+ <listitem>
+ <para>文件系统快照。 这种技术实际上只对无意中删除文件这一种情况有用,
+ 但在这种情况下它会提供
+ <emphasis>非常大</emphasis> 的帮助,
+ 而且访问迅速, 操作容易。</para>
+ </listitem>
+
+ <listitem>
+ <para>直接复制整个文件系统和/或磁盘 (例如周期性地对整个机器做 rsync)。
+ 通常这对于在网络上的单一需求最为适用。 要为磁盘故障提供更为通用的保护,
+ 通常这种方法要逊于 <acronym>RAID</acronym>。
+ 对于恢复无意中删除的文件来说, 这种方法基本上与
+ <acronym>UFS</acronym> 快照属于同一层次, 使用哪一个取决于您的喜好。</para>
+ </listitem>
+
+ <listitem>
+ <para><acronym>RAID</acronym>。 它能够最大限度地减少磁盘故障导致的停机时间。
+ 其代价是需要处理更为频繁的磁盘故障 (因为磁盘的数量增加了),
+ 尽管这类故障不再需要作为非常紧急的事项来处理。</para>
+ </listitem>
+
+ <listitem>
+ <para>检查文件的指纹。 &man.mtree.8; 工具对于这种操作非常有用。
+ 尽管这并不是一种备份的技术, 但它能够确保您有机会注意到那些您需要求助于离线备份的事情。
+ 这对于离线备份非常重要, 而且应有计划地加以检查。</para>
+ </listitem>
+ </itemizedlist>
+
+ <para>很容易列举更多的技术, 它们中有许多实际上是前面所列出的方法的变种。
+ 特别的需求通常会需要采用特别的技术 (例如, 备份在线运行的数据库,
+ 往往需要数据库软件提供某种方法来完成中间步骤) 来满足。
+ 最重要的事情是, 一定要了解需要将数据保护起来免受何种风险,
+ 以及发生问题时应该如何处理。</para>
+ </sect1>
+
<sect1 id="backup-basics">
<title>备份程序</title>
@@ -2135,9 +2223,9 @@ sa0(ncr1:4:0): Logical unit is in process of becoming ready</screen>
<command>rsh</command> 来传送数据给远程的磁带机。</para>
<screen>&prompt.root; <userinput>for f in <replaceable>directory_list; do</replaceable></userinput>
-<userinput>find $f >> backup.list</userinput>
+<userinput>find $f &gt;&gt; backup.list</userinput>
<userinput>done</userinput>
-&prompt.root; <userinput>cpio -v -o --format=newc < backup.list | ssh <replaceable>user</replaceable>@<replaceable>host</replaceable> "cat > <replaceable>backup_device</replaceable>"</userinput></screen>
+&prompt.root; <userinput>cpio -v -o --format=newc &lt; backup.list | ssh <replaceable>user</replaceable>@<replaceable>host</replaceable> "cat &gt; <replaceable>backup_device</replaceable>"</userinput></screen>
<para>这里的 <replaceable>directory_list</replaceable> 是要备份的目录列表,
<replaceable>user</replaceable>@<replaceable>host</replaceable> 结合了将
@@ -2313,7 +2401,7 @@ mkdir /mnt/var
#
if [ ! -x /sys/compile/MINI/kernel ]
then
- cat << EOM
+ cat &lt;&lt; EOM
The MINI kernel does not exist, please create one.
Here is an example config file:
#
@@ -2361,14 +2449,14 @@ fi
cp -f /sys/compile/MINI/kernel /mnt
-gzip -c -best /sbin/init > /mnt/sbin/init
-gzip -c -best /sbin/fsck > /mnt/sbin/fsck
-gzip -c -best /sbin/mount > /mnt/sbin/mount
-gzip -c -best /sbin/halt > /mnt/sbin/halt
-gzip -c -best /sbin/restore > /mnt/sbin/restore
+gzip -c -best /sbin/init &gt; /mnt/sbin/init
+gzip -c -best /sbin/fsck &gt; /mnt/sbin/fsck
+gzip -c -best /sbin/mount &gt; /mnt/sbin/mount
+gzip -c -best /sbin/halt &gt; /mnt/sbin/halt
+gzip -c -best /sbin/restore &gt; /mnt/sbin/restore
-gzip -c -best /bin/sh > /mnt/bin/sh
-gzip -c -best /bin/sync > /mnt/bin/sync
+gzip -c -best /bin/sh &gt; /mnt/bin/sh
+gzip -c -best /bin/sync &gt; /mnt/bin/sync
cp /root/.profile /mnt/root
@@ -2395,18 +2483,18 @@ cd /
#
# create minimum file system table
#
-cat > /mnt/etc/fstab <<EOM
+cat &gt; /mnt/etc/fstab &lt;&lt;EOM
/dev/fd0a / ufs rw 1 1
EOM
#
# create minimum passwd file
#
-cat > /mnt/etc/passwd <<EOM
+cat &gt; /mnt/etc/passwd &lt;&lt;EOM
root:*:0:0:Charlie &:/root:/bin/sh
EOM
-cat > /mnt/etc/master.passwd <<EOM
+cat &gt; /mnt/etc/master.passwd &lt;&lt;EOM
root::0:0::0:0:Charlie &:/root:/bin/sh
EOM
@@ -2527,7 +2615,7 @@ echo "The floppy has been unmounted and is now ready."]]></programlisting>
</note>
<sect2 id="disks-vnconfig">
- <title>FreeBSD&nbsp;4.X 下的 File-Backed 文件系统</title>
+ <title>FreeBSD 4.X 下的 File-Backed 文件系统</title>
<indexterm>
<primary>磁盘</primary>
<secondary>file-backed (4.X)</secondary>
@@ -2576,7 +2664,7 @@ Filesystem 1K-blocks Used Avail Capacity Mounted on
</sect2>
<sect2 id="disks-mdconfig">
- <title>FreeBSD&nbsp;5.X 下的 File-Backed 文件系统</title>
+ <title>FreeBSD 5.X 下的 File-Backed 文件系统</title>
<indexterm>
<primary>磁盘</primary>
<secondary>file-backed (5.X)</secondary>
@@ -2665,7 +2753,7 @@ Filesystem 1K-blocks Used Avail Capacity Mounted on
</sect2>
<sect2 id="disks-md-freebsd4">
- <title>FreeBSD&nbsp;4.X 下的内存后备式文件系统</title>
+ <title>FreeBSD 4.X 下的内存后备式文件系统</title>
<indexterm>
<primary>磁盘</primary>
<secondary>内存文件系统(4.X)</secondary>
@@ -2694,7 +2782,7 @@ Filesystem 1K-blocks Used Avail Capacity Mounted on
</sect2>
<sect2 id="disks-md-freebsd5">
- <title>FreeBSD&nbsp;5.X 下的内存后备式文件系统</title>
+ <title>FreeBSD 5.X 下的内存后备式文件系统</title>
<indexterm>
<primary>磁盘</primary>
<secondary>内存文件系统(5.X)</secondary>
@@ -2822,10 +2910,10 @@ Filesystem 1K-blocks Used Avail Capacity Mounted on
</listitem>
<listitem>
- <para>检查文件系统的完整性, &man.fsck.8; 可以用来检查快照文件。
- 假设文件系统在挂接后前是一致的,
- 则会得到一致的结果 (不做修改)。
- 这是由 &man.fsck.8; 进程在后台完成的。</para>
+ <para>文件系统一致性检查程序 &man.fsck.8; 可以用来检查快照文件。
+ 如果文件系统在挂接前是一致的, 则检查结果也一定是一致的
+ (也就是不会做任何修改)。 实际上这也正是后台 &man.fsck.8;
+ 的操作过程。</para>
</listitem>
<listitem>
@@ -3078,15 +3166,16 @@ Filesystem 1K-blocks Used Avail Capacity Mounted on
但是,和操作系统强制受权不相关的是,如果黑客有物理上访问计算机的可能,
那他就可以简单的把计算机的硬件安装到另一个系统上拷贝出敏感的数据。</para>
- <para>不管怎样,黑客都有可能取得并获取停机时的硬件,
- <application>GEOM 基于磁盘的加密 (gbde)</application>
- 能够保护在计算机文件系统上的数据并防止黑客得到重要的信息。
- 不像 cumbersome 加密方法只加密个别的文件,
- <application>gbde</application> 透明的加密整个文件系统。
- 整个硬盘都是加密过的非明文数据。</para>
+ <para>无论攻击者如何取得停机后的硬件或硬盘驱动器本身, &os; <application>GEOM
+ Based Disk Encryption (基于 GEOM 的磁盘加密, gbde)</application> 和
+ <command>geli</command> 加密子系统都能够保护计算机上的文件系统数据,
+ 使它们免受哪怕是训练有素的攻击者获得有用的资源。
+ 与那些只能加密单个文件的笨重的加密方法不同,
+ <command>gbde</command> 和 <command>geli</command>
+ 能够透明地加密整个文件系统。 明文数据不会出现在硬盘的任何地方。</para>
<sect2>
- <title>在内核中启用 gbde</title>
+ <title>使用 <application>gbde</application> 对磁盘进行加密</title>
<procedure>
<step>
@@ -3111,23 +3200,19 @@ Password:</screen>
<step>
<title>在内核配置文件中添加对 &man.gbde.4; 的支持</title>
- <para>使用您喜欢的文本编辑器,
- 在内核配置文件中添加下面一行:</para>
+ <para>在您的内核配置中加入下面一行:</para>
<para><literal>options GEOM_BDE</literal></para>
- <para>配置,编译,安装 FreeBSD 内核,
- 这个过程在 <xref
- linkend="kernelconfig"> 中有详细描述。</para>
+ <para>按照 <xref
+ linkend="kernelconfig"> 所进行的介绍重新编译并安装内核。</para>
<para>重新引导进入新的内核。</para>
</step>
</procedure>
- </sect2>
-
- <sect2>
- <title>准备加密整个硬盘</title>
+ <sect3>
+ <title>准备加密盘</title>
<para>下面这个例子假设您添加了一个新的硬盘在您的系统并将拥有一个单独的加密分区。
这个分区将挂接在 <filename>/private</filename>目录下。
@@ -3282,10 +3367,10 @@ Filesystem Size Used Avail Capacity Mounted on
/dev/ad4s1c.bde 150G 4.1K 138G 0% /private</screen>
</step>
</procedure>
- </sect2>
+ </sect3>
- <sect2>
- <title>挂接已经存在的加密文件系统</title>
+ <sect3>
+ <title>挂接已有的加密文件系统</title>
<para>每次系统启动后,
在使用加密文件系统前必须和内核重新进行关联,
@@ -3298,8 +3383,8 @@ Filesystem Size Used Avail Capacity Mounted on
<screen>&prompt.root; <userinput>gbde attach /dev/ad4s1c -l /etc/gbde/ad4s1c</userinput></screen>
- <para>您将被要求提供您在初始化加密
- gbde 分区的过程中选定的密码短语。</para>
+ <para>接下来系统将提示您输入在初始化加密的
+ <application>gbde</application> 分区时所用的密码短语。</para>
</step>
<step>
@@ -3322,27 +3407,39 @@ Filesystem Size Used Avail Capacity Mounted on
</step>
</procedure>
- <sect3>
- <title>自动挂接加密文件系统</title>
+ <sect4>
+ <title>自动挂接加密分区</title>
- <para>可以创建一个脚本来自动进行关联、检测、和挂接一个加密分区,
- 但是为了安全起见,脚本程序中不应该包含 &man.gbde.8; 密码。
- 取而代之,摧荐这样的脚本要手工来运行,
- 在要求提供密码时可以通过控制台或 &man.ssh.1;。</para>
- </sect3>
- </sect2>
+ <para>可以创建脚本来自动地附加、 检测, 并挂接加密分区,
+ 然而, 处于安全考虑, 这个脚本不应包含 &man.gbde.8; 密码。
+ 于此相反, 我们建议这类脚本在控制台或通过 &man.ssh.1;
+ 执行并要求用户输入口令。</para>
- <sect2>
- <title>用 gbde 进行加密保护</title>
+ <para>从 &os; 5.2-RELEASE 开始, 提供了一个新的 <filename>rc.d</filename> 脚本。
+ 这个脚本的参数可以通过
+ &man.rc.conf.5; 来指定, 例如:</para>
- <para>&man.gbde.8; 在 CBC 模式上使用 128-bit AES 对扇区进行加密,
- 每个扇区在硬盘上的加密都使用不同的 AES 密钥。
- 想了解更多的信息关于 <application>gbde</application>
- 的设计,包括每个扇区的密钥是怎样从用户提供的密钥短语产生的,
- 请看 &man.gbde.4;。</para>
- </sect2>
+ <screen>gbde_autoattach_all="YES"
+gbde_devices="ad4s1c"</screen>
+
+ <para>在启动时将要求输入 <application>gbde</application>
+ 的口令。 在输入正确的口令之后, <application>gbde</application>
+ 加密分区将被自动挂接。 对于将 <application>gbde</application>
+ 用在笔记本电脑上时, 这就很有用了。</para>
+ </sect4>
+ </sect3>
+
+ <sect3>
+ <title>gbde 提供的密码学保护</title>
- <sect2>
+ <para>&man.gbde.8; 采用 CBC 模式的 128-位 AES 来加密扇区数据。
+ 磁盘上的每个扇区都采用不同的 AES 密钥来加密。
+ 要了解关于 <application>gbde</application> 的密码学设计,
+ 包括扇区密钥如何从用户提供的口令字中生成等细节,
+ 请参考 &man.gbde.4;。</para>
+ </sect3>
+
+ <sect3>
<title>兼容性问题</title>
<para>&man.sysinstall.8; 是和
@@ -3353,12 +3450,328 @@ Filesystem Size Used Avail Capacity Mounted on
与加密设备进行分离在我们的例子中使用如下的命令:</para>
<screen>&prompt.root; <userinput>gbde detach /dev/ad4s1c</userinput></screen>
- <para>也应该注意,作为 &man.vinum.4; 不能使用 &man.geom.4; 子系统,
- 您不能同时使用
- <application>gbde</application> 和
+ <para>还需要注意的是, 由于 &man.vinum.4; 没有使用
+ &man.geom.4; 子系统, 因此不能同时使用
+ <application>gbde</application> 与
<application>vinum</application> 卷。</para>
- </sect2>
+ </sect3>
+
+ </sect2>
+
+ <sect2>
+ <sect2info>
+ <authorgroup>
+ <author>
+ <firstname>Daniel</firstname>
+ <surname>Gerzo</surname>
+ <contrib>撰写者 </contrib>
+ </author>
+ </authorgroup>
+ <!-- Date of writing: 28 November 2005 -->
+ </sect2info>
+
+ <title>使用 <command>geli</command> 对磁盘进行加密</title>
+
+ <para>从 &os; 6.0 开始提供了一个新的密码学 GEOM class &mdash;
+ <command>geli</command>。 它目前由
+ &a.pjd; 开发。 <command>Geli</command> 与
+ <command>gbde</command> 不同; 它提供了一些不同的功能,
+ 并采用了不同的方式来进行密码学运算。</para>
+
+ <para>&man.geli.8; 最重要的功能包括:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>使用了 &man.crypto.9; 框架 &mdash;
+ 如果系统中有加解密硬件加速设备, 则 <command>geli</command>
+ 会自动加以利用。</para>
+ </listitem>
+ <listitem>
+ <para>支持多种加密算法 (目前支持
+ AES、 Blowfish, 以及 3DES)。</para>
+ </listitem>
+ <listitem>
+ <para>允许对根分区进行加密。 在系统启动时,
+ 将要求输入用于加密根分区的口令。</para>
+ </listitem>
+ <listitem>
+ <para>允许使用两个不同的密钥 (例如, 一个
+ <quote>个人密钥</quote> 和一个 <quote>公司密钥</quote>)。</para>
+ </listitem>
+ <listitem>
+ <para><command>geli</command> 速度很快 &mdash;
+ 它只进行简单的扇区到扇区的加密。</para>
+ </listitem>
+ <listitem>
+ <para>允许备份和恢复主密钥。 当用户必须销毁其密钥时,
+ 仍然可以通过从备份中恢复密钥来存取数据。</para>
+ </listitem>
+ <listitem>
+ <para>允许使用随机的一次性密钥来挂接磁盘
+ &mdash; 这对于交换区和临时文件系统非常有用。</para>
+ </listitem>
+ </itemizedlist>
+
+ <para>更多 <command>geli</command> 功能介绍可以在
+ &man.geli.8; 联机手册中找到。</para>
+ <para>下面的步骤介绍了如何启用 &os; 内核中的
+ <command>geli</command> 支持,
+ 并解释了如何创建新的 <command>geli</command> 加密 provider。
+ 最后, 还将对如何利用 <command>geli</command>
+ 创建加密的交换分区加以演示。</para>
+
+ <para>要使用 <command>geli</command>, 您必须运行
+ &os; 6.0-RELEASE 或更新版本。 由于需要修改内核,
+ 因此您还需要拥有超级用户权限。</para>
+
+ <procedure>
+ <step>
+ <title>在内核配置文件中加入 <command>geli</command> 支持</title>
+
+ <para>在内核配置文件中加入下面两行:</para>
+
+ <screen>options GEOM_ELI
+device crypto</screen>
+
+ <para>按照 <xref
+ linkend="kernelconfig"> 介绍的步骤重新编译并安装内核。</para>
+
+ <para>另外, <command>geli</command> 也可以在系统引导时加载。 这是通过在
+ <filename>/boot/loader.conf</filename> 中增加下面的配置来实现的:</para>
+
+ <para><literal>geom_eli_load="YES"</literal></para>
+
+ <para>&man.geli.8; 现在应该已经为内核所支持了。</para>
+ </step>
+
+ <step>
+ <title>生成主密钥</title>
+
+ <para>下面的例子讲描述如何生成密钥文件, 它将作为主密钥 (Master Key)
+ 的一部分, 用于挂接到
+ <filename role="directory">/private</filename> 的加密 provider。
+ 这个密钥文件将提供一些随机数据来加密主密钥。 同时,
+ 主密钥也会使用一个口令字来保护。 Provider 的扇区尺寸为 4kB。
+ 此外, 这里的讨论将描述如何挂载
+ <command>geli</command> provider, 在其上创建文件系统,
+ 如何挂接并在其上工作, 最后将其卸下。</para>
+
+ <para>建议您使用较大的扇区尺寸 (例如 4kB),
+ 以获得更好的性能。</para>
+
+ <para>主密钥将由口令字保护, 而密钥文件的数据来源则将是
+ <filename>/dev/random</filename>。 我们称之为 provider 的
+ <filename>/dev/da2.eli</filename> 的扇区尺寸将是 4kB。</para>
+
+ <screen>&prompt.root; <userinput>dd if=/dev/random of=/root/da2.key bs=64 count=1</userinput>
+&prompt.root; <userinput>geli init -s 4096 -K /root/da2.key /dev/da2</userinput>
+Enter new passphrase:
+Reenter new passphrase:</screen>
+
+ <para>同时使用口令字和密钥文件并不是必须的;
+ 您也可以只使用其中的一种来加密主密钥。</para>
+
+ <para>如果密钥文件写作 <quote>-</quote>, 则表示使用标准输入。
+ 下面是关于如何使用多个密钥文件的例子:</para>
+
+ <screen>&prompt.root; <userinput>cat keyfile1 keyfile2 keyfile3 | geli init -K - /dev/da2</userinput></screen>
+ </step>
+
+ <step>
+ <title>将 provider 与所生成的密钥关联</title>
+
+ <screen>&prompt.root; <userinput>geli attach -k /root/da2.key /dev/da2</userinput>
+Enter passphrase:</screen>
+
+ <para>新的明文设备将被命名为
+ <filename>/dev/<replaceable>da2</replaceable>.eli</filename>。</para>
+
+ <screen>&prompt.root; <userinput>ls /dev/da2*</userinput>
+/dev/da2 /dev/da2.eli</screen>
+ </step>
+
+ <step>
+ <title>创建新的文件系统</title>
+
+ <screen>&prompt.root; <userinput>dd if=/dev/random of=/dev/da2.eli bs=1m</userinput>
+&prompt.root; <userinput>newfs /dev/da2.eli</userinput>
+&prompt.root; <userinput>mount /dev/da2.eli /private</userinput></screen>
+
+ <para>现在加密的文件系统应该已经可以被 &man.df.1; 看到,
+ 并处于可用状态了。</para>
+
+ <screen>&prompt.root; <userinput>df -H</userinput>
+Filesystem Size Used Avail Capacity Mounted on
+/dev/ad0s1a 248M 89M 139M 38% /
+/devfs 1.0K 1.0K 0B 100% /dev
+/dev/ad0s1f 7.7G 2.3G 4.9G 32% /usr
+/dev/ad0s1d 989M 1.5M 909M 0% /tmp
+/dev/ad0s1e 3.9G 1.3G 2.3G 35% /var
+/dev/da2.eli 150G 4.1K 138G 0% /private</screen>
+
+ </step>
+
+ <step>
+ <title>卸下卷并断开 provider</title>
+
+ <para>一旦在加密分区上的工作完成,
+ 并且不再需要 <filename role="directory">/private</filename> 分区,
+ 就应考虑将其卸下并将 <command>geli</command> 加密分区从内核上断开。</para>
+
+ <screen>&prompt.root; <userinput>umount /private</userinput>
+&prompt.root; <userinput>geli detach da2.eli</userinput></screen>
+ </step>
+ </procedure>
+
+ <para>关于如何使用 &man.geli.8; 的更多信息,
+ 可以在其联机手册中找到。</para>
+
+ <sect3>
+ <title>使用 <filename>geli</filename> <filename>rc.d</filename> 脚本</title>
+
+ <para><command>geli</command> 提供了一个 <filename>rc.d</filename> 脚本,
+ 它可以用于简化 <command>geli</command> 的使用。 通过
+ &man.rc.conf.5; 配置 <command>geli</command> 的方法如下:</para>
+
+ <screen>geli_devices="da2"
+geli_da2_flags="-p -k /root/da2.key"</screen>
+
+ <para>这将把 <filename>/dev/da2</filename> 配置为一个
+ <command>geli</command> provider, 其主密钥文件位于
+ <filename>/root/da2.key</filename>, 而
+ <command>geli</command> 在连接 provider 时将不使用口令字
+ (注意只有在 <command>geli</command> init 阶段使用了 -P 才可以这样做)。
+ 系统将在关闭之前将 <command>geli</command> provider 断开。</para>
+
+ <para>关于如何配置 <filename>rc.d</filename> 的详细信息可以在使用手册的
+ <link linkend="configtuning-rcd">rc.d</link> 一节中找到。</para>
+ </sect3>
+ </sect2>
+ </sect1>
+
+
+ <sect1 id="swap-encrypting">
+ <sect1info>
+ <authorgroup>
+ <author>
+ <firstname>Christian</firstname>
+ <surname>Br&uuml;ffer</surname>
+ <contrib>原作 </contrib>
+ </author>
+ </authorgroup>
+ </sect1info>
+
+ <title>对交换区进行加密</title>
+ <indexterm>
+ <primary>swap (交换区)</primary>
+ <secondary>encrypting (加密)</secondary>
+ </indexterm>
+
+ <para>从 &os; 5.3-RELEASE 开始, &os; 提供了易于配置的交换区加密机制。
+ 随所用的 &os; 版本, 可用的配置选项会有所不同,
+ 而配置方法也会有一些差异。 从 &os; 6.0-RELEASE 开始,
+ 已经可以使用 &man.gbde.8; 和 &man.geli.8;
+ 两种加密系统来进行交换区的加密操作了。 在更早的版本中,
+ 则只提供了 &man.gbde.8;。 前面所说的这两种加密系统,
+ 都用到了 <filename>encswap</filename> 这个
+ <link linkend="configtuning-rcd">rc.d</link> 脚本。</para>
+
+ <para>在前面的小节 <link linkend="disks-encrypting">如何加密磁盘分区</link>
+ 中, 已经就不同的加密系统之间的区别进行了简单的讨论。</para>
+
+ <sect2>
+ <title>为什么需要对交换区进行加密?</title>
+
+ <para>与加密磁盘分区类似, 加密交换区有助于保护敏感信息。
+ 为此, 我们不妨考虑一个需要处理敏感信息的程序, 例如,
+ 它需要处理口令。 如果这些口令一直保持在物理内存中, 则一切相安无事。
+ 然而, 如果操作系统开始将内存页换出到交换区,
+ 以便为其他应用程序腾出内存时, 这些口令就可能以未加密的形式写到磁盘上,
+ 并为攻击者所轻易获得。 加密交换区能够有效地解决这类问题。</para>
+ </sect2>
+
+ <sect2>
+ <title>准备</title>
+
+ <note>
+ <para>在本节余下的部分中, 我们约定使用 <devicename>ad0s1b</devicename>
+ 作为交换区。</para>
+ </note>
+
+ <para>到目前为止, 交换区仍是未加密的。
+ 很可能其中已经存有明文形式的口令或其他敏感数据。
+ 要纠正这一问题, 首先应使用随机数来覆盖交换分区的数据:</para>
+
+ <screen>&prompt.root; <userinput>dd if=/dev/random of=/dev/ad0s1b bs=1m</userinput></screen>
+ </sect2>
+
+ <sect2>
+ <title>使用 &man.gbde.8; 来加密交换区</title>
+
+ <para>如果使用 &os; 6.0-RELEASE 或更新的版本, 则 <filename>/etc/fstab</filename>
+ 中与交换区对应的行中, 设备名应追加
+ <literal>.bde</literal> 后缀:</para>
+
+ <screen>
+# Device Mountpoint FStype Options Dump Pass#
+/dev/ad0s1b.bde none swap sw 0 0
+ </screen>
+
+ <para>对于 &os; 6.0-RELEASE 之前的版本,
+ 还需要在 <filename>/etc/rc.conf</filename> 中加入:
+
+ <programlisting>gbde_swap_enable="YES"</programlisting>
+ </sect2>
+
+ <sect2>
+ <title>使用 &man.geli.8; 来加密分区</title>
+
+ <para>另一种方法是使用 &man.geli.8; 来达到加密交换区的目的,
+ 其过程与使用 &man.gbde.8; 大体相似。 此时, 在 <filename>/etc/fstab</filename>
+ 中交换区对应的行中, 设备名应追加
+ <literal>.eli</literal> 后缀:</para>
+
+ <screen>
+# Device Mountpoint FStype Options Dump Pass#
+/dev/ad0s1b.eli none swap sw 0 0
+ </screen>
+
+ <para>&man.geli.8; 默认情况下使用密钥长度为 256-位的
+ <acronym>AES</acronym> 加密算法。</para>
+
+ <para>当然, 这些默认值是可以通过 <filename>/etc/rc.conf</filename> 中的
+ <literal>geli_swap_flags</literal> 选项来修改的。 下面的配置表示让 rc.d 脚本
+ <filename>encswap</filename> 创建一个 &man.geli.8; 交换区,
+ 在其上使用密钥长度为 128-位 的 Blowfish 加密算法, 4096 kilobyte
+ 的扇区尺寸, 并采用 <quote>最后一次关闭时卸下</quote> 的策略:</para>
+
+ <programlisting>geli_swap_flags="-a blowfish -l 128 -s 4096 -d"</programlisting>
+
+ <para>请参见 &man.geli.8; 联机手册中关于 <command>onetime</command>
+ 命令的说明, 以了解其他可用的选项。</para>
+ </sect2>
+
+ <sect2>
+ <title>验证所作的配置能够发挥作用</title>
+
+ <para>在重启系统之后, 就可以使用
+ <command>swapinfo</command> 命令来验证加密交换区是否已经在正常运转了。</para>
+
+ <para>如果使用了 &man.gbde.8;, 则:</para>
+
+ <screen>&prompt.user; <userinput>swapinfo</userinput>
+Device 1K-blocks Used Avail Capacity
+/dev/ad0s1b.bde 542720 0 542720 0%
+ </screen>
+
+ <para>如果使用了 &man.geli.8;, 则:</para>
+
+ <screen>&prompt.user; <userinput>swapinfo</userinput>
+Device 1K-blocks Used Avail Capacity
+/dev/ad0s1b.eli 542720 0 542720 0%
+ </screen>
+ </sect2>
</sect1>
</chapter>