日期:2014-05-16  浏览次数:20642 次

基于FreeOTFE的跨平台(Linux和Windows)加密存储方案

这个方案由三部分构成:创建,挂载使用,卸载
创建:
其实在Windows下也完全可以创建,但这里只演示在Linux下的创建操作。
首先需要一个文件,它将在未来被挂载成一个虚拟的磁盘,使用dd来创建它。
dd in=/dev/zero of=/mnt/hda8/volume bs=1M count=1024
这将在/mnt/hda8上创建一个1G大小的文件volume。/mnt/hda8必须是vfat或ntfs格式的磁盘分区,因为Linux和Windows都得能使用这个文件不是。
然后将此文件挂载到块设备/dev/loop7上。
losetup /dev/loop7 /mnt/hda8/volume
这里选了/dev/loop7,只要是一块目前没被占用的loop设备就可以。
然后通过loop7来把volume格式化为可以加密存储。
cryptsetup luksFormat /dev/loop7
这个过程中cryptsetup会要求你确认并输入一个用于生成密钥的密码。
现在对volume的任何操作(包括创建文件系统,这个加密机制比文件系统的层次都低)都会被加解密后再操作。
接下来创建文件系统,因为要跨平台,建议使用fat32文件系统。
cryptsetup luksOpen /dev/loop7 cryptvolume
mkfs.vfat /dev/mapper/cryptvolume
注意第一句的含义,它把loop7当做luks标准的加密设备映射到/dev/mapper/cryptvolume,要使用前面创建的加密服务,必须通过这个mapper来操作。
cryptvolume是随便的一个名字,/dev/mapper/cryptvolume也是cryptsetup自己创建的。
到这里创建的部分就完毕了,现在volume已经成为一个可以用于加密存储的文件了。
挂载使用:
losetup /dev/loop7 /mnt/hda8/volume
cryptsetup luksOpen /dev/loop7 cryptvolume
mkdir /mnt/volume
mount /dev/mapper/cryptvolume /mnt/volume -o umask=0
明白了创建过程,这个就很好懂了。
不过注意最后一步,umask设定为0,则挂载后/mnt/volume的权限是所有用户都wrx;如果不指定umask(让mount使用默认值)则挂载后普通用户只有读取/mnt/volume的权限。
卸载:
就是一个挂载的逆过程。
umount /mnt/volume
cryptsetup luksClose /dev/mapper/cryptvolume
losetup -d /dev/loop7
可以看到,从磁盘文件volume到/mnt/volume,经历很多次的挂载和映射,这些都是不能省略的,几乎每一次都多了一套处理的机制。
而Windows方面,只需要安装FreeOTFE就可以方便地挂载使用volume了。

后记:今日歇了红旗,捣鼓Arch,相当好玩;对于精简至上的Arch,要使用cryptsetup,需要手动modprobe dm_mod,当然,如果你需要经常使用加密的数据,可以把dm_mod写到/etc/rc.conf来自动加载。