Jeg har før lavet et “Decrypt og mount script” som automatisk dekrypter og mounter enheder, med et password. Dette script bruger istedet en key fil til at dekryptere med, som ligger på en USB enhed.
Formålet med dette er bla. at mindske risikoen for at nogen kan gætte eller brute force koden. Key filen ligger jeg på en USB enhed, som er krypteret med et kodeord.
Resultatet bliver, at man skal indsætte USB enheden i computeren/serveren, for at dekrypter sin(e) disk(e). Her efter kører man scriptet, skriver koden til USB’en og resten af processen sker automatisk. Nedenstående kan du se hele processen.
- Indsæt USB
- Kør scriptet
- Indtast kode til USB (Resten sker automatisk)
- Partitionen på USB’en bliver dekrypteret og mountet
- Disk(e) bliver dekrypteret med keyfilen på USB’en og mountet
- USB’en bliver unmountet og lukket
- Fjern USB’en
Start med at lave en krypteret partition på USB enheden, med denne guide. Når det er gjort mounter du den et sted. I dette eksempel bruger vi
Kør nu nedenstående kommando for at lave en fil på 2048 bytes, der skal bruges som nøglefil. Læg mærke til at jeg smider filen direkte på USB enheden. Det er for fjerne muligheden for at gendanne filen, hvis den først har lagt på system disken. Kort sagt, man kan ikke gendanne noget der aldrig har været der.
dd bs=512 count=4 if=/dev/urandom of=/mnt/USB/mykeyfile iflag=fullblock
Når key filen er lavet kan du nu kryptere de andre diske, på samme måde som med USB enheden. Dog med en lille ændring. Når
sudo cryptsetup -v luksFormat /dev/sdX /mnt/USB/mykeyfile
sudo cryptsetup --key-file /mnt/USB/mykeyfile luksOpen /dev/sdX DISK1
Hvis du allerede har krypteret din disk med et kodeord, skal key filen tilføjes og kodeordet slettes. Tryk på nedenstående dropdown for at se hvordan.
Tilføj key til Luks partition (Drop down)Kør nedenstående kommando for at tilføje key filen til luks partitionen.
cryptsetup luksAddKey /dev/sdX /mnt/USB/mykeyfile
Når key’en er tilføjet kan du fjerne kodeordet. Efter nedenstående kommando, skriver du kodeordet som skal fjernes.
cryptsetup luksRemoveKey /dev/sdX
Skriv her efter den kode som der skal fjernes.
Til scriptet skal vi bruge uuid’en på USB enheden. Denne kan man se med nedenstående kommando. Find det uuid der peger på den krypterede partition.
ls -l /dev/disk/by-uuid/
Eksempelvis..
lrwxrwxrwx 1 root root 10 nov 26 18:26 1425ff43-e4g7-4f6c-57cb-214bcd175f17 -> ../../sda1
lrwxrwxrwx 1 root root 10 nov 26 18:29 411d005a-fcae-0bd9-ae49-ed21d35d24e1 -> ../../sde1
lrwxrwxrwx 1 root root 10 nov 26 18:29 57ca00f9-f023-4529-8839-571fb7230b55 -> ../../sdf1
Scriptet
Nu til selve scriptet.
Smid USB enheden’s uuid i variablen
Linje 8 – 13 søger for at scriptet kun kan køres med root privilegier.
Linje 15 – 22 er en function som bliver brugt ved Success/Failure output.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
#!/bin/bash clear uuid="e93d17a4-fdc3-4fde-8d14-721a33f872f3" # Checking if user is root. if [ "$(id -u)" != "0" ]; then echo echo "This script must be run as root." 1>&2 echo exit 1 fi ec_zero () { if [ $1 -eq 0 ]; then printf "\033[0;32;148m$2\n\033[39m" else printf "\033[1;31;148m$3\n\033[39m" fi } |
Nedenstående sektion prompter for et kodeord til at dekryptere USB enheden. Efterfølgende tjekker den om mappen
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
if [ ! -L "/dev/disk/by-uuid/$uuid" ]; then echo "### Could not find USB device! ###" exit 2 fi echo echo -n "Please type decryption password for USB device: " read -s -e pass echo echo printf "Decrypting KeyMount.. Please wait. " echo "$pass"|cryptsetup luksOpen /dev/disk/by-uuid/$uuid KeyMount if [ $? -eq 0 ]; then printf "\nMounting KeyMount.. " if [ ! -d "/mnt/KeyMount" ]; then mkdir /mnt/KeyMount fi mount /dev/mapper/KeyMount /mnt/KeyMount if [ $? -eq 0 ]; then printf "\033[0;32;148mSucceeded!\n\033[39m" else printf "\033[1;31;148mCould not mount USB drive.. Quitting!\n\033[39m" exit 4 fi else printf "\033[1;31;148mCould not decrypt USB drive.. Quitting!\n\033[39m" exit 3 fi echo |
Så kommer selve dekryptering af diske med key filen. Nedenstående sektion dekrypter og mounter DISK1. Ændre uuid’en i linje 2 så den passer med den krypteret partition på disken. Denne sektion kan kopiers, hvis du har flere diske der skal dekrypteres. Ændre
Grunden til at uuid’en bliver brugt i stedet for fx. device navnet er at navnet er dynamisk, men uuid’en vil altid være det samme uanset hvilket system man mounter disken i.
1 2 3 4 5 6 7 8 9 10 11 |
echo "Decrypting DISK1.. Please wait." cryptsetup --key-file /mnt/KeyMount/keyfile luksOpen /dev/disk/by-uuid/ef321f46-d240-4370-a5eb-4bb34d6c62da DISK1 if [ $? -eq 0 ]; then printf "Mounting DISK1.. " mount /dev/mapper/DISK1 /sti/til/mount/mappe ec_zero $? "Succeeded!" "Failed mounting drive!" else printf "\033[1;31;148mFailed decrypting drive!\n\033[39m" fi echo |
Sidste del af scriptet unmounter og lukker USB enheden igen, så du kan fjerne den fra computeren.
1 2 3 4 5 6 7 8 9 |
printf "Unmounting /mnt/KeyMount and closing /dev/mapper/KeyMount.. " umount /mnt/KeyMount if [ $? -eq 0 ]; then cryptsetup luksClose /dev/mapper/KeyMount ec_zero $? "Succeeded!" "Failed closing Keymount!" else printf "\033[1;31;148mFailed unmounting KeyMount\n\033[39m" fi echo |
Scriptet i helhed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
#!/bin/bash clear uuid="e93d17a4-fdc3-4fde-8d14-721a33f872f3" ########### Checking if user is root ########### if [ "$(id -u)" != "0" ]; then echo echo "This script must be run as root." 1>&2 echo exit 1 fi ########### Succeeded or Failed function ########### ec_zero () { if [ $1 -eq 0 ]; then printf "\033[0;32;148m$2\n\033[39m" else printf "\033[1;31;148m$3\n\033[39m" fi } if [ ! -L "/dev/disk/by-uuid/$uuid" ]; then echo "### Could not find USB device! ###" exit 2 fi ########### Decrypting and mounting USB device ########### echo echo -n "Please type decryption password for USB device: " read -s -e pass echo echo printf "Decrypting KeyMount.. Please wait. " echo "$pass"|cryptsetup luksOpen /dev/disk/by-uuid/$uuid KeyMount if [ $? -eq 0 ]; then printf "\nMounting KeyMount.. " if [ ! -d "/mnt/KeyMount" ]; then mkdir /mnt/KeyMount fi mount /dev/mapper/KeyMount /mnt/KeyMount if [ $? -eq 0 ]; then printf "\033[0;32;148mSucceeded!\n\033[39m" else printf "\033[1;31;148mCould not mount USB drive.. Quitting!\n\033[39m" exit 4 fi else printf "\033[1;31;148mCould not decrypt USB drive.. Quitting!\n\033[39m" exit 3 fi echo ########### Decrypting and mounting DISK1 with key file ########### echo "Decrypting DISK1.. Please wait." cryptsetup --key-file /mnt/KeyMount/keyfile luksOpen /dev/disk/by-uuid/ef321f46-d240-4370-a5eb-4bb34d6c62da DISK1 if [ $? -eq 0 ]; then printf "Mounting DISK1.. " mount /dev/mapper/DISK1 /sti/til/mount/mappe ec_zero $? "Succeeded!" "Failed mounting drive!" else printf "\033[1;31;148mFailed decrypting drive!\n\033[39m" fi echo ########### Unmounting and closing USB Drive ########### printf "Unmounting /mnt/KeyMount and closing /dev/mapper/KeyMount.. " umount /mnt/KeyMount if [ $? -eq 0 ]; then cryptsetup luksClose /dev/mapper/KeyMount ec_zero $? "Succeeded!" "Failed closing Keymount!" else printf "\033[1;31;148mFailed unmounting KeyMount\n\033[39m" fi echo |