Chinaunix首页 | 论坛 | 博客
  • 博客访问: 514379
  • 博文数量: 484
  • 博客积分: 10145
  • 博客等级: 上将
  • 技术积分: 5805
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-27 18:34
文章分类

全部博文(484)

文章存档

2011年(52)

2010年(107)

2009年(287)

2008年(38)

我的朋友

分类: LINUX

2011-09-21 00:45:44


http://bbs.ecust.edu.cn/viewthread.php?tid=262408
LUKS with LVM
作者:wiper

很久很久以前Fedora开始支持在安装过程中对硬盘进行加密,加密方式是LUKS(Linux Unified Key System  好象是,反正大概是这意思),更久更久以前Fedora开始支持LVM(Logical Volume Manager)。在Fedora 12 出来之后,我进行了一次完整安装,用到了LVM,同时也用到了LUKS,不仅仅把整个卷组加密,还把里面的逻辑分区进行了加密(虽然硬盘上没什么秘密,不 过全盘加密毕竟是一个比较新奇的技术,至少对于我来说)。可是在使用的时候发现,安装程序只让我输入一个密钥,就是说所有的加密设备密钥是相同的,这个多 多少少有些不爽,因为这样的话就好比只加密了一个设备。于是乎开始想办法修改LUKS密钥,但是由于LVM的存在走了不少弯路,还好最终成功的实现了,方 法总结起来蛮简单的,在这里分享一下。

之前要说明一下,由于全盘加密对于普通用户来说真的没什么必要,一般人用gpg加密单个文件就足够了。不过由于对技术感兴趣,所以我还是想实现一下。最后的结果就是在Fedora启动的时候依次输入设备的密钥,而不是输入一个通用的全局密钥(所以启动非常的麻烦……)。

说一下要用到的工具:一块用LUKS全盘加密的硬盘(里面有Fedora系统),还要Fedora的安装DVD(我用的是DVD,不过我猜LiveCD也行)。

我的硬盘分区:
sdb1 => /boot  未加密
sdb2 => Volume Group 加密
Volume Group:
Logical Volume 00 => swap 加密
Logical Volume 01 => / 加密
Logical Volume 02 => /home 加密

首先简要说一下Fedora的LUKS相关启动过程。最初grub(或者其它引导器)会在/boot里面加载内核和内存映像,之后准备挂在/、swap和 其它/etc/fstab里面指定的文件系统。当发现某个文件系统是用LUKS加密的,就会首先尝试用全局密钥解密。如果解密失败,或者根本没有全局密 钥,就会打印输入设备密钥的提示。每一次在输入密钥之后,该密钥就会加到全局密钥当中。因为安装程序只能建立一个密钥,所以用户只用输入一次,就可以解开 所有的加密设备。好,那目标就明确了,要为不同的设备指定不同的密钥。

因为安装后的系统被加密了,所以不能用装好的系统启动,只能用DVD启动(或者,也许,没准也能用U盘启动,不过……)。从DVD启动后,选择救援模式, 不需要网络支持,跳过系统识别和挂载,直接进入bash。注意,如果硬盘是usb移动硬盘,在进入bash之前不要连接到电脑上,否则DVD启动的时候总是识别设备(至少我的是这样),进入bash之后在连接,等一会儿在/dev下就会有设备文件了。
首先用luksDump查看sdb2(也就是Volume Group)的LUKS信息:
# cryptsetup luksDump /dev/sdb2
可以看到有这么一行(大概是,记不清了):
slot 0: ENABLED
修改密钥,这个简单。步骤就是添加一个新密钥,之后删除旧密钥。(有些人会有这样奇怪的想法,觉得slot 1 ENABLED但是slot 0是DISABLED有点不爽,总想让密钥在slot 0上,我就是这么认为的……那么可以这样,先添加一个临时密钥,再删掉slot 0,再添加新密钥,最后删掉slot 1)
# cryptsetup luksAddKey /dev/sdb2
输入原密钥,新密钥,并确认,之后在一张黄色的便笺纸上写好“sdb2的密钥:”+你的新密钥,写好之后贴在电脑屏幕上
# cryptsetup luksKillSlot /dev/sdb2 0
输入新密钥
OK,现在Volume Group的密钥改掉了,接下来是难点,怎么修改Logical Volume的密钥?换句话说,怎么挂载Logical Volume?去网上查了一下,是用lvm命令。首先解密sdb2:
# cryptsetup luksOpen /dev/sdb2 vg
输入密钥
查看Logical Volume:
# lvm lvscan
Inactive: /dev/VolGroup/LogVol01
Inactive: /dev/VolGroup/LogVol00
Inactive: /dev/VolGroup/LogVol02
重要,一定要记住这里的顺序,因为经过我的实验发现,Fedora是通过这个顺序挂载的。
启动Logical Volumes:
# lvm lvchange -ay /dev/VolGroup/LogVol01
# lvm lvchange -ay /dev/VolGroup/LogVol00
# lvm lvchange -ay /dev/VolGroup/LogVol02
这里的顺序要和上面显示的一致。
这时,在/dev下会多出几个设备文件:dm-0、dm-1、dm-2、dm-3。其中dm-0对应sdb2,dm-1对应LogVol01,dm-2对 应LogVol00,dm-3对应LogVol02。这个时候就可以修改三个Logical Volume的密钥啦,步骤和上面的一样,密钥修改完之后记在便笺纸上,再把便笺纸贴在电脑屏幕上。如果想看看里面的内容(除了swap之外),可以解密 dm-1和dm-3,之后在/dev/mapper里面找到相应的设备文件,挂载到空目录里面。这里提醒一下,/mnt是非空目录,而且里面的东西很重 要,如果直接挂载到/mnt里面,会提示找不到/usr/bin/ls,以及其它的常用可执行文件和ELF共享库。挂载之后别忘了卸载,同时要卸载 /dev/mapper里面的加密设备,用下面的luksClose命令。
改好之后,先Inactive掉这几个Logical Volumes:
# lvm lvchange -an /dev/VolGroup/LogVol01
# lvm lvchange -an /dev/VolGroup/LogVol00
# lvm lvchange -an /dev/VolGroup/LogVol02
这里的顺序随便,没必要和前面的一致。这时候在/dev里dm-1、dm-2和dm-3都没了,只剩下dm-0。最后卸载dm-0:
# cryptsetup luksClose vg
这里的vg对应一开始建立的名字,在/dev/mapper里面可以看到。/dev/mapper里面最后应该只剩下一个console。

大功告成,用硬盘启动看看效果吧,果然不同的设备需要不同的密钥了,而且加载顺序和lvscan出来的顺序一样。

通过luksDump发现,安装程序的加密算法是AES 128,而且没有用到CBC,如果想用AES 256和CBC,只能在安装之前先手工建立需要的分区,之后进行安装。

不管是用LUKS也好,TrueCrypt(RealCrypt)也好,这样的on the fly加密只能保证硬盘在断电的情况下绝对安全,但是硬盘一旦加电,又输入了正确的密钥进行解密,那么里面的数据就没有一点安全性了,甚至可以被网络中的 其它终端访问到。所以如果有敏感的数据,最好再用gpg对文件进行加密。gpg的对称加密功能蛮强的,支持的算法有AES128、AES192、 AES256、Blowfish,好像还有Twofish。Twofish可是和Rijndael一起进入AES finallist的算法啊,很不错的,虽然最后因为种种原因败给了Rijndael,没能成为AES标准……散列算法支持MD5、SHA1和 SHA128什么的,一般也就用到前两个。
还有就是文件安全删除的问题。虽然Linux里没有对rm命令显式的设置回收站,不过单单通过rm删除的文件是很有可能被恢复的,因为文件数据没有被刷掉。如果想安全删除数据该怎么办呢?在Windows平台上有很多文件粉碎器,大多数都声称符合美国国 防部标准。其实Linux上也有很好的工具,比如srm(secure rm)和wipe什么的。我还是比较习惯srm。Fedora可以直接在yum源中找到(或者可能是在RPMFusion里面),但是CentOS源里面 好像没有,RPMForge里面也没有,所以只能编译源代码。srm基本上和rm的用法一样,也支持递归操作,这一点我很欣赏,毕竟很多文件粉碎器不支持 粉碎目录……srm默认会对要粉碎的文件进行随机数擦写35次,可以在最后用0填充,这样不会被发现使用过srm。同时也支持DoD标准的7次擦写,因为 擦写次数少了,所以速度会大大提升(原来DoD标准也不过如此啊……)。

至此,一个相当安全的Linux环境就做成了,on the fly encryption用LUKS,可以保证移动设备在断电情况下的安全,文件加密用gpg,高强度的可以指定用AES256 + CBC,文件粉碎用srm。

阅读(1489) | 评论(0) | 转发(0) |
0

上一篇:luks ref zz

下一篇:EncryptedFilesystemHowto zz

给主人留下些什么吧!~~