[sisyphus] Как установить систему на зашифрованный диск?
Vladimir D. Seleznev
vseleznv на altlinux.org
Пт Мар 9 20:01:09 MSK 2018
On Thu, Mar 08, 2018 at 09:04:11PM +0100, Michael A. Kangin wrote:
> Здравствуйте.
>
> Простите за такой вопрос в 2018 году, но я опять в непонятках - где
> можно в инсталляторе сказать, чтобы зашифровать при установке весь диск?
>
> Ну т.е. про то, что /boot и всякие EFI System/BIOS boot разделы должны
> остаться нетронутыми - это понятно, но вот /, swap, /home и /var
> хотелось бы иметь зашифрованными, и чтобы при загрузке вводить только
> один пароль на всех.
Можно и /boot шифровать, но это не так удобнее сделать.
В инсталляторе можно создать несколько зашифрованных разделов без
использования LVM, а потом сделать расшифровку с помощью ключа с помощью
механизма crypttab (работает и под systemd, и под sysvinit). Недавно в
make-initrd была добавлена возможность через параметры ядра игнорировать
расшифровки отдельный зашифрованных массивов [1], поэтому рецепт такой.
В случае незашифрованного /boot:
1. С помощью инсталлятора создать таблицу разделов с нужными
зашифрованными разделами.
2. В уже установленной загруженной системе сгенерировать ключ
расшифровки, и с cryptsetup добавить в новый слот ключей, сам ключ
сохранить где-нибудь в rootfs с правами доступа 0000 (например, в
/etc/luks/key).
3. Написать правила для crypttab'а (к сожалению, справочная страница
сейчас доступна только в пакете systemd, что странно, мне казалось, я её
видел раньше), в котором перечислить все зашифрованные разделы с
файловыми системами, отличными от rootfs, формат которого:
имя_расшифрованного_устройства зашифрованное_устройство путь_к_файлу_ключа опции_расшифровка
4. Добавить в параметры загрузки ядра (прописав в /etc/sysconfig/grub)
параметры luks-ignore с имена зашифрованных устройств, отличных от
rootfs, перегенерировать grub 5. Установить пакет make-initrd-luks
В случае зашифрованного /boot:
1. Зашифровать все файловые системы, в этом случае попросят ввести
пароль на загрузчик.
2. В установленной системе сгенерировать ключ расшифровки, добавить его
в слоты для расшифровки разделов, положить куда-нибудь (например,
/etc/luks/key с правами доступа 0000).
3. В /etc/initrd.mk дописать строчку:
PUT_DIRS += /etc/luks
4. Написать правила для crypttab аналогично предыдущему сценарию.
5. Добавить в параметры загрузки ядра luks-ignore'ы аналогично
предыдущему сценарию.
6. Добавить в параметры загрузки ядра параметр luks-key=key (если ключ
лежит в файле /etc/luks/key).
7. Установить make-initrd-luks.
Минусы обоих вариантов: на текущий момент ключ дешифровки лежит в
файловой системе в открытом виде и защищён только правами доступа. Если
это неприемлемо, то подойдёт только схема LVM на LUKS.
Генерировать ключ надо в файл с уже правильными правами доступа, иначе
теряется всякий смысл.
> Как это вообще сделать, я более-менее представляю несколькими методами,
> сплошной закат солнца вручную. Про всякие хитрые лив-сборки тоже
> представляю.
>
> А из штатного инсталлятора от штатной alt-workstation, по феншую?
Увы, пока никак.
[1] http://git.altlinux.org/gears/m/make-initrd.git?p=make-initrd.git;a=blob;f=features/luks/README.md;h=6c0b91b0b36acc7f886d64af995ba2ff9bc16f2c;hb=80c527b31e17193b4cf4157e136078246876d6a1
--
С уважением,
Владимир Селезнев
Подробная информация о списке рассылки Sisyphus