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的环境, 必要的操作有下面这几个:

  1. 备份boot, root, home等分区
  2. 建立LVM over LUKS分区环境
  3. 恢复boot, root, home等分区
  4. 修改grub, fstab, crypttab
  5. 重新生成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"