I wanted a small encrypted part of my hard disk, and I found http://www.debian-administration.org/articles/469 (which uses LVM as an example, which was a bit of a pain, as I'm not using LVM), and http://www.saout.de/ (which doesn't use LVM, but skips a few details at the end) both to be very useful.

Both articles are far better than this, at explaining why you do each step; I just didn't find the actual syntax required to be so very clear. This article aims to fill the gap.

It took a while to sort out the exact syntax necessary to get it running on boot. So here it is:

Partition to be encrypted/dev/sda8
Mountpoint/crypto


1 (Optional): Wipe out the current contents:

# dd if=/dev/urandom of=/dev/sda8

2: Create encrypted partition

Replace the "passphrase_goes_here" with the passphrase you'll enter every time you want to mount the filesystem (on boot, or afterwards).

# cryptsetup luksFormat /dev/sda8

WARNING!
========
This will overwrite data on /dev/sda8 irrevocably.

Are you sure? (Type uppercase yes): YES
Enter LUKS passphrase: passphrase_goes_here
Verify passphrase: passphrase_goes_here
Command successful.
# cryptsetup luksOpen /dev/sda8 crypto
Enter LUKS passphrase: passphrase_goes_here
key slot 0 unlocked.
Command successful.

You have made an encrypted partition, known as /dev/mapper/crypto (instead of /dev/sda8, which is now useless to the normal tools - mount /dev/sda8, for example, will no longer work.)

3: Create a filesytem

# mkfs.ext3 /dev/mapper/crypto
mke2fs 1.40.2 (12-Jul-2007)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
973440 inodes, 1945736 blocks
97286 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=1996488704
60 block groups
32768 blocks per group, 32768 fragments per group
16224 inodes per group
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632

Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 34 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

4: Set it to mount on boot

You'll need an entry in /etc/crypttab, and also in /etc/fstab:

# echo "crypto /dev/sda8 none luks,check=ext2,retry=1" >> /etc/crypttab
# echo "/dev/mapper/crypto /crypto ext3 defaults 1 2" >> /etc/fstab
# mkdir /crypto

... you'll also need to remove (or comment-out) any existing /dev/sda8 entries in /etc/fstab

5: Configure initramfs

I'm not sure if this is needed; for a non-root filesystem, I doubt it.

# update-initramfs -u -k all
update-initramfs: Generating /boot/initrd.img-2.6.22-2-686
update-initramfs: Generating /boot/initrd.img-2.6.18-5-686

6: Use it!

You should be prompted for the passphrase when the system boots - just before it mounts the filesystems. If you enter the right one, it will mount it; otherwise, the encrypted filesystem will not be mounted.

If you later want to mount it, then you can do this:

# cryptsetup luksOpen /dev/sda8 crypto
Enter LUKS passphrase: passphrase_goes_here
key slot 0 unlocked.
Command successful.
# mount /dev/mapper/crypto /crypto

Or you can unmount it, and make it so that it can't be remounted (without the passphrase), like this:

# umount /crypto
# cryptsetup luksClose crypto

This can all be embodied into a wrapper script:

#!/bin/sh

case $1 in
  start)
	cryptsetup luksOpen /dev/sda8 crypto
	echo "Mounting /crytpo..."
	mount /dev/mapper/crypto /crypto
	;;
  stop)
	echo "Unmounting /crytpo..."
	umount /crypto
	cryptsetup luksClose crypto
	;;
  *)
	echo "Usage: crypt [ start | stop ]"
	;;
esac
Linux Encrypted Filesystems with LUKS
Share on Twitter Share on Facebook Share on LinkedIn Share on Identi.ca Share on StumbleUpon

Want to take the tutorial with you?

My Shell Scripting Book:
    Shell Scripting, Expert Recipes for Linux, Bash and more
is available online and from all good booksellers.

Buy my 564-page Shell Scripting Book...

From Amazon USA:

From Amazon UK:

For Kindle:

Or From other retailers

You can also find the book, and join a shell scripting community, on Facebook:


Option Two: Buy the 70-page PDF (£4.99/$9.99/€6.99)
(Free Sample)

And you can always Download my Free Shell Scripting Cheatsheet PDF