Loopback Encrypted Filesystem HOWTO <author>作者:Ryan T. Rhea, <tt/zzrhear@pobox.winthrop.edu/ <newline> 译者:赵平望 <tt/tchao@worldnet.att.net/ <date>v1.1, 29 November 1999 翻译日期:2000年1月15日 <abstract> 本文件解释如何安装和使用一种使用者加载後可动态和无需采取特别步骤就能加密文档内容的文档系统。 这种文档系统存放在通常文件内,它可作为隐藏文件隐藏,也可使用极可能会被忽略的一般文档名称存放, 以此提高数据资料储存的安全。 </abstract> <!-- Table of contents 加入目录--> <toc> <!-- Begin the document 内容开始--> <sect>前言 <p> 建立这个文档系统需要有内核的源代码、编辑代码的能力和耐心,同时强烈建议手边随时有启动盘可用。 把重要资料长期存放在加密的文档系统之前,应首先制作备份保存, 因为任何存放在电脑的资料都有遭到损坏不可取用的可能。 要完成建立这个文档系统,起码要修补 Linux 内核 2.2.9 版。关於修补的细节, 见下文<ref id="详细内容">一节内的内容。 内核源代码可从下列网址下载: <tscreen> <url url="ftp://ftp.kerneli.org/"> </tscreen> 关於重编内核的程序可查阅相关 HOWTO 文件,网址如下: <tscreen> <url url="http://metalab.unc.edu/LDP/HOWTO/"> </tscreen> 这份文件可全文或部分转载,不收费用,但需符合下列条件: <itemize> <item>在全文或部分转载中应全文载列版权说明和这份转载同意书。 <item>任何翻译或由这份文件生成的文本在散发前均应取得作者的书面同意。 <item>如果只散发本文部分内容,则应在散发的文本内列入取得本文全文的详细方法和途径。 <item>文内所有源代码均受到 GNU 一般公共许可证的保护。许可证内容可通过匿名 FTP 网址下载: </itemize> <tscreen> <url url="ftp://prep.ai.mit.edu/pub/gnu/COPYING/"> </tscreen> <sect>导言 <p> 这项过程使用“/dev/loop*”(在多数安装系统中* 为 0-7 )加载 loopback 文档系统。 采用同种方法可将 Linux 的文档系统不加密地存放在非 Linux 分割区。在前述 LDP 网址上存有关于这方面的 HOWTO。 文档加密的方法□多,包括 XOR, DES, twofish, blowfish, cast128, serpent, MARS, RC6, DFC 和 IDEA。 “losetup”程式的工作便是将加密文档和文档系统及其密码联系在一起。根据管理 kerneli.org 和国际加密修补软件(international crypto patches)的 Alexander Kjeldaas 先生的看法, DES 和 losetup 目前并不兼容。 这是由于这两种软件处理 parity bit 的方法不同的缘故。目前 Linux 系统并无支持 DES 的计画,因为 DES 密码的加密程度比较不够严密。 Twofish, blowfish, cast128 和 serpent 密码可任意使用,没有任何许可证的限制。 其他密码可能有一些许可证方面的规定。有些密码入选作为 AES 标准。 最後选定的密码将作为全世界免费使用的密码。 本文使用 serpent 加密法加密,因为这种加密法保密性强,运行极快,同时根据 GPL 的规定可免费散发。 在 serpent 有关的文件中指出,serpent 软件使用 Ross Anderson, Eli Biham 和 Lars Knudsen 设计的长度 128-bit 的密码组。这对使用者的保密要求提供了最高保证, 因为到目前为止,并无解码的简单办法。有关 serpent 的文件及其源代码可从下列网址下载: <tscreen> <url url="http://www.cl.cam.ac.uk/~rja14/serpent.html"> </tscreen> 这份文件假设使用者将密码直接编入内核。不过,密码也可作为模组编入, 但在该文件中并未对这种方法加以讨论。不过方法也□简单,只需编辑“/etc/conf.module”; 详情见前面提到的关於编辑内核的 HOWTO 文件。 <sect>摘要 <p> 这项过程涉及许多步骤。在下节<ref id="详细内容">中对这些步骤有详细说明。 先对这些步骤作出摘要说明也许是不错的主意,因为 Unix 和 Linux 的高手也许不需要详细步骤。 这些步骤如下: <enum> <item>下载最新的国际加密修补软件 (编写本文时的最新版本为“patch-int-2.2.10.4”): <p><tscreen> <url url="http://ftp.kerneli.org/pub/kerneli/"> </tscreen> <p><item>修补内核 <p><item>运行 'config' (或 'menuconfig' 或 'xconfig'),为新内核设置 'MakeFile'。 设定加密的各个选项并不集中在一起。首先,要设定任何选项都得选用 'Code Maturity level options' 项下的 'Prompt for development and/or incomplete code/drivers'。在 'Crypto options' 项下选用 'crypto ciphers' 和 'serpent' 两项。在此再次假设使用 serpent 加密,不过也可试用其他的加密办法。 在此必需指出,DES 到 2.2.10.4 版都还与系统不兼容 - 估计未来也不会兼容。在 'Block Devices' 下有几个重要选项必需选定。这包括 'Loopback device support', 'Use relative block numbers as basis for transfer functions (RECOMMENDED)' 和 'General encryption support' 等各项。此处不要选 'cast 128' 或 'twofish' 加密。此外在各种网路中也不需选取任何加密选项。 任何有关内核的设置方法均可参阅 LDP 文件,不在此处再次赘述。 <p><item>编辑新内核 <p><item>编辑 '/etc/lilo.conf',以便在设置文档内增加新内核。运行 'lilo -v' 将内核加到 boot loader 内。 <p><item>从下列网址下载最新的 'util-linux' 源代码 (此处使用 'util-linux-2.9v' 版): <p><tscreen> <url url="ftp://ftp.kernel.org/pub/linux/utils/util-linux/"> </tscreen> <p><item>解压 'util-linux' 源代码。 <p><item>利用在 '/usr/src/linux/Documentation/crypto/' 目录内的相应修补软件。 <p><item>仔细阅读 'INSTALL'。这套软件内有许多与系统有关的文档的源代码 (重要的工具如'login', 'passwd'和'init'等)。如果在编辑这些源代码之前 不仔细地编辑 MCONFIG,最好手头随时有启动片可用,因为系统随时都会错乱。 基本上,将所有 'HAVE_*' 都设成“yes”,使所有重要的系统软件都不会被更改。 需要重建的工具是 'mount' 和 'losetup',以适合新的加密需要。 细节不妨参看下文<ref id="详细内容">。 <p><item>编辑和安装 'util-linux'。 <p><item>用新内核重新启动电脑。 <p><item>编辑 '/etc/fstab',增加加载点,步骤如下: <p><tscreen><code> /dev/loop0 /mnt/crypt ext2 user,noauto,rw,loop 0 0 </code></tscreen> <p><item>如上文 '/mnt/crypt' 的方式,建立能收存文档系统的目录。 <p><item>作为使用者,收存加密的文档如下: <p><tscreen><verb> dd if=/dev/urandom of=/etc/cryptfile bs=1M count=10 </verb></tscreen> <p><item>运行 losetup 如下: <p><tscreen><verb> losetup -e serpent /dev/loop0 /etc/cryptfile </verb></tscreen> 注意:设定使用密码的机会只有一次。可用下列指令查核使用密码: <p><tscreen><verb> losetup -d /dev/loop0 </verb></tscreen> 这条指令会使 loop device 停止作用。随後再启动 losetup 就可测试使用密码,方法如下: <p><tscreen><verb> losetup -e serpent /dev/loop0 /etc/cryptfile </verb></tscreen> <p><item>设定 ext2 文档系统如下: <p><tscreen><verb> mkfs -t ext2 /dev/loop0 100000 </verb></tscreen> <p><item>此时就可加载加密的文档系统: <p><tscreen><verb> mount -t ext2 /dev/loop0 /mnt/crypt </verb></tscreen> <p><item>完成加密之後,可卸载和保护文档系统如下: <p><tscreen><verb> umount /dev/loop0 losetup -d /dev/loop0' </verb></tscreen> </enum> <sect>详细内容<label id="详细内容"> <p><bf/内核修补软件:/ 可从“2.2.x”版的内核开始修补内核。为“2.2.x”版的内核编写的修补软件都附带除错程序(bugfixes)。 新功能都会加入 Linux “2.3.x”版的开发内核。修补内核的办法是首先取得所有修补软件, 然後以下列指令修补: <tscreen><verb> cd /usr/src gzip -cd patchXX.gz patch -p0 </verb></tscreen> 重复 xx 各版本的修补,从次序低的 xx 往高的方向依次修补。 内核源代码的默认目录是 '/usr/src/linux'。如源代码在其他目录,可从 '/usr/src/linux' 建立一个符号连接(symbolic link)。 <p><bf/为 'util-linux' 的编辑设定 'MCONFIG':/ 以下是编辑 'util-linux' 时修改 'MCONFIG' 档的部分内容。随著系统版本的不同,修改方式并不完全相同, 此处基本上以 RedHat 5.2 为准。关键之处是不要覆盖重要的系统工具,例 如'login'、'getty'或'passwd' 等。以下列出一些重要的设定: <tscreen><code> CPU=$(shell uname -m sed s/I.86/intel/) LOCALEDIR=/usr/share/locale HAVE_PAM=no HAVE_SHADOW=yes HAVE_PASSWD=yes REQUIRE_PASSWORD=yes ONLY_LISTED_SHELLS=yes HAVE_SYSVINIT=yes HAVE_SYSVINIT_UTILS=yes HAVE_GETTY=yes USE_TTY_GROUP=yes HAVE_RESET=yes HAVE_SLN=yes CC=gcc </code></tscreen> <p><bf/建议:/ 从'dev/loop0' 到 '/dev/loop7',这 8 个 loopback devices 均可用于此处。 利用目录名称不太显眼的目录作为加载点。不妨在 home 目录内建立一个权限为 700 的加密目录。 也用不显眼的目录存放加密文档。不妨在 '/etc' 内使用 'sysfile' 或 'config.data' 这类名称。 一般这类名称的目录或文档都不太受人注意。 下列 Perl 脚本可用于加载和卸载文档系统。将其抄入系统,改成可运行(chmod u+x), 然後存放在路径目录中。 <tscreen><code> #!/usr/bin/perl -w # #minimal utility to setup loopback encryption filesystem #Copyright 1999 by Ryan T. Rhea `losetup -e serpent /dev/loop0 /etc/cryptfile`; `mount /mnt/crypt`; </code></tscreen> 将上述脚本称为 'loop',就可用一个指令('loop')和密码设定 loopback 加密文档系统。 <tscreen><code> #!/usr/bin/perl -w # #minimal utility to deactivate loopback encryption filesystem #Copyright 1999 by Ryan T. Rhea `umount /mount/crypt`; `losetup -d /dev/loop0`; </code></tscreen> 将这个脚本称为 'unloop',以後只要键入 'unloop' 就可立即停止这个文档系统的运作。 <!-- pxq --> </article>