Copied from https://www.golinuxcloud.com/mount-luks-encrypted-disk-partition-linux/
The entire block device can be encrypted using LUKS; it's well suited for protecting the data on removable storage media or the laptop disk drives LUKS Disk Encryption uses the existing device mapper kernel subsystem It also provides passphrase strengthening, which helps protect against dictionary attacks ALSO READ: Understanding LUKS Disk Encryption and comparison with dm-crypt and cryptsetup
IMPORTANT NOTE: If you perform this activity without using encrypt key then the reboot will halt with a user prompt asking for LUKS passphrase to mount the LUKS device. Alternatively you can also configure Network Bound Disk Encryption wherein the client will get this key from tang server to auto mount LUKS device. Add below entry to your /etc/fstab
/dev/mapper/secret /secret ext4 defaults 0 0
Next add below entry to /etc/crypttab. Here we are providing the LUKS device name, the mapped partition and the key file location. But since at this stage we have not created any key file, we will put it as none.
secret /dev/sdb1 none
Next reboot the node and check if the reboot halts waiting for LUKS passphrase to mount the encrypted device
Mount LUKS device using fstab with key (No prompt for LUKS passphrase) LUKS Disk Encryption can use up to 8 key slots to store passwords. We can use these keys to auto mount LUKS device.
[root@node1 ~]# cryptsetup luksDump /dev/sdb1
LUKS header information for /dev/sdb1
Version: 1
Cipher name: aes
Cipher mode: xts-plain64
Hash spec: sha256
Payload offset: 4096
MK bits: 256
MK digest: 4f 28 47 d0 91 cd 30 1f c0 78 73 b9 0e 83 cd d6 77 99 bf c8
MK salt: dc 91 2a 87 49 44 a9 2a 75 f7 f4 18 ee 39 54 e2
2f 72 e0 21 ba 07 59 84 75 58 c6 a9 ad 7e 43 ae
MK iterations: 19006
UUID: 1da14492-aec4-4924-905d-e5aa28cbcff4
Key Slot 0: ENABLED
Iterations: 296206
Salt: 06 af 5b fc 27 a3 3c 84 02 d8 1e 89 ec fc c9 15
d8 c4 5e 3c 58 9b 92 0a e3 e5 48 5d 6b da cf 65
Key material offset: 8
AF stripes: 4000
Key Slot 1: DISABLED
Key Slot 2: DISABLED
Key Slot 3: DISABLED
Key Slot 4: DISABLED
Key Slot 5: DISABLED
Key Slot 6: DISABLED
Key Slot 7: DISABLED
To add a new encrypt key to auto mount LUKS device use the below command.
[root@node1 ~]# cryptsetup luksAddKey /dev/sdb1
Enter any existing passphrase:
Enter new passphrase for key slot:
Verify passphrase:
Next verify the key slots again
[root@node1 ~]# cryptsetup luksDump /dev/sdb1
LUKS header information for /dev/sdb1
Version: 1
Cipher name: aes
Cipher mode: xts-plain64
Hash spec: sha256
Payload offset: 4096
MK bits: 256
MK digest: 4f 28 47 d0 91 cd 30 1f c0 78 73 b9 0e 83 cd d6 77 99 bf c8
MK salt: dc 91 2a 87 49 44 a9 2a 75 f7 f4 18 ee 39 54 e2
2f 72 e0 21 ba 07 59 84 75 58 c6 a9 ad 7e 43 ae
MK iterations: 19006
UUID: 1da14492-aec4-4924-905d-e5aa28cbcff4
Key Slot 0: ENABLED
Iterations: 296206
Salt: 06 af 5b fc 27 a3 3c 84 02 d8 1e 89 ec fc c9 15
d8 c4 5e 3c 58 9b 92 0a e3 e5 48 5d 6b da cf 65
Key material offset: 8
AF stripes: 4000
Key Slot 1: ENABLED
Iterations: 729190
Salt: 3b a3 55 c0 5a d6 d0 0f 26 84 84 c4 a7 d1 83 23
9c 2d 6d ea 9f 76 83 04 36 8b d4 d6 19 07 ba 10
Key material offset: 264
AF stripes: 4000
Key Slot 2: DISABLED
Key Slot 3: DISABLED
Key Slot 4: DISABLED
Key Slot 5: DISABLED
Key Slot 6: DISABLED
Key Slot 7: DISABLED
As you see now we have one more key slot added and is enabled. We will use this key to auto mount LUKS device.
NOTE: To remove a key slot you can use "cryptsetup luksRemoveKey /dev/device" where the device or partition will be /dev/sdb1 for our demo. Now let us create a key file which will be used to get the LUKS passphrase while booting the system. So at the reboot stage the system will not halt asking for passphrase and will get the key to auto mount LUKS device from this key file and continue to boot without password.
To create a key file execute the below command. Here my key file "lukskey" will be available under /root
[root@node1 ~]# dd if=/dev/random bs=32 count=1 of=/root/lukskey
1+0 records in
1+0 records out
32 bytes (32 B) copied, 0.000294018 s, 109 kB/s
To check the content of the lukskey file use xxd. As you see it is filled with random data.
[root@node1 ~]# xxd /root/lukskey
0000000: cd37 d965 8eb6 e1cd b009 467f 524b bf8e .7.e......F.RK..
0000010: 5a53 7250 19c0 78b5 6d68 3f9c c8b6 6bf9 ZSrP..x.mh?...k.
Now let us add this key to our LUKS device
[root@node1 ~]# cryptsetup luksAddKey /dev/sdb1 /root/lukskey
Enter any existing passphrase:
Verify the new keyslot. Now we have a new keyslot enabled.
[root@node1 ~]# cryptsetup luksDump /dev/sdb1
LUKS header information for /dev/sdb1
Version: 1
Cipher name: aes
Cipher mode: xts-plain64
Hash spec: sha256
Payload offset: 4096
MK bits: 256
MK digest: 4f 28 47 d0 91 cd 30 1f c0 78 73 b9 0e 83 cd d6 77 99 bf c8
MK salt: dc 91 2a 87 49 44 a9 2a 75 f7 f4 18 ee 39 54 e2
2f 72 e0 21 ba 07 59 84 75 58 c6 a9 ad 7e 43 ae
MK iterations: 19006
UUID: 1da14492-aec4-4924-905d-e5aa28cbcff4
Key Slot 0: ENABLED
Iterations: 296206
Salt: 06 af 5b fc 27 a3 3c 84 02 d8 1e 89 ec fc c9 15
d8 c4 5e 3c 58 9b 92 0a e3 e5 48 5d 6b da cf 65
Key material offset: 8
AF stripes: 4000
Key Slot 1: ENABLED
Iterations: 729190
Salt: 3b a3 55 c0 5a d6 d0 0f 26 84 84 c4 a7 d1 83 23
9c 2d 6d ea 9f 76 83 04 36 8b d4 d6 19 07 ba 10
Key material offset: 264
AF stripes: 4000
Key Slot 2: ENABLED
Iterations: 683556
Salt: 1a 13 aa 01 e1 c2 71 33 29 5f ae fc 25 71 2e c8
9f 9f 85 df 4b 80 61 4d 8d 52 35 7c 66 0a d0 af
Key material offset: 520
AF stripes: 4000
Key Slot 3: DISABLED
Key Slot 4: DISABLED
Key Slot 5: DISABLED
Key Slot 6: DISABLED
Key Slot 7: DISABLED
Next modify your crypttab and provide the keyfile details to make sure system does not halts asking for passphrase of luks device.
[root@node1 ~]# vim /etc/crypttab
secret /dev/sdb1 /root/lukskey
Next reboot your node
[root@node1 ~]# reboot
I am sure this time your system should come up automatically without prompting for any passphrase to mount the LUKS encrypted partition.
[root@node1 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 25G 3.8G 20G 16% /
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 9.2M 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/sda1 488M 134M 319M 30% /boot
/dev/mapper/secret 4.8G 20M 4.6G 1% /secret
tmpfs 379M 8.0K 379M 1% /run/user/42
tmpfs 379M 0 379M 0% /run/user/0