Skip to content

Scripts to luks encrypt the root partition of a Raspbian installation

Notifications You must be signed in to change notification settings

neilzone/LUKS-Encrypt-Raspberry-Pi-OS-Bullseye

 
 

Repository files navigation

LUKS-Encrypt-Raspberry-Pi-OS-Bullseye

(Testing using Raspberry PI OS, running on a Raspberry Pi 4.)

Preparations

You'll need:

  • a Raspberry Pi
  • a microSD card with the Raspberry Pi OS imaged to it (e.g. via dd or Etcher)
  • a flash drive of at least the same size as the microSD card. This will be wiped as part of the process

1: Update your Raspberry Pi

Create /boot/install:

sudo mkdir -p /boot/install

Download the scripts to /boot/install/:

sudo apt install git -y
git clone https://github.com/neilzone/LUKS-Encrypt-Raspberry-Pi-OS-Bullseye /boot/install/

Run script: sudo bash /boot/install/1.update.sh

This updates your Raspberry Pi OS installation.

When it is finished, execute the following command at the bash console:
sudo reboot
This is needed so the system reboots and loads the new kernel version.

2: Prepare for disk encryption

Log back into your Raspberry Pi, and run script: /boot/install/2.disk_encrypt.sh
This prepares the environment adding new applications to initramfs to make the job easier and prepares the needed files for LUKS.

When it is finished, plug in your USB flash drive.

Then, execute the following command at the bash console:
sudo reboot

When your Raspberry Pi reboots, it will reboot into the initramfs shell. This may take a while.

3: Start the encryption process

In the initramfs shell run the following commands:
mkdir /tmp/boot
mount /dev/mmcblk0p1 /tmp/boot/
/tmp/boot/install/3.disk_encrypt_initramfs.sh

This copies your microSD card to your flash drive. This is because the LUKS encryption process deletes everything when it is encrypting the partition. When the process is completed, the script will copy it back again to the microSD card.

Be patient: this can take a long time.

When LUKS encrypts the root partition it will ask you to type YES (in uppercase). You must use uppercase.

You will be asked to choose a decryption password, and enter it twice.

It will then encrypt your microSD card.

When finished, LUKS will ask for the decryption password again. It unlocks the microSD card, and then copies back the data from the microSD card.

When finished, remove your USB flash drive.

Then, execute the following command at the bash console:
reboot -f

As before, it will boot into the initramfs shell. This is because it cannot unlock your microSD card's encrypted partition, to boot Raspberry Pi OS.

4: Unlock the drive to boot into Raspberry Pi OS

Execute the following commands at the initramfs shell:
mkdir /tmp/boot
mount /dev/mmcblk0p1 /tmp/boot/
/tmp/boot/install/4.luks_open.sh

Type in your decryption password again.

When it drops back to the initramfs prompt, type exit.

The system should resume booting, and will boot into Raspberry Pi OS.

5: Configure so you do not need to boot into initramfs each time

Run script: /boot/install/5.rebuild_initram.sh

This step means you do not need to boot first into initramfs and unlock the drive, before it continues to boot.

6: configure unlocking over SSH

Because you have used LUKS, you need to enter your passphrase to reboot your Raspberry Pi.

You can enable remote unlocking of the microSD card over SSH, before it boots into Raspberry Pi OS.

About

Scripts to luks encrypt the root partition of a Raspbian installation

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Shell 100.0%