Управление шифрованными разделами LUKS

Материал из ALT Linux Wiki

В LUKS для одного зашифрованного раздела используются восемь слотов, в каждом из которых может храниться отдельный пароль (ключ). Любой из восьми ключей может быть использован для расшифровки раздела. Любой пароль может быть изменён или удалён необратимо.

Для управления шифрованными разделами можно воспользоваться командой cryptsetup. Ниже приведены примеры использования данной команды.

Просмотреть текущее состояние всех слотов:

# cryptsetup luksDump /dev/sdb1 | grep Slot
Key Slot 0: DISABLED
Key Slot 1: ENABLED
Key Slot 2: DISABLED
Key Slot 3: DISABLED
Key Slot 4: DISABLED
Key Slot 5: DISABLED
Key Slot 6: DISABLED
Key Slot 7: DISABLED

где /dev/sdb1 — шифрованный раздел.

Примечание: Определить является ли устройство LUKS-разделом:
# cryptsetup isLuks -v /dev/sdb1
Команда выполнена успешно.

Выяснить какой раздел является шифруемым можно, получив uuid зашифрованного раздела:

# cat /etc/crypttab
luks-7853363d-e7e2-1a42-b5b9-0af119e19920   UUID=7853363d-e7e2-1a42-b5b9-0af119e19920   none    luks

и подставив его в следующую команду:

# ls -l /dev/disk/by-uuid/7853363d-e7e2-1a42-b5b9-0af119e19920
lrwxrwxrwx 1 root root 10 фев 17 12:54 /dev/disk/by-uuid/7853363d-e7e2-1a42-b5b9-0af119e19920 -> ../../sdb1

Также можно воспользоваться командой lsblk:

# lsblk
NAME                                          MAJ:MIN RM  SIZE RO TYPE  MOUNTPOINT
sda                                             8:0    0   18G  0 disk  
├─sda1                                          8:1    0 1023M  0 part  [SWAP]
└─sda2                                          8:2    0   17G  0 part  /
sdb                                             8:16   0   18G  0 disk  
└─sdb1                                          8:17   0   18G  0 part  
  └─luks-7853363d-e7e2-1a42-b5b9-0af119e19920 253:0    0   18G  0 crypt /home
sr0                                            11:0    1 1024M  0 rom


Добавить новый пароль на зашифрованный раздел (требуется предоставить уже имеющийся пароль интерактивно или посредством опции --key-file):

# cryptsetup luksAddKey /dev/sdb1
Введите любую существующую парольную фразу:
Введите новую парольную фразу для слота ключа:
Парольная фраза повторно:

Пароль будет назначен в первый свободный слот:

# cryptsetup luksDump /dev/sdb1 | grep Slot
Key Slot 0: ENABLED
Key Slot 1: ENABLED
Key Slot 2: DISABLED
Key Slot 3: DISABLED
Key Slot 4: DISABLED
Key Slot 5: DISABLED
Key Slot 6: DISABLED
Key Slot 7: DISABLED

Можно указать номер определенного слота с помощью опции --key-slot, например:

# cryptsetup luksAddKey /dev/sdb1 --key-slot 5

Заменить один из паролей на другой (старый пароль нужно ввести интерактивно или задать опцией --key-file):

# cryptsetup luksChangeKey /dev/sdb1
Введите изменяемую парольную фразу:
Введите новую парольную фразу:
Парольная фраза повторно:

Если задан номер слота (опцией --key-slot), нужно ввести старый пароль именно для заданного слота, и замена пароля произойдёт тоже в этом слоте. Если номер слота не задан и есть свободный слот, то сначала новый пароль будет записан в свободный слот, а потом будет затёрт слот, содержащий старый пароль. Если свободных слотов не окажется, то новый пароль будет записан прямо в слот, ранее содержащий старый пароль.

Удалить заданный пароль (затирает слот):

# cryptsetup luksRemoveKey /dev/sdb1
Введите удаляемую парольную фразу:
Внимание! В пакетном режиме (-q) удаление даже последнего пароля будет выполнено без каких-либо предупреждений. Если ни одного пароля не останется (то есть все слоты ключей будут пусты), дешифровать LUKS-раздел станет невозможно.


Сброс забытого пароля на зашифрованный раздел:

  1. Получить зашифрованные пароли всех разделов:
    # dmsetup table --showkey
    luks-7853363d-e7e2-1a42-b5b9-0af119e19920: 0 37730304 crypt aes-cbc-essiv:sha256 b15c22e8d60a37bcd27fb438637a8221fbec66c83be46d33a8331a4002cf3144 0 8:17 4096
    
    Часть поля после «aes-cbc-essiv:sha256» является зашифрованным паролем.
    Сохранить зашифрованный пароль в текстовый файл:
    # echo "b15c22e8d60a37bcd27fb438637a8221fbec66c83be46d33a8331a4002cf3144" > lukskey.txt
    
  2. Преобразовать существующий пароль из текстового файла в двоичный файл:
    # xxd -r -p lukskey.txt lukskey.bin
    luks-7853363d-e7e2-1a42-b5b9-0af119e19920: 0 37730304 crypt aes-cbc-essiv:sha256 b15c22e8d60a37bcd27fb438637a8221fbec66c83be46d33a8331a4002cf3144 0 8:17 4096
    
  3. Добавить новый пароль, используя существующий пароль, извлеченный в бинарный файл:
    # cryptsetup luksAddKey /dev/sdb1 --master-key-file <(cat lukskey.bin)
    Введите новую парольную фразу для слота ключа:
    Парольная фраза повторно:
    
Внимание! Сбросить пароль на зашифрованный раздел можно, только если данный раздел уже примонтирован.