用LUKS/dm-crypt加密块设备
What and How
LUKS是Linux下块设备加密的标准组件, 不同于文件系统级别的eCryptfs等, LUKS更底层, 也更方便.
用LUKS建立加密分区很简单, 只需安装cryptsetup, 然后执行下面的命令按提示设置密码就可以了, 建议不加额外参数, 选用默认的加密算法, 效率不会差太多, 但是更安全.
# cryptsetup luksFormat /dev/sdXY
打开加密分区的命令如下, 验证成功后会在/dev/mapper/下生成名为foo的块设备, 之后建立文件系统, 挂载, 卸载等操作和普通的块设备一致.
# cryptsetup luksOpen /dev/sdXY foo
关闭加密分区也很简单, 先卸载foo, 然后执行下面的命令就是了:
# cryptsetup luksClose /dev/mapper/foo
加密现有Linux系统
基于安全的考虑, 我把笔记本上现有的Linux系统迁移到了LVM over LUKS的环境, 必要的操作有下面这几个:
- 备份boot, root, home等分区
- 建立LVM over LUKS分区环境
- 恢复boot, root, home等分区
- 修改grub, fstab, crypttab
- 重新生成initramfs
因为这些操作都比较危险, 我就不详细说了, 具体可以参考这里和这里.
自动挂载已加密移动硬盘
另外, 我也把移动硬盘加密了, udev的自动挂载规则贴在下面, 依赖pmount, 能够自动弹出终端以便于输入密码验证.
KERNEL!="sd[b-z]*", GOTO="automount_exit"
ACTION=="add", SUBSYSTEM=="block", PROGRAM=="/sbin/blkid -o value -s TYPE %N", RESULT!="crypto_LUKS", RUN+="/bin/su adam -c '/usr/bin/pmount %k'"
ACTION=="add", SUBSYSTEM=="block", PROGRAM=="/sbin/blkid -o value -s TYPE %N", RESULT=="crypto_LUKS", RUN+="/bin/su adam -c '/usr/bin/xterm -display :0.0 -e /usr/bin/pmount %k'"
ACTION=="remove", SUBSYSTEM=="block", RUN+="/bin/su adam -c '/usr/bin/pumount %k'"
LABEL="automount_exit"