Loopback Encrypted Filesystem HOWTO 作者:Ryan T. Rhea, zzrhear@pobox.winthrop.edu 译者:赵平望 tchao@worldnet.att.net v1.1, 29 November 1999 翻译日期:2000年1月15日 _________________________________________________________________ 本文件解释如何安装和使用一种使用者加载後可动态和无需采取特别步骤就能加 密文档内容的文档系统。这种文档系统存放在通常文件内,它可作为隐藏文件隐 藏,也可使用极可能会被忽略的一般文档名称存放,以此提高数据资料储存的安 全。 _________________________________________________________________ 1. 前言 2. 导言 3. 摘要 4. 详细内容 _________________________________________________________________ 1. 前言 建立这个文档系统需要有内核的源代码、编辑代码的能力和耐心,同时强烈建议 手边随时有启动盘可用。 把重要资料长期存放在加密的文档系统之前,应首先制 作备份保存, 因为任何存放在电脑的资料都有遭到损坏不可取用的可能。 要完成建立这个文档系统,起码要修补 Linux 内核 2.2.9 版。关於修补的细节 , 见下文 [1]详细内容 一节内的内容。 内核源代码可从下列网址下载: [2]ftp://ftp.kerneli.org/ 关於重编内核的程序可查阅相关 HOWTO 文件,网址如下: [3]http://metalab.unc.edu/LDP/HOWTO/ 这份文件可全文或部分转载,不收费用,但需符合下列条件: * 在全文或部分转载中应全文载列版权说明和这份转载同意书。 * 任何翻译或由这份文件生成的文本在散发前均应取得作者的书面同意。 * 如果只散发本文部分内容,则应在散发的文本内列入取得本文全文的详细方 法和途径。 * 文内所有源代码均受到 GNU 一般公共许可证的保护。许可证内容可通过匿名 FTP 网址下载: [4]ftp://prep.ai.mit.edu/pub/gnu/COPYING/ 2. 导言 这项过程使用“/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 的文件及其源代码可从下列网址下载: [5]http://www.cl.cam.ac.uk/~rja14/serpent.html 这份文件假设使用者将密码直接编入内核。不过,密码也可作为模组编入, 但在 该文件中并未对这种方法加以讨论。不过方法也□简单,只需编辑 “/etc/conf.module”; 详情见前面提到的关於编辑内核的 HOWTO 文件。 3. 摘要 这项过程涉及许多步骤。在下节 [6]详细内容 中对这些步骤有详细说明。 先对 这些步骤作出摘要说明也许是不错的主意,因为 Unix 和 Linux 的高手也许不需 要详细步骤。 这些步骤如下: 1. 下载最新的国际加密修补软件 (编写本文时的最新版本为 “patch-int-2.2.10.4”): [7]http://ftp.kerneli.org/pub/kerneli/ 2. 修补内核 3. 运行 '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 文件,不在此处再次 赘述。 4. 编辑新内核 5. 编辑 '/etc/lilo.conf',以便在设置文档内增加新内核。运行 'lilo -v' 将内核加到 boot loader 内。 6. 从下列网址下载最新的 'util-linux' 源代码 (此处使用 'util-linux-2.9v' 版): [8]ftp://ftp.kernel.org/pub/linux/utils/util-linux/ 7. 解压 'util-linux' 源代码。 8. 利用在 '/usr/src/linux/Documentation/crypto/' 目录内的相应修补软件 。 9. 仔细阅读 'INSTALL'。这套软件内有许多与系统有关的文档的源代码 (重要 的工具如'login', 'passwd'和'init'等)。如果在编辑这些源代码之前 不 仔细地编辑 MCONFIG,最好手头随时有启动片可用,因为系统随时都会错乱 。 基本上,将所有 'HAVE_*' 都设成“yes”,使所有重要的系统软件都不 会被更改。 需要重建的工具是 'mount' 和 'losetup',以适合新的加密需 要。 细节不妨参看下文 [9]详细内容 。 10. 编辑和安装 'util-linux'。 11. 用新内核重新启动电脑。 12. 编辑 '/etc/fstab',增加加载点,步骤如下: ______________________________________________________________ /dev/loop0 /mnt/crypt ext2 user,noauto,rw,loop 0 0 ______________________________________________________________ 13. 如上文 '/mnt/crypt' 的方式,建立能收存文档系统的目录。 14. 作为使用者,收存加密的文档如下: dd if=/dev/urandom of=/etc/cryptfile bs=1M count=10 15. 运行 losetup 如下: losetup -e serpent /dev/loop0 /etc/cryptfile 注意:设定使用密码的机会只有一次。可用下列指令查核使用密码: losetup -d /dev/loop0 这条指令会使 loop device 停止作用。随後再启动 losetup 就可测试使用 密码,方法如下: losetup -e serpent /dev/loop0 /etc/cryptfile 16. 设定 ext2 文档系统如下: mkfs -t ext2 /dev/loop0 100000 17. 此时就可加载加密的文档系统: mount -t ext2 /dev/loop0 /mnt/crypt 18. 完成加密之後,可卸载和保护文档系统如下: umount /dev/loop0 losetup -d /dev/loop0' 4. 详细内容 内核修补软件: 可从“2.2.x”版的内核开始修补内核。为“2.2.x”版的内核编写的修补软件都 附带除错程序(bugfixes)。 新功能都会加入 Linux “2.3.x”版的开发内核。 修补内核的办法是首先取得所有修补软件, 然後以下列指令修补: cd /usr/src gzip -cd patchXX.gz patch -p0 重复 xx 各版本的修补,从次序低的 xx 往高的方向依次修补。 内核源代码的默认目录是 '/usr/src/linux'。如源代码在其他目录,可从 '/usr/src/linux' 建立一个符号连接(symbolic link)。 为 'util-linux' 的编辑设定 'MCONFIG': 以下是编辑 'util-linux' 时修改 'MCONFIG' 档的部分内容。随著系统版本的不 同,修改方式并不完全相同, 此处基本上以 RedHat 5.2 为准。关键之处是不要 覆盖重要的系统工具,例 如'login'、'getty'或'passwd' 等。以下列出一些重 要的设定: ______________________________________________________________ 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 ______________________________________________________________ 建议: 从'dev/loop0' 到 '/dev/loop7',这 8 个 loopback devices 均可用于此处。 利用目录名称不太显眼的目录作为加载点。不妨在 home 目录内建立一个权限为 700 的加密目录。 也用不显眼的目录存放加密文档。不妨在 '/etc' 内使用 'sysfile' 或 'config.data' 这类名称。 一般这类名称的目录或文档都不太受 人注意。 下列 Perl 脚本可用于加载和卸载文档系统。将其抄入系统,改成可运行 (chmod u+x), 然後存放在路径目录中。 ______________________________________________________________ #!/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`; ______________________________________________________________ 将上述脚本称为 'loop',就可用一个指令('loop')和密码设定 loopback 加密 文档系统。 ______________________________________________________________ #!/usr/bin/perl -w # #minimal utility to deactivate loopback encryption filesystem #Copyright 1999 by Ryan T. Rhea `umount /mount/crypt`; `losetup -d /dev/loop0`; ______________________________________________________________ 将这个脚本称为 'unloop',以後只要键入 'unloop' 就可立即停止这个文档系统 的运作。 References 1. file://localhost/tmp/zh-sgmltools.26907/Loopback-Encrypted-Filesystem-HOWTO.txt.html#%B8%D4%B2%D3%A4%BA%AEe 2. ftp://ftp.kerneli.org/ 3. http://metalab.unc.edu/LDP/HOWTO/ 4. ftp://prep.ai.mit.edu/pub/gnu/COPYING/ 5. http://www.cl.cam.ac.uk/~rja14/serpent.html 6. file://localhost/tmp/zh-sgmltools.26907/Loopback-Encrypted-Filesystem-HOWTO.txt.html#%B8%D4%B2%D3%A4%BA%AEe 7. http://ftp.kerneli.org/pub/kerneli/ 8. ftp://ftp.kernel.org/pub/linux/utils/util-linux/ 9. file://localhost/tmp/zh-sgmltools.26907/Loopback-Encrypted-Filesystem-HOWTO.txt.html#%B8%D4%B2%D3%A4%BA%AEe