Насправді це відео. Але в мене були деякі нотатки, а також я подумав, що буде чотко поділитись текстом скриптів, тому тримайте цю сторінку як бонус.
Звісно, для цього нам потрібен зашифрований диск. Зробити такий дуже просто:
cryptsetup luksFormat /dev/sdx
Після цього ми можемо “відкрити” наш новозашифрований диск і створити на ньому файлову систему:
cryptsetup open /dev/sdx dock
mkfs.ext4 /dev/mapper/dock
Детальніше відео про базове шифрування дисків: https://videos.lukesmith.xyz/w/qxMiq53aTieALZwumuxG6G
Pro tip: Перед шифруванням запишіть весь диск потоком з /dev/random
, щоб неможливо було зрознути, скільки місця зайнято зашифрованими даними (якщо це звісно не SSD, на SSD такого роду маніпуляції безрезультатні). Також можна створити файл на вже зашифрованому диску, і в цей файл записати /dev/null
. Це може бути швидше і матиме приблизно той же результат, бо так весь диск запишеться шифрованими даними.
Монтаж при старті
Відкривши наш шифрований диск та ввівши lsblk -f
, побачимо його UUID в зашифрованому та розшифрованому вигляді.
sdx crypto_LUKS 22f56a84-1f23-49ef-9be4-29da93630e5b
└─dock ext4 7f717c18-72b1-4163-9a79-c3c7443b3bfb 1.2T 26% /media/dock
Перший UUID (самого диску) вставляємо в crypttab у другу колонку:
dock UUID=22f56a84-1f23-49ef-9be4-29da93630e5b /etc/dockdrive.key nofail
Третя колонка—пароль або в нашому випадку ключфайл, яким ми будем відмикати цей диск. Четверта—різні опції, тут вписана nofail, щоб запуск системи не припинявся, якщо цей диск не буде виявлений чи розшифрований. Перша колонка—ім’я, яке буде дане диску після розшифрування.
Ключфайл може бути будь-яким файлом. Я люблю генерувати їх таким чином:
dd if=/dev/random of=/etc/dockdrive.key bs=512 count=4 iflag=fullblock
sudo chmod 600 /etc/dockdrive.key
cryptsetup luksAddKey /dev/sdx /etc/dockdrive.key
Але простіше просто ввести в /etc/crypttab
пароль до диску замість шляху до файлу.
Якщо ключфайл/пароль зберігається на незашифрованому диску, то в такому шифруванні нема змісту! Щоб зашифрувати свій системний диск можете керуватись цією інструкцією (а для повного шифрування диску—цією) або глянути відео.
Коли наш crypttab спрацьовує, з’являється мапування /dev/mapper/dock
з UUID 7f717c18-72b1-4163-9a79-c3c7443b3bfb, і вже за цим UUID ми можем монтувати диск у /etc/fstab
:
UUID=7f717c18-72b1-4163-9a79-c3c7443b3bfb /media/dock ext4 auto,nofail,noatime,rw,user 0 0
Udev
Для автомонтажу при під’єднанні можна прописати такі правила:
/etc/udev/rules.d/luksmount.rules:
ACTION=="add", ENV{ID_FS_TYPE}=="crypto_LUKS", ENV{ID_FS_UUID}=="22f56a84-1f23-49ef-9be4-29da93630e5b", RUN+="/home/sasha/.local/bin/cryptmount %E{ID_FS_UUID} dock"
/home/sasha/.local/bin/cryptmount:
#!/bin/sh
uuid="$1"
cryptid="$2"
cryptpath="/dev/mapper/$cryptid"
mountpoint="/media/$cryptid"
keyfile="/etc/dockdrive.key"
if [ -e "$cryptpath" ]; then
echo "$cryptpath already exists, skipping unlock."
else
sudo cryptsetup open "/dev/disk/by-uuid/$uuid" --key-file "$keyfile" "$cryptid"
fi
if [ -e "$cryptpath" ]; then
sudo mount "$cryptpath" "$mountpoint" && exit 0
fi
echo "Failed to mount $cryptpath" >&2
exit 1
/etc/udev/rules.d/luksumount.rules:
ACTION=="remove", ENV{ID_FS_TYPE}=="crypto_LUKS", ENV{ID_FS_UUID}=="22f56a84-1f23-49ef-9be4-29da93630e5b", RUN+="/home/sasha/.local/bin/cryptumount dock"
/home/sasha/.local/bin/cryptumount:
#!/bin/sh
mountpoint="/media/dock"
lsblkoutput="$(lsblk -nrpo "name,type,size,mountpoint")"
cryptid="$(echo "$lsblkoutput" | grep "/${mountpoint#*/}$")"
cryptid="${cryptid%% *}"
cryptid="dock"
cryptpath="/dev/mapper/$cryptid"
sudo umount "$mountpoint"
if [ -e "$cryptpath" ]; then
sudo cryptsetup close "$cryptid"
fi