cryptsetup – 分区加密工具
cryptsetup是linux下的一个分区加密工具,和之前介绍过的eCryptfs不同的是:eCryptfs是文件系统级别的加密,而cryptsetup是分区级别的,比文件系统级别工作在更底层的位置,是在经过加密的块设备上,再创建文件系统,再挂载使用。这应该是纯软件能达到的最底层的加密了吧。
我折腾这玩意,是因为上篇文章说到,我要把/home的数据备份到另一个硬盘,而那个硬盘的物理安全性并不能得到充分地保证,所以只有通过加密来确保数据的安全了。如果当年陈老师也用这玩意的话,想必不会捅出这么大的篓子,呵呵。
废话不说,简单说说安装和使用的方法。
如果你是用ubuntu这类发行版的话,安装部分就很简单了,基本就是直接安装cryptsetup这个包,就完事了。
但是如果你和我一样也是用自己编译内核的发行版,比如gentoo的话,使用中可能会出现以下错误:
/proc/misc: No entry for device-mapper found
Is device-mapper driver missing from kernel?
Failure to communicate with kernel device-mapper driver.
Cannot initialize device-mapper. Is dm_mod kernel module loaded?
Command failed with code 22: Cannot initialize device-mapper. Is dm_mod kernel module loaded?
这时候你不要急着去安装 device-mapper ,因为现在 device-mapper 已经并入到更强大的 lvm2 里面了,所以你要确保装了 lvm2 和在内核选项里选择了CONFIG_DM_CRYPT,如下:
-> Device Drivers -> Multiple devices driver support -> Device mapper support -> Crypt target support |
另外,还建议选取大文件支持的CONFIG_LBDAF和CONFIG_CRYPTO_AES两个内核选项,我这边不选取前者,会无法打开加密分区(虽然说LBDAF是2T+的单文件支持,而我的硬盘一共只有80G);后者是一个内核里的加密算法API,我们就用这个算法来加密(也可以用其他的算法)。
说说怎么使用:
建立一个加密的分区,很简单,执行下面的命令:
sudo cryptsetup --verbose --verify-passphrase -c aes-cbc-plain luksFormat /dev/sdb1 |
我的外接硬盘在 /dev/sdb1 ,因为这个命令会摧毁这个分区的所有数据,所以程序会让你确认,输入大写的YES,回车,就会让你输入两次密码,输完就搞定了。
话外音:其实cryptsetup不仅支持用密码加密,还支持用文件来加密,可以是任意类型的文件,不过解密的时候,要确保文件一个字节都不差,用这个特性可以方便地构建解密U盘。
好了,加密完分区以后,要使用的话,可以这样:
sudo cryptsetup luksOpen /dev/sdb1 back |
其中最后的“back”,可以是任意字符串,程序会提示输入之前设置的密码,输对密码以后,文件系统里就会多出一个 /dev/mapper/back ,接下来就可以像使用 /dev/sdXX 一样地使用这个 /dev/mapper/back 了。
比如,建立一个ext4文件系统,挂载,复制文件之类:
sudo mkfs.ext4 /dev/mapper/back sudo mount /dev/mapper/back /mnt/back/ sudo cp XXX /mnt/back/ .... |
使用完以后,可以这样显式地关闭加密分区:
sudo cryptsetup luksClose /dev/mapper/back |
看看如果别人偷你加密后的硬盘,想挂载看你的艳照时,会怎么样?哈哈:
$ sudo mount /dev/sdb1 /mnt/back/ mount: unknown filesystem type 'crypto_LUKS' |
PS: 现在ubuntu的易用性确实越来越好了,ubuntu里插入加密的硬盘后会自动判断,并直接弹出输入密码的窗口,输完自动挂载分区。
delectate 在 2010年06月26日 18:14 说:【 】
ubuntu非常适合不喜欢折腾的linux用户,很多东西已经做得很出色了。
vzomik 在 2010年06月26日 18:39 说:【 】
呃,那个,有没有加密文件夹的?就是双击文件夹的时候弹出对话框,输入正确的密码才能打开那种~
bones7456 在 2010年06月26日 18:53 说:【 】
那你不如打成rar或者7z的包好了,加个密码就是了。
丕子 在 2010年06月26日 22:33 说:【 】
很安全 不怕被盗用文件了
Blackdream1890 在 2010年06月26日 22:59 说:【 】
其实暴力破解也是可行的,看密码强弱性。
bones7456 在 2010年06月26日 23:17 说:【 】
你硬要说行就行吧,反正暴力破解理论上能解开一切加密,只是时间长短问题嘛~
Blackdream1890 在 2010年06月26日 23:36 说:【 】
也是。时间长短。但是ecryptfs随机生成的口令则不同了。“时间长短”的短字可以去掉。绝对够长。
Blackdream1890 在 2010年06月26日 23:50 说:【 】
顺便说一句,你文章开头所说的“系统级别”和“分区级别”的加密,表达没有错误,但是安全性来说,ecryptfs明显要比这个”分区级别“的加密要安全得多。因为ecryptfs除了需要login passphrase(人为输入的口令),还有一个可由系统随机生成的mount passphrase。基本上~/.ecryptfs/wrapped-passphrase丢失的话,恢复数据是不可能的事情。
嗯。说了很多废话,希望博主不要见怪。
Blackdream1890 在 2010年06月27日 00:01 说:【 】
反过来说。别人没有你的~/.ecryptfs/wrapped-passphrase。(当时系统随机生成的mount passphrase)。即使他知道了你的login passphrase,也绝对碰不到你的任何加密数据
bones7456 在 2010年06月27日 09:05 说:【 】
我没有去研究过算法的代码,所以并没有对两者的安全做出评价。而且安全性往往是和易用性成反比的,好比你说的这个eCryptfs的算法,有个mount passphrase确实更安全,但是在我的理解里,像我这种备份的应用,这个mount passphrase是存在主硬盘里的,而当主硬盘丢失或者损坏的话,mount passphrase也就丢了。这时候你想从备份盘里恢复数据,估计就要傻眼了。。。
oceanboo 在 2010年06月28日 09:42 说:【 】
有点意思。
muxueqz 在 2010年06月28日 10:29 说:【 】
强烈要求骨头兄曝光艳照!
weakish 在 2010年06月30日 17:18 说:【 】
ecryptfs的话,你可以把~/.ecryptfs/wrapped-passphrase备份到安全的地方,或者把unwrapped-passphrase背下来(比较考验记忆力哦)
不过cryptsetup完全可以和ecryptfs一样安全的。归根到底,就是一个长密码而已。ecryptfs其实就是把一个随机生成的长密码用login passwd再加密成~/.ecryptfs/wrapped-passphrase而已。登录的时候靠login passwd解密wrapped-passphrase成mount passphrase,再用mount passphrase解密文件系统而已。
cryptsetup完全也可以设一个长密码。也完全可以通过手动添加启动服务的方式,用login passwd来wrap这个长密码,实现登录时自动解密、挂载的。
还有,其实仅仅作加密备份的话,duplicity(可以说是带加密的rsync)比较好用: http://www.nongnu.org/duplicity/
顺便提一下,陈老师不用搞cryptsetup,因为陈老师用的水果本,可以直接在系统设置》安全里选择加密整个家目录(原理和ecryptfs类似,把家目录放到一个加密卷里,login时自动解密mount)。只能说陈老师太不小心了。
iSingle 在 2010年07月09日 19:25 说:【 】
这个和TrueCrypt有啥不一样?我一直使用keepassX和TrueCrypt搭配,使用Dropbox同步keepassx的密码数据库,个人感觉很安全,因为连我自己都不知道密码是什么……
另外,对于插入加密盘能够自动弹出密码这个功能很好奇,可惜TrueCrypt没有
凡尘飞扬 在 2010年11月04日 18:37 说:【 】
看上去就是key+pwd的双验证方式进行加解密的。文件系统级的加密?我理解是设备级的,直接加密不知道是不是key丢失的话就可能连设备都无法发现了,就类似于Nokia的手机对TF卡加密,直接加密底层的设备,任何host必须得要支持对底层设备加解密才能够发现设备,然后才能进行权限呢,只不过这个是双验证。不过话说回来,这样真的不适合加密备份用,危险系数太高了!除非是不太重要的特高级别的机密数据(貌似没有这种啊)。