|
发表于 2005-1-4 16:49:50
|
显示全部楼层
被编成密码的根Filesystem HOWTO
Christophe Devine
修正历史
修正v1.2
2004-10-20
校正: 光盘
更新了包裹版本。
修正v1.1
2003-12-01
校正: 光盘
增加的支持对于幼虫。
修正v1.0
2003-09-24
校正: 光盘
最初的发行, 由LDP 回顾。
修正v0.9
2003-09-11
校正: 光盘
更新和转换成DocBook XML 。
这个文件解释怎么使您的个人数据安全由编成密码您的Linux 根filesystem 使用强的密码学。
准备系统
设定分开布局
您的硬盘(hda) 应该包含至少三分开:
hda1: 这小unencrypted 分开将请求密码为了登上被编成密码的根filesystem 。
hda2: 这分开将包含您的被编成密码的根filesystem; 确定它是足够大的。
hda3: 这分开拿着当前的GNU/Linux 系统。
这时, hda1 和hda2 是未使用的hda3 是您的Linux 发行当前被安装的地方; /usr 和/boot 不能 被分离从这分开。
这什么的例子您的分开布局也许看起来象:
# fdisk - l /dev/hda 盘/dev/hda: 255 个头, 63 个区段, 2432 个圆筒单位= 圆筒16065 把* 512 把字节设备起动起动块规Id 系统/dev/hda1 1 1 8001 83 Linux /dev/hda2 2 263 2104515 83 Linux /dev/hda3 264 525 2104515 83 Linux /dev/hda4 526 2047 12225465 83 Linux
安装Linux 2.4.27
有增加回送编成密码支持在仁的二个主要项目: cryptoloop 和圈AES 。这howto 根据圈AES, 因为它以Rijndael 的极端快速和高度优化实施为特色用汇编语言, 并且提供因此最高性能如果您有IA-32 (x86) CPU 。其外, 有对 cryptoloop 的一些 安全问题。
首先, 下载和打开圈AES 包裹:
wget http://loop-aes.sourceforge.net/loop-AES/loop-AES-v2.2b.tar.bz2 沥青- xvjf 圈AES v2.2b.tar.bz2
然后您必须下载和修补仁来源:
wget http://ftp.kernel.org/pub/linux/kernel/v2.4/linux-2.4.27.tar.bz2 沥青- xvjf Linux 2.4.27.tar.bz2 光盘Linux 2.4.27 rm include/linux/loop.h drivers/block/loop.c 补丁- Np1 - i../loop-AES-v2.2b/kernel-2.4.27.diff
设定键盘地图:
dumpkeys | loadkeys - m - > drivers/char/defkeymap.c
其次, 配置您的仁; 确定以下选择被设置:
做menuconfig 块设备---> < * > 回送设备支持[ * ] AES 被编成密码的圈设备支持(新) < * > 随机存取存储磁盘支持(4096) 缺省随机存取存储磁盘大小(新) [ * ] 最初的随机存取存储磁盘(initrd) 支持文件系统---> < * > Ext3 日志文件系统支持< * >
其次延长的fs 支持(注意事项: 不要使能/dev 文件系统支持)
编写仁和安装它:
做dep bzImage 做模块modules_install cp arch/i386/boot/bzImage /boot/vmlinuz
如果幼虫是您的bootloader, 更新/boot/grub/menu.lst 或/boot/grub/grub.conf:
猫> /boot/grub/menu.lst < < EOF 缺省0 个暂停10 颜色green/black 光green/black 标题Linux 根(hd0,2) 仁/boot/vmlinuz ro root=/dev/hda3 EOF
否则, 更新/etc/lilo.conf 和跑的lilo:
猫> /etc/lilo.conf < < EOF lba32 boot=/dev/hda 及时timeout=100 image=/boot/vmlinuz label=Linux 只读root=/dev/hda3 EOF lilo
您可以现在重新开始系统。
安装Linux 2.6.8.1
如所描述改为进行在早先部分, 使用 圈aes' 仁2.6.8.1.diff 补丁。注意模块支持要求您安排模块init 工具包裹被安装。
安装util Linux 2.12b
losetup 节目, 是util Linux 包裹的一部分, 必须被修补和recompiled 为了增加强的密码学支持。下载, 打开和修补util Linux:
wget http://ftp.kernel.org/pub/linux/utils/util linux/util
Linux 2.12b.tar.bz2 沥青- xvjf util Linux 2.12b.tar.bz2 光盘util
Linux 2.12b 补丁- Np1 - i../loop AES v2.2b/util Linux 2.12c.diff
使用20 个字符是少于的密码, 进入:
CFLAGS="-o2 - DLOOP_PASSWORD_MIN_LENGTH=8 "; 出口CFLAGS
安全大概是您的主要关心的当中一个。因此, 请不要使能密码突然比20 个字符。数据保密性不是自由的, 你必须' 支付' 以长的密码的形式。
编写losetup 和安装它作为根:
/configure && 做解放登上mv - f /sbin/losetup /sbin/losetup~ rm - f /usr/share/man/man8/losetup.8 * 光盘登上gzip losetup.8 cp losetup /sbin cp losetup.8.gz /usr/share/man/man8/
创造被编成密码的根filesystem
用任意数据填装目标分开:
细片- n 1 - v /dev/hda2
设定被编成密码的回送设备:
losetup - e aes256 - S xxxxxx /dev/loop0 /dev/hda2
防止优选了字典攻击, 它被推荐增加- S xxxxxx 选择, "xxxxxx" 是您的任意地选上的种子(例如, 您也许选择"gPk4lA") 。并且, 为了避免有键盘的起动时间问题映射, 不要使用non-ASCII 字符(口音, 等。) 在您的密码。 Diceware 站点提供一个简单的方式创造强, 容易记住, passphrases 。
现在创造ext3 filesystem:
mke2fs - j /dev/loop0
检查您输入的密码是正确的:
losetup - d /dev/loop0 losetup - e aes256 - S xxxxxx /dev/loop0 /dev/hda2
mkdir /mnt/efs 登上/dev/loop0 /mnt/efs
您能比较被编成密码的和unencrypted 数据:
xxd /dev/hda2 | 较少xxd /dev/loop0 | 较少
是时间安装您的被编成密码的Linux 系统。如果您使用GNU/Linux 发行(譬如Debian 、Slackware 、Gentoo 、Mandrake 、RedHat/Fedora 、SuSE, 等), 跑以下命令:
cp - avx//mnt/efs
如果您使用Linux 从头书, 如所描述进行在指南, 以修改如下:
章节6 - 安装util Linux:
应用圈AES 补丁在打开来源以后。
章节8 - 使LFS 系统可起动:
参见下个部分(设定起动设备) 。
设定起动设备
创造ramdisk
开始与, chroot 在被编成密码的分开里面和创造起动设备登上点:
chroot /mnt/efs mkdir /loader
然后, 创造最初的ramdisk (initrd), 之后必要:
光盘dd if=/dev/zero of=initrd bs=1k count=4096 mke2fs -
F initrd mkdir ramdisk 登上- o 圈initrd ramdisk
如果您使用grsecurity, 您可以收到"允许被否认的" 错误信息; 您在这种情况下将必须跑登上命令在chroot 之外。
创造filesystem 阶层和复制必需的文件在它:
mkdir ramdisk/{bin, dev, 解放、mnt 、sbin} cp /bin/{bash, 登上} ramdisk/bin/ ln - s 打击ramdisk/bin/sh mknod - m 600 ramdisk/dev/console c 5 1 mknod - m 600 ramdisk/dev/hda2 b 3 2 mknod - m 600 ramdisk/dev/loop0 b 7 0 cp /lib/{ld-linux.so.2, libc.so.6, libdl.so.2} ramdisk/lib/ cp /lib/{libncurses.so.5, libtermcap.so.2} ramdisk/lib/ cp /sbin/{losetup, pivot_root} ramdisk/sbin/
它是好如果您看一则消息象"/lib/libncurses.so.5: 没有这样的文件或目录", 或"/lib/libtermcap.so.2: 没有这样的文件或目录"; 打击只要求这两个图书馆的当中一个。您能检查哪个实际上要求与:
ldd /bin/bash
编写睡眠节目, 将防止密码提示由仁消息被充斥(譬如usb 设备登记) 。
猫> sleep.c < < "EOF" # 包括< unistd.h > # 包括< stdlib.h > 内部main(内部argc, 炭灰* argv[ ]) {if(argc == 2) sleep(atoi(argv[1 ])); return(0); } EOF gcc - s sleep.c - o ramdisk/bin/sleep rm sleep.c
创造init 剧本(不要忘记用您选上的种子替换"xxxxxx"):
猫> ramdisk/sbin/init < < "EOF" #!/bin/sh /bin/sleep 3 /sbin/losetup - e aes256 - S xxxxxx /dev/loop0 /dev/hda2 /bin/mount - r - n - t ext3 /dev/loop0 /mnt 当[ $? - ne 0 ] 做/sbin/losetup - d
/dev/loop0 /sbin/losetup - e aes256 - S xxxxxx /dev/loop0 /dev/hda2 /bin/mount - r - n - t ext3 /dev/loop0 /mnt 做的光盘/mnt /sbin/pivot_root 。装载者exec /usr/sbin/chroot 。/sbin/init EOF chmod 755 ramdisk/sbin/init
Umount 回送设备和压缩initrd:
umount - d ramdisk rmdir ramdisk gzip initrd mv initrd.gz /boot/
孕穗从CD-ROM
我强烈劝告您开始您的系统与只读媒介, 譬如可起动的CD-ROM 。
下载和打开syslinux:
wget http://ftp.kernel.org/pub/linux/ ... slinux-2.10.tar.bz2
沥青- xvjf syslinux-2.10.tar.bz2
配置isolinux:
mkdir bootcd cp /boot/{vmlinuz, initrd.gz} syslinux-2.10/isolinux.bin bootcd echo "缺省/vmlinuz initrd=initrd.gz ro root=/dev/ram0" \ > bootcd/isolinux.cfg
创造和烧可起动的光盘rom iso 图象:
mkisofs - o bootcd.iso - b isolinux.bin - c boot.cat \ - 没有emul 起动- 起动装载大小4 - 起动信息桌\ - J - 掩藏rr 被移动的- R bootcd/ cdrecord - dev 0,0,0 - 速度4 - v bootcd.iso rm - rf bootcd{.iso}
孕穗从HD 分开
引导分区可能进来得心应手如果您偶然丢失您可起动的CD 。 记得, hda1 是可写媒介和因而不安全; 使用它只紧急情况下!
创造和登上ext2 filesystem:
dd if=/dev/zero of=/dev/hda1 bs=8192 mke2fs /dev/hda1 登上/dev/hda1 /loader
复制仁和最初的ramdisk:
cp /boot/{vmlinuz, initrd.gz} /loader
如果您使用幼虫:
mkdir /loader/boot cp - av /boot/grub /loader/boot/ 猫> /loader/boot/grub/menu.lst < < EOF 缺省0 暂停10 颜色green/black 光green/black 标题Linux 根(hd0,0) 仁/vmlinuz ro root=/dev/ram0 initrd /initrd.gz EOF 除草根安装-- 根directory=/loader /dev/hda umount /loader
如果您使用lilo:
mkdir /loader/{boot, dev, 等} cp /boot/boot.b /loader/boot/ mknod - m 600 /loader/dev/hda b 3 0 mknod - m 600 /loader/dev/hda1 b 3 1 mknod - m 600 /loader/dev/ram0 b 1 0 猫> /loader/etc/lilo.conf < < EOF lba32 boot=/dev/hda 及时timeout=100 image=/vmlinuz label=Linux initrd=/initrd.gz 只读root=/dev/ram0 EOF
lilo - r /loader umount /loader
最后的步
仍然里面chroot, 修改/etc/fstab 以便它包含:
/dev/loop0/ext3 默认0 1
去除/etc/mtab 和从chroot 退出。终于, 奔跑"umount - d /mnt/efs" 和reboot 。如果某事变错误, 您能仍然解雇您的unencrypted 分开由进入"Linux root=/dev/hda3" 在LILO: 提示。
如果一切很好去, 您现在能分配您的盘和编成密码hda3 并且hda4 。在以下剧本, 我们假设, hda3 将拿着交换设备并且hda4 将包含/home; 您应该首先初始化两分开:
细片- n 1 - v /dev/hda3 细片- n 1 - v /dev/hda4 losetup - e aes256 - S xxxxxx /dev/loop1 /dev/hda3 losetup - e aes256 - S xxxxxx /dev/loop2 /dev/hda4 mkswap /dev/loop1 mke2fs - j /dev/loop2
然后创造一个剧本在系统起动目录和更新fstab:
猫> /etc/init.d/loop < < "EOF" #!/bin/sh 如果[ "`/usr/bin/md5sum /dev/hda1`"! = \ "5671.cebdb3bed87c3b3c345f0101d016 /dev/hda1" ] 然后echo - n "警告! hda1 正直证明失败了- 按进入。" 读fi echo "第1 个密码被选择上面" | \ /sbin/losetup - p 0 - e aes256 - S xxxxxx /dev/loop1 /dev/hda3 echo "第2 个密码被选择上面" | \ /sbin/losetup - p 0 - e aes256 - S xxxxxx /dev/loop2 /dev/hda4 /sbin/swapon /dev/loop1 为i 在` 顺序0 63` echo - n - e "\33[10;10]\33[11;10 ]" > /dev/tty$i 完成EOF chmod 700 /etc/init.d/loop ln - s../init.d/loop /etc/rcS.d/S00loop vi /etc/fstab... /dev/loop2 /home ext3 默认0 2
关于这HOWTO
被编成密码的根Filesystem HOWTO 是第一被写在2002 年11月为 Linux 从头 项目。我希望感谢的许多人民后来帮助我改进这个文件(在反向按年代顺序): Luc Vo 范, Jacobus 边缘, Ernesto P?z Est?z, 马修?Ploessel, 麦克?Lorek, Lars Bungum, 迈克尔盾, Julien Perrot, 格兰特?Stephenson, Cary W. Gilmer, 詹姆斯?Howells, Pedro Baez, Josh Purinton, Jari Ruusu 和Zibeli Aton 。
这HOWTO 被翻译了以各种各样的语言:
法语
意大利语
匈牙利语
请寄发任何意见到 Christophe Devine。 |
|