LINUX.ORG.RU

Как реализовать автоматическое монтирование и расшифровку LUKS диска без ввода пароля? (много букв)

 , , ,


0

1

Топик не о том как положить ключ в какую нибудь папку и указать путь к нему в crypttab.
Убунта 16.04. Имеем SSD и HDD на борту. Вся система на SSD, диск не разбит, один раздел, хомяк зашифрован eCryptfs. Все файлы на HDD, отформатированном в LUKS. В user-dirs.dirs прописаны пути до папок с документами, фотками и всем остальным на HDD.
Задача: научить систему открывать все по одному паролю как из коробки.
Если ключ от HDD кладу в хомяка, то слетает user-dirs.dirs
Если ключ от HDD кладу в любое другое место, в /etc например, то все работает как надо. Но какой смысл в шифровании если ключ в открытом доступе лежит.
Вижу тут 4 варианта решения проблемы.
1) Положить ключ на флешку. Не устраивает обязательным присоединением ненужного оборудования, при старте. И ключ на флешке лежать будет в открытом виде. Не вариант в общем.
2) Разбить SSD на 2 раздела обычный и LUKS. Перенести систему на LUKS раздел. boot оставить на обычном. В таком случае eCryptfs и шифрование хомяка удаляем. Отключаем запрос пароля при входе юзера. Кладем ключ от HDD в любое место, хоть в /etc и радуемся. Единственный дельный мануал который нашел по этой теме не осилил. Буду признателен если кто нибудь разжует пошагово мне как и что тут делать.
3) Наверное фантастика. Разбить SSD на 2 раздела обычный и LUKS. На LUKS унести всю систему. На обычный установить загрузчик какой нибудь, который умеет открывать LUKS раздел (какой загрузчик?). Ну и система будет дальше грузится после ввода пароля от LUKS. Дальше как и в первом пункте eCryptfs и шифрование хомяка удаляем. Отключаем запрос пароля при входе юзера. Кладем ключ от HDD в любое место, хоть в /etc и радуемся.
4) Вытекает из третьего варианта. UEFI о котором я ничего совсем не знаю и никогда не пробовал. Поддержка UEFI на машине есть. Сегодня прочитал что бывают разные прошивки или загрузчики для UEFI. Так же много мануалов по установке системы в LUKS с UEFI. Тут возникает вопрос есть ли какая то прошивка для UEFI которая бы открывала SSD в LUKS ? Если это не фантастика то форматируем SSD в 1 раздел LUKS и переносим туда всю систему. Дальше как и в первом пункте eCryptfs и шифрование хомяка удаляем. Отключаем запрос пароля при входе юзера. Кладем ключ от HDD в любое место, хоть в /etc и радуемся.
Благодарен любому совету по решению моей задачи.

Ответ на: комментарий от trishhhhh

Я не в курсе что с initrd в убунте.

Можно попробовать добавить в crypttab:

cryptroot /dev/sda2 (или UUID=xxx) none luks

и обновить initrd. Если initrd не расшифровывает через пеередаваемые при загрузке параметры, можно попробовать через crypttab.

mxfm ★★
()
Ответ на: комментарий от mxfm

Делаю так:
1. Все из под ситемы с LiveCD
2. Создаю второй раздел LUKS
3. Командой dd копирую все в LUKS раздел, кроме boot
4. Содержимое boot переношу из папки в корень не зашифрованного раздела
5. Монтирую все в mnt, делаю chroot
6. Обновляю груб и initframs
Опять система не загружается. Теперь такая ошибка

trishhhhh
() автор топика
Ответ на: комментарий от mxfm

Объясни пожалуйста пошагово как правильно делать. Млять нервов не хватает мучаюсь несколько дней уже.

trishhhhh
() автор топика
Ответ на: комментарий от trishhhhh

уже прошли то, что ключ от зашифрованного диска должен лежать внутри initrd? На дебиане было примерно так

crypttab

<container> /dev/disk/... /crypt_key luks,keyscript=/decrypt

/etc/initramfs-tools/hooks/key_hook — копирует ключ оттуда, где он лежит, в сборочный каталог для inird

#!/bin/sh

cp /<path>/crypt_key "${DESTDIR}"

/decrypt

#!/bin/busybox ash

KEY="${1}"
if [ -f "${KEY}" ]; then
  cat "${KEY}"
else
  echo "ERROR"
fi

anonymous
()
Ответ на: комментарий от mxfm

При обновлении initframs выдает

device-mapper: table ioctl on cryptroot failed: No such device or address
Command failed
cryptsetup: WARNING: failed to determine cipher modules to load for cryptroot
Что ему надо?

trishhhhh
() автор топика
Ответ на: комментарий от trishhhhh

Что ему надо?

У тебя устройство именно cryptroot называется? Надо писать то, что используется при luksOpen/luksFormat

anonymous
()
Ответ на: комментарий от anonymous

У тебя устройство именно cryptroot называется? Надо писать то, что используется при luksOpen/luksFormat

Вроде бы совпадали названия последний раз. Когда этот WARNING прилетел. Вечером сегодня распишу подробно как делаю. Вдруг в какой то мелочи ошибаюсь.

trishhhhh
() автор топика
Ответ на: комментарий от anonymous

Почему то при установке обновлений у меня вылезает

cryptsetup: WARNING: failed to detect canonical device of /dev/sda1
cryptsetup: WARNING: could not determine root device from /etc/fstab
везде гуглится что нужно удалить cryptsetup если нет LUKS и проблема решится. но у меня LUKS есть же.


Делаю второй раздел LUKS с названием cryptroot. Уношу туда всю систему командой dd. На первом разделе не зашифрованном остается boot. Ставлю ему название boot и выношу все содержимое папки boot в корень.
Пишу в fstab
/dev/mapper/cryptroot / ext4 noatime,nodiratime,discard,commit=60 0 0

Пишу в crypttab
sda2_crypt /dev/sda2 none luks

Добавляю в груб
GRUB_ENABLE_CRYPTODISK=y
GRUB_PRELOAD_MODULES="luks cryptodisk"
GRUB_CMDLINE_LINUX="cryptdevice=/dev/sda2:luks"

ubuntu@ubuntu:~$ sudo su
root@ubuntu:/home/ubuntu# mount /dev/mapper/luks-e376445e-19a0-4db4-b8ad-176ee6271332 /mnt/
root@ubuntu:/home/ubuntu# mkdir /mnt/boot
root@ubuntu:/home/ubuntu# mount /dev/sda1 /mnt/boot
root@ubuntu:/home/ubuntu# mount --bind /dev /mnt/dev
root@ubuntu:/home/ubuntu# mount --bind /sys /mnt/sys
root@ubuntu:/home/ubuntu# mount --bind /proc /mnt/proc
root@ubuntu:/home/ubuntu# chroot /mnt/
root@ubuntu:/# grub-install /dev/sda1
Installing for i386-pc platform.
grub-install: warning: File system `ext2' doesn't support embedding.
grub-install: warning: Embedding is not possible.  GRUB can only be installed in this setup by using blocklists.  However, blocklists are UNRELIABLE and their use is discouraged..
grub-install: error: will not proceed with blocklists.
root@ubuntu:/# grub-install /dev/sda
Installing for i386-pc platform.
Installation finished. No error reported.
root@ubuntu:/# update-grub
Generating grub configuration file ...
Found theme: /boot/grub/themes/alienware/theme.txt
Found linux image: /boot/vmlinuz-4.15.0-47-generic
Found initrd image: /boot/initrd.img-4.15.0-47-generic
Found linux image: /boot/vmlinuz-4.15.0-43-generic
Found initrd image: /boot/initrd.img-4.15.0-43-generic
Found linux image: /boot/vmlinuz-4.4.0-151-generic
Found initrd image: /boot/initrd.img-4.4.0-151-generic
done
root@ubuntu:/# sudo update-initramfs -u -k all
sudo: unable to resolve host ubuntu: Connection refused
update-initramfs: Generating /boot/initrd.img-4.15.0-47-generic
update-initramfs: Generating /boot/initrd.img-4.15.0-43-generic
update-initramfs: Generating /boot/initrd.img-4.4.0-151-generic
root@ubuntu:/# exit
exit
root@ubuntu:/home/ubuntu# umount /mnt/
umount: /mnt/: target is busy
        (In some cases useful info about processes that
         use the device is found by lsof(8) or fuser(1).)
root@ubuntu:/home/ubuntu# umount /mnt/sys
root@ubuntu:/home/ubuntu# umount /mnt/dev
root@ubuntu:/home/ubuntu# umount /mnt/proc
root@ubuntu:/home/ubuntu# umount /mnt/boot
root@ubuntu:/home/ubuntu# umount /mnt/
root@ubuntu:/home/ubuntu# reboot

Система даже до ввода пароля от LUKS раздела не доходит. Фото
Что я делаю не так?

trishhhhh
() автор топика
Ответ на: комментарий от trishhhhh

в fstab /dev/mapper/cryptroot
в crypttab sda2_crypt

вот одна проблема у тебя по моему здесь. При обработке crypttab будет создан /dev/mapper/sda2_crypt, а в качестве корня ты указываешь /dev/mapper/cryptroot, который нигде не настраивается.

GRUB_CMDLINE_LINUX=«cryptdevice=/dev/sda2:luks»

вот это по моему не обязательно или должно задаваться немного не так, но не уверен, т.к. у меня еще и lvm. Но до grub пока не дошли

anonymous
()
Ответ на: комментарий от anonymous

вот одна проблема у тебя по моему здесь. При обработке crypttab будет создан /dev/mapper/sda2_crypt, а в качестве корня ты указываешь /dev/mapper/cryptroot, который нигде не настраивается.

Дать обоим одинаковое название?

/dev/mapper/sda2_crypt / ext4 noatime,nodiratime,discard,commit=60 0 0
sda2_crypt /dev/sda2 none luk
или
/dev/mapper/cryptroot / ext4 noatime,nodiratime,discard,commit=60 0 0
cryptroot /dev/sda2 none luk
?
GRUB_CMDLINE_LINUX=«cryptdevice=/dev/sda2:luks» попробую без этой строчки. 2 другие оставить?
GRUB_ENABLE_CRYPTODISK=y
GRUB_PRELOAD_MODULES="luks cryptodisk"

trishhhhh
() автор топика
Ответ на: комментарий от trishhhhh

Дать обоим одинаковое название?

да, я бы выбрал наверно cryptroot, оно немного более говорящее. И вместо /dev/sda2 лучше использовать UUID раздела (UUID=...) или /dev/disk/by-... (ну или потом поменять)

2 другие оставить?

давай сначала попробуем загрузиться с отдельным /boot

anonymous
()
Ответ на: комментарий от trishhhhh

LABEL наверно нет, т.к. он вроде прописывается в ФС, и не привязан к разделу. В /dev/disk/by-id/ должен быть симлинк, соответствующий /dev/sda2. Но как я уже сказал — это тоже можно сделать потом, когда начнем нормально загружаться

anonymous
()
Ответ на: комментарий от trishhhhh

и не забудь, что контейнер должен быть открыт как cryptroot перед чрутом, а не как

root@ubuntu:/home/ubuntu# mount /dev/mapper/luks-e376445e-19a0-4db4-b8ad-176ee6271332 /mnt/

иначе при генерации initrd и конфига груба скрипты его не найдут

anonymous
()
Ответ на: комментарий от anonymous

и не забудь, что контейнер должен быть открыт как cryptroot перед чрутом, а не как

root@ubuntu:/home/ubuntu# mount /dev/mapper/luks-e376445e-19a0-4db4-b8ad-176ee6271332 /mnt/

иначе при генерации initrd и конфига груба скрипты его не найдут

А как это сделать? Я открываю LUKS раздел и монтирую его в /mnt/

trishhhhh
() автор топика
Ответ на: комментарий от trishhhhh

Я открываю LUKS раздел

через файловый менеджер что ли?

вроде делалось как-то так

root# cryptsetup luksOpen /dev/sda2 cryptroot
или
root# cryptsetup open --type luks /dev/sda2 cryptroot
вводим пароль и монтируем /dev/mapper/cryptroot. Если используем файл ключа, то добавится еще одна или несколько опций.

А вообще неплохо было бы почитать man cryptsetup, чтобы быть морально готовым открывать контейнер из rescue-консоли initrd, в случае чего (у меня скрипты из чрута не всегда отрабатывали правильно, но после удачной загрузки и перегенерации проблем уже не было).

anonymous
()
Ответ на: комментарий от anonymous

через файловый менеджер что ли?

Через Gnome-Discs. А потом уже в терминале все делал. Попробую сейчас из терминала монтировать. И все остальное сразу. Отпишусь по результатам.

trishhhhh
() автор топика
Ответ на: комментарий от anonymous

Получилось. Завелась система. Пароль от ryptroot запросила, потом пароль от sdb1. А потом пароль юзера. Все работает.
Спасибо огромное за помощь.

trishhhhh
() автор топика
Ответ на: комментарий от trishhhhh

пожалуйста. Только учти, что у тебя по идее сейчас получился вариант №3 — ядро и initrd лежат на незашифрованном разделе. Если хочешь, чтобы лежали на зашифрованном, то надо добавить возможность открытия luks контейнера по ключу, прописать соответствующие настройки в crypttab, добавить скрипты, о которых я писал ранее и сгенерировать новый initrd. Ну и перенести содержимое /boot на зашифрованный раздел (а лучше для начала иметь на обоих).

anonymous
()
Ответ на: комментарий от anonymous

Только учти, что у тебя по идее сейчас получился вариант №3 — ядро и initrd лежат на незашифрованном разделе.

А чем это чревато?
Имеет ли смысл запаролить груб с такой конфигурацией как у меня сейчас?
Теперь при старте выдает ошибки devicename и ниже press any key to continue. Как можно убрать это сообщение? Сейчас сделаю фото этого экрана.

trishhhhh
() автор топика
Ответ на: комментарий от trishhhhh

А чем это чревато?

откуда же мне знать? Все зависит от твоих целей и степени развития паранойи. Например поскольку initrd доступен, то его можно перепаковать, добавив туда что-нибудь.

anonymous
()
Ответ на: комментарий от anonymous

откуда же мне знать? Все зависит от твоих целей и степени развития паранойи. Например поскольку initrd доступен, то его можно перепаковать, добавив туда что-нибудь.

Главное чтобы никто доступ не получил при утере или краже ноута.
Такая ошибка вылезает при старте. Особо не мешает. Но если не нажать что нибудь то загрузка не идет. Для общего эстетического удовольствия хотелось бы избавится от этого сообщения.

trishhhhh
() автор топика
Ответ на: комментарий от trishhhhh

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

anonymous
()
Ответ на: комментарий от trishhhhh

Главное чтобы никто доступ не получил при утере или краже ноута.

В чем проблема?

Взял Fedora. Разметил диски через установщик: /boot/efi, /boot, все остальное luks с lvm внутри. Установил. Если пароль одинаковый для разных разделов luks, то запрашивается он один раз, в противном случае введешь другой дополнительно. Если ты криптоманьяк, то можешь легко при разметке в установщике указать /boot на флешке. Далее на эту же флешку кинуть зашифрованный бинарный ключ, добавить параметр в grub и готово.

Этот же алгоритм подходит и для других дистрибутивов. Для Debian есть даже цельный пошаговый туториал с видео на YouTube.

Ссылка на видео, а то сам ты найти не сможешь)))

Debian+luks+gpg+usb

anonymous
()
Ответ на: комментарий от anonymous

В чем проблема?

ну давай не будем так категорично. Для меня, допустим, довольно мучительно потом сравнивать списки софта на старой и новой системах и доустанавливать забытое. Гораздо проще было перетащить старую систему целиком.

Ссылка на видео, а то сам ты найти не сможешь)))

ё-моё, а раньше умели записывать это дело текстом

anonymous
()
Ответ на: комментарий от anonymous

ё-моё, а раньше умели записывать это дело текстом

Ору!!!

Что за люди пошли?! В поиск не умеют, думать не умеют...

Ему разжуй, поднеси да в рот положи)))

Это видео основано на одном большом туториале, но ссылку на него я не дам. Пусть автор сам ищет. В туториале тема luks+usb+gpg и не только расписаны очень хорошо.

anonymous
()
Ответ на: комментарий от anonymous

люди всегда те же :)

просто есть те, кому надо что-то сделать и интересно поковыряться/разобраться и те, кому просто надо что-то сделать. Не надо на вторых так реагировать, у них просто другие интересы.

anonymous
()
Ответ на: комментарий от anonymous

Интересно и поковырять и цели достичь. Когда ковыряние проходит без затыков тогда это приятно. А вот когда затык наступает тогда только нервы одни :)
Осталось разобраться как избавится от eCryptfs и press any key вначале.
А куда все место делось в cryptroot ? Из 55 гигов свободно только 1,8. У меня вся система весила примерно 10 гигов.

trishhhhh
() автор топика
Ответ на: комментарий от trishhhhh

когда спрашивают про место, желательно показывать вывод lsblk, df -h и прочего. Мы же не знаем, что и как у тебя наворочено.

Делаю второй раздел LUKS с названием cryptroot. Уношу туда всю систему командой dd.

ну, я так понимаю, что после такого надо сделать resize2fs или что-то такое, но не уверен. Всегда предпочитал cp, rsync или fsarchiver.

anonymous
()

я как получил trezor делал через него, в зависимости от настроек трезора или просто нужно наличие устройства или еще нужно вводить пин что бы устройство передало ключ в luks.

Novell-ch ★★★★★
()
Ответ на: комментарий от trishhhhh

убери из конфига груба то, что добавлял

GRUB_ENABLE_CRYPTODISK=y
GRUB_PRELOAD_MODULES="luks cryptodisk"
GRUB_CMDLINE_LINUX="cryptdevice=/dev/sda2:luks"
для GRUB_CMDLINE_LINUX оставь пустую строку (""), переустанови груб на sda из системы, работающей с зашифрованного раздела, запусти update-grub

PS: всегда будь готов загружаться с чего-нибудь другого

anonymous
()
Ответ на: комментарий от trishhhhh

чего? Обычно надо спросить владельца...

Зайти под юзером и использовать sudo не получается? Ну типа домашний каталог недоступен или что?

anonymous
()
Ответ на: комментарий от anonymous

Нового юзера создал и из под него сделал.

trishhhhh
() автор топика
Ответ на: комментарий от anonymous

Что же за беда с мануалами по cryptsetup. Нигде не могу найти как расширить LUKS раздел. У меня сейчас 10 гигов под boot сделано. Хочу сократить до 500мб и все оставшееся пространство в LUKS раздел отдать. Один только мануал нашел. Но там про Федору написано. Не могу понять что писать мне вместо fedora_chocbar даже.

trishhhhh
() автор топика
Ответ на: комментарий от trishhhhh

Не могу понять что писать мне вместо fedora_chocbar даже.

ничего, у тебя не было lvm

как я понимаю, в твоем случае должно быть как-то так

  1. делаем бэкап :)
  2. с помощью resize2fs уменьшаем размер ФС на /boot
  3. уменьшаем размер раздела /boot
  4. с помощью resize2fs увеличиваем размер ФС на /boot до размеров раздела
  5. увеличиваем размер раздела с cryptroot (скорее будет перемещение + увеличение раздела)
  6. делаем cryptsetup resize cryptroot
  7. с помощью resize2fs увеличиваем размер ФС на /

можно попробовать сделать по крайней мере часть операций через Gnome-Disсs, но я не в курсе его возможностей

anonymous
()
Ответ на: комментарий от trishhhhh

Что же за беда с мануалами по cryptsetup.

Тут опечатка, вместо мануалов должно стоять «с людьми».

Не могу понять что писать мне вместо fedora_chocbar даже.

 vgchange -a n fedora_chocbar 

fedora_chocbar - название группы томов lvm. Команда отключает видимость томов в демоне lvm2. Видимость по умолчанию зависит от настроек дистрибутива. В арче по умолчанию видит, в генте - нет.

Что же за беда с мануалами по cryptsetup. Нигде не могу найти как расширить LUKS раздел

1. Расширяешь раздел с luks. 2. Расширяешь сам luks. 3. Расширяешь фс.

mxfm ★★
()

Тема получилась забавной. В самом начале:

Топик не о том как положить ключ в какую нибудь папку и указать путь к нему в crypttab.

Заявка на экспертность автора треда в теме. Читается так: я тут перепробовал кучу настроек (luks, plain dm-crypt, LVM, gpt с partprobe, systemd+crypttab), разные сценарии, зашифрованный /boot, знаю все опции cryptsetup, знаю как initrd моего дистрибутива расшифровывает, перечитал вики всех дистрибутивов. Но не могу придумать как реализовать следующий вариант ...

В итоге (спустя десятки комментариев): 1) что именно нужно понятно через 10 постов; 2) с мануалами cryptsetup туго; 3) что за lvm? 4) кто такая fedora_chobar? 4) не могу прочитать man cryptsetup; 5) конфиги свои после трёх раз скажу частично.

Понимать что к чему не хочу, читать мануалы - они слишком длинные и с ними туго. Вы, самое главное, скажите команду какую нужно.

mxfm ★★
()
Ответ на: комментарий от mxfm

Разве трудно подсказать команду? Я же не бегу просить помощи по любому поводу. Гуглю сначала. И если не находится решение то задаю вопрос.

trishhhhh
() автор топика
Ответ на: комментарий от anonymous

делаем бэкап :) с помощью resize2fs уменьшаем размер ФС на /boot уменьшаем размер раздела /boot с помощью resize2fs увеличиваем размер ФС на /boot до размеров раздела увеличиваем размер раздела с cryptroot (скорее будет перемещение + увеличение раздела) делаем cryptsetup resize cryptroot с помощью resize2fs увеличиваем размер ФС на /

Я всегда такие вещи из гуя делал :) Для меня сейчас не совсем понятны уменьшаем размер ФС и уменьшаем размер раздела. Это не одно и тоже? :)
Попробую как умею сейчас. dd все из LUKS на другой диск. Удалю LUKS и создам по новой. Но уже больший объем ему задам. Потом dd обратно.

trishhhhh
() автор топика
Ответ на: комментарий от trishhhhh

Я всегда такие вещи из гуя делал :)

а я из консоли. На серверах редко гуй есть. Гуй я использовал один раз и из-за глюка чуть без данных не остался.

Для меня сейчас не совсем понятны уменьшаем размер ФС и уменьшаем размер раздела. Это не одно и тоже? :)

За изменением разметки стоят одни утилиты, за изменением параметров ФС — другие. Они друг о друге ничего не знают, а гуй их объединяет и скрывает их работу.

Попробую как умею сейчас.

поищи уже замену для dd. Есть более выгодные по скорости работы и размеру результирующего файла программы.

anonymous
()
24 сентября 2019 г.
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.