Encrypting (almost) your entire hard drive with dm-crypt (LUKS) and lvm2, Part 1
About five months ago, I wrote about how to convert an existing Linux install from using regular partitioning to encrypted volumes (in particular, an encrypted /home with an unencrypted /). That sort of setup is relatively simple, once you have all the partitioning done. There is no need for any special early userland stuff (an initramfs image). However, that approach only provides a relatively minimal level of security for your data — someone could still root your system.
For those who are a little more paranoid (especially in light of some recent news), the next level of security for your data is to encrypt everything except your /boot partition.
Going to this level, you’re going to be repartitioning pretty much your entire hard disk, so you might be best off just backing up everything (you should do this in any case), and reinstalling your system.
Some recent Linux installers make this sort of setup relatively pain-free. For example, Ubuntu 8.04’s Alternative install disk gives the option of setting up an encrypted LVM volume to install the system on during its guided partitioning wizard. This is a rather easy way have your laptop’s data securely encrypted quickly. However, with this setup, I wasn’t able to get suspend-to-disk support to function properly (though I’m sure it could be done with a little extra effort, I don’t know if most Ubuntu users would be willing to do so).
However, this guide is focused on the crowd of people who use distros that do not make this easy. For myself, I’m installing Exherbo during this guide, but the instructions should be almost exactly the same for Gentoo, or most any other distro.
For this first step, you will need to create two standard disk partitions. The first should be only 32M or so in size — this will be our /boot partition, and should probably be ext2. The second will be the rest of the space you wish to devote to this Linux install (in my case, 10G).
The final layout of everything is going to be like this:
/dev/hda1 - /boot /dev/hda2 - dm-crypt encrypted volume, containing one lvm2 physical volume
/dev/mapper/hda2_crypt - what we get when we run cryptsetup luksOpen on hda2, contains one lvm physical volume, containing the volume group "vg"
/dev/mapper/vg-swap - our swap partition /dev/mapper/vg-root - our root partition
With this layout, all our data that can be encrypted / lvm-ized is. And we only need to enter our disk decryption key once to get to all of it.
In my next few posts, I’ll go into more details about how to set this partition scheme up, how to configure your kernel, and how to create the necessary initramfs image to boot from an encrypted