Полное шифрование корня по ключу

Привет, столкнулся с проблемой шифрования (собственно, она описана в заголовке). Установил OPensuse Leap 42.1 В установщике была галочка "зашифровать всё в корень"111 ну или как-то так. ПРедложили ввести пароль, ну я думаю,мол потом поменяю, а н не тут-то было. Использовал cryptsetup luksAddKey, а загрузчику по барабану. Добавил в граб опцию, rd.luks.key=/путь к файлу ключа. Затёр нулевой keyslot (я думал, именно он используется по умолчанию) и добавил в него свой ключ вместо того, что там было, боялся, система не стартанёт, но нет! Ей пофигу! Как в opensuse это всё работает? Не понимаю.

Мне помогли на англоязычном форуме, продублирую решение здесь, уверен, оно пригодится многим.

Что я сделал, чтобы решить проблему шифрования по ключу всего диска (за исключением /boot):

Стандартная установка Opensuse 42.1, в процессе жмём галочки “прелдложение на базе LVM” и “зашифровать …” надеюсь, это проблем не вызовет:

http://i.piccy.info/i9/24b8e65fe49aed993c11cc126ad38018/1482927589/4850/1103912/IMG_4217_240.jpg](http://piccy.info/view3/10686220/3bbf0ddb0dce70d52a42aab18a3c3b72/)http://i.piccy.info/a3/2016-12-28-12-19/i9-10686220/240x180-r/i.gif](http://i.piccy.info/a3c/2016-12-28-12-19/i9-10686220/240x180-r)

Вас попросят указать пароль, укажите что-то легко запоминающееся, т.к. потом смените его на файл-ключ.

После установки грузимся с лайв-флешки или с того же установочного носителя, с которого производилась установка opensuse, но вместо установки выбираем “Rescue System”, всёравно все действия дальше будут в консоли.

создаём наш файл-ключ:

dd if=/dev/random of=/mnt/whatever/mykey bs=1 count=256

говорю сразу, я не смог стандартно решить проблему, никакие мануалы (даже официальные) не помогли, поэтому у меня в качестве ключа выступал файл устройства, так что в моём случае можно сделать сразу:

dd if=/dev/random of=/dev/mmcblk0 bs=1 count=256

mmcblkp0 это SD-карта, которая вставляется отдельно каждый раз, когда включается компьютер, у вас это может быть флешка или какой-то другой носитель.

добавляем этот файл-ключ к нашему устройству:

cryptsetup luksAddKey /dev/sda3 --key-file /dev/mmcblk0 --keyfile-size 256

в моём случае /dev/sda3 это раздел, на который водружен шифрованый LVM, у вас он скорее всего будет такой же, если установка стандартная.

Далее, примонтируете ваш /boot и правите строку загрузчика:


mount /dev/sda1 /mnt

vim /mnt/gub2/grub.cfg

Вместо vim ваш любимый текстовый редактор $)

Опции, которые вам нужно добавить в параметры ядра:

luks.uuid=502cca08-a4ff-4592-a5cc-ec4ef6650200 # это UUID /dev/sda3 а не LVM раздела!
luks.key=/dev/mmcblk0
luks.options=keyfile-size=256 

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


lsblk
blkid

Теперь нужно удалить старый ключ-пароль, чтобы узнать точно, где кто делаем:

cryptsetup luksOpen -v /dev/sda3 anyname

Вас попросят ввести пароль и после открытия будет выдана строка:

Keyslot X unlocked 

Скорее всего это будет slot 0 но всегда нужно проверять, что делаешь, если вам дорога информация %)
Проверить, какие keyslotы активны, можно через:

crypsetup luksDump /dev/sda3

Удаляем лишний слот:

cryptsetup luksKillSlot /dev/sda3 0 --key-file /dev/mmcblk0 --keyfile-size 256

где 0 - номер кейслота, который нужно затереть

Теперь у вас только один способ расшифровать этот криптоконтейнер-ваш файл-ключ.

Есть способы указывать файл, расположенный на каком-то носителе и при это не занимающий весь носитель целиком (мне не жалко под это 2 ГБ старой флешки, но кому-то это будет неудобно)
Как это сделать, я не разобрался. Пока так. Вопросы, пожелания и прочее, жду с нетерпением!

Оригинальное обсуждение: https://forums.opensuse.org/showthread.php/521898-An-encrypted-root-with-a-keyfile