分类: LINUX
2008-04-29 16:42:34
在另一篇文章“实现加密的home目录”中,我描写了如何透明地加密home目录,本文叙述另一个技术实现--加密的root文件系统,我论述了GNU/Linux启动过程和软件需求,并提供了一些指令,对Open Firmware做了一下介绍,以及其他一些有关的考虑事项。我用于教学的系统是一台基于PowerPC架构的新世界苹果iBOOK电脑,运行Fedora Core 3预览版,不考虑细节,本文涉及到的概念和程序可以应用到任何设备、架构或操作系统。我提供的指令假设你有一个多余的USB闪存盘并且你系统的支持从USB设备启动。
同时,我还假设读者能轻松应用源代码补丁并编译程序,对于Fedora Core 3 Test 3版本,mkinitrd和启动脚本软件包需要打补丁以支持加密的root文件系统,需要掌握基本的分区管理和创建文件系统的知识,执行一个基本的Linux发行版安装超出了本文要求的范畴。
在呈现有关的技术步骤之前,一个高层概念必须先讨论:信任。信任与加密技术和认证总是纠缠在一起的,对任何有电子密钥的设备都可以假设它是可信任的。例如:当自动提款机(ATM)与我的银行账号共用个人识别号(PIN)时,我会信任ATM不会将我的PIN与不适当的第三方进行共享。同样,当我给我的计算机提供一个加密密钥时,我假设这个密钥不会与任何其他人进行共享,我会信任这台计算机在我们之间保守秘密。
那么,你能信任你的计算机吗?除非你无论到哪里都带着它,否则你真的不能信任它,即使磁盘已经经过加密处理也不行。设想这样一个情景:在你睡觉时,有人偷走了你的计算机,小偷将计算机中加密的内容做了一份拷贝,虽然没有加密密钥而对他来说毫无意义,但是他可以用更恶魔的内容替换笔记本电脑加密的内容,然后再将电脑放回去,当你第二天醒来时,计算机提示你输入加密密码,但是这时你提供的密钥会传输给小偷,他得到密钥后就有一份数据和密钥的拷贝了,他就可以读取你的文件了。
这个情景可能显得比较牵强,但是它说明了一点,你不能信任你的笔记本电脑,始终保持你的眼睛你离开它很重要,因此,无论如何优秀地实现你的加密系统,要建立在信任的基础前提条件下才行。
网络确保我们可以信任计算机的启动过程,我们需要将其从计算机中分隔出来,考虑这个问题:你携带你的汽车钥匙而不是携带你的汽车。你的密钥自身概念上与你的汽车钥匙一样。你可以更容易地保护你的密钥,因此你不用随时随地都携带上你的计算机,我们将用这个密钥提供启动计算机需要的软件,闪存盘将充当密钥的角色,通过保护启动系统最初的软件,除加密密钥外,我们可以有效地降低启动过程被劫持的风险。
你需要连接你的计算机是如何启动的,因为解锁一个加密的root文件系统是对整体的引导过程有影响,目前稳定的内核版本是2.6,可选择使用initramfs来帮助启动,在lwn.net上有一篇文档“initramfs来了”, initramfs是一个cipo归档,内核知道如何解压到基于RAM的磁盘上,这个解压的文件系统包括一个传统的载入内核挂载root文件系统的模块的脚本,在我们的样例中,这个脚本也用于解锁加密的root文件系统,关于这个主题更多的信息可以在文件buffer-format.txt和initrd.txt中找到,这两个文件都在Linux内核源代码发布包中。
对Linux有若干个文件系统加密接口是可用的,Jari Ruusu的Loop-AES就是这样一个项目,有多个cryptoloop变种提供一个加密的loopback设备,本文集中讲述最近2.6Linux内核提供的dm-crypt接口,这个接口目前已经被Fedora项目吸收,dm-crypt模块由Fedora内核包提供,还需要一个静态链接cryptsetup,这个实用程序简化了dm-crypt设备的管理,最后,还需要parted和hfsutils来管理启动文件系统。
不幸的是,Fedora Core的anaconda安装程序还不支持在盒子外安装加密文件系统,网络绕过这个限制,你必须保留一个空闲分区安装Fedora,格式化空闲分区为一个加密文件系统,然后拷贝原始安装数据到新的加密文件系统上,网络简化,我们假设Fedora已经安装到两个分区上:/dev/hda4,挂载到/home和/dev/hda5,挂载到/,因为/home下还没有用户目录,直到Fedora安装完毕,我们可以使用/dev/hda4作为我们的备用分区,/dev/hda3作为swap分区。
安装Fedroa Core 3,挂载/dev/hda4到/home,/dev/hda5挂载到/,不要添加非root用户,因为/home稍后将被清除干净,至此,你应该拥有一个全功能的Linux系统了。