USB-ключ для LUKS

В данной заметке пойдёт речь о размещении ключа шифрования LUKS контейнера на USB-флешке. Для примера в качестве шифрованного контейнера выбран раздел, который монтируется в /home. Приведённая статья оттестирована на CentOS 7.

Создание ключа

Заполняем первые 1024 байт флешки (/dev/sda) всяким мусором. Это будет наш ключ:

sudo dd if=/dev/urandom of=/dev/sda bs=1 count=1024

Перед импортом ключ необходимо экспортировать в файл, например, так:

sudo dd if=/dev/sda of=/tmp/luks.key bs=1 count=1024

Добавляем ключ в хранилище LUKS:

sudo cryptsetup luksAddKey /dev/md126 /tmp/luks.key --key-slot 1

В моём случае шифрованный раздел находится на программном RAID-массиве /dev/md126 (проверить можно командой lsblk --fs), key-slot 1 -- номер слота, в который будет записан ключ (в слоте 0 записан пароль, который мы оставим).

Проверить добавленный ключ можно командой:

sudo cryptsetup luksDump /dev/md126

Настройка автомонтирования

Для начала надо получить идентификатор USB-носителя:

ls -l /dev/disk/by-id | grep usb
# lrwxrwxrwx. 1 root root  9 апр  9 02:21 usb-1_GB_USB2.0FlashDrive_142E194215D315BC-0:0 -> ../../sda

Далее необходимо закомментировать автоматическое монтирование в /etc/crypttab:

sudo cat /etc/crypttab
# luks-5b043c41-4cd4-44d6-9fb7-86de21be9bb1 UUID=5b043c41-4cd4-44d6-9fb7-86de21be9bb1 none

Создаём скрипт монтирования /usr/local/sbin/home-mount.sh, в котором прописываем полученные выше идентификаторы USB-носителя и LUKS-контейнера:

#!/bin/bash

# Set specific key
#
USBKEY=/dev/disk/by-id/usb-1_GB_USB2.0FlashDrive_142E194215D315BC-0\:0

# Define LUKS partition to unlock and mount
#
LUKS=luks-5b043c41-4cd4-44d6-9fb7-86de21be9bb1
MAPPER="/dev/mapper/$LUKS"
DEVICE=5b043c41-4cd4-44d6-9fb7-86de21be9bb1

DEV="/dev/disk/by-uuid/$DEVICE"

# Check for key and unlock if present
#
if [ -e $usbkey ]; then
echo "Unlocking $DEV"
dd if=$USBKEY bs=1 count=1024 | \
cryptsetup luksOpen $DEV $LUKS --key-file=- --key-slot 1
mount -t xfs -o defaults $MAPPER /home
fi

# Clean up
#
unset USBKEY LUKS MAPPER DEVICE DEV

exit 0

Здесь необходимо обратить внимание на экранирование двоеточия в USBKEY.

Скрипт необходимо добавить в конец /etc/rc.local:

sudo vi /etc/rc.local
...
/usr/local/sbin/home-mount.sh

Скрипты необходимо сделать исполнимыми:

sudo chmod a+x /etc/rc.local 
sudo chmod a+x /usr/local/sbin/home-mount.sh

Напоследок родную строку монтирования /home нужно удалить из /etc/fstab (если она у Вас есть):

sudo vi /etc/fstab
...
# /dev/mapper/luks-5b043c41-4cd4-44d6-9fb7-86de21be9bb1 /home xfs defaults,x-systemd.device-timeout=0 0 0
...

Далее машину можно перезагружать. В случае подключенного USB-носителя шифрованный раздел LUKS будет расшифрован и примонтирован автоматически.

Использованные материалы:

  1. http://www.gaztronics.net/howtos/luks.php

Добавлено: 2016-04-15


Поделиться:

Оставить комментарий

Комментарий появится после одобрения.

Поля со значком * обязательны для заполнения.