⌨ Labor omnia vincit ☮

OpenBSD – Full Disk Encryption

Posted in OpenBSD by anaumov on 25.02.2019

Пару лет назад я писал о подготовке флешки и последующем процессе установки с нее OpenBSD. Тема, которую я там не затрагиваю, и которой я хотел бы сейчас дополнить тот пост, – full disk encryption. Очень важная на мой взгляд. Я писал уже о шифровании дисков в openSUSE, теперь вот наконец-то настал черед и этой прекрасной Unix-like системы из семейства BSD.

Поддержка softraid crypto boot появилась в OpenBSD (для i386 and amd64) начиная с версии 5.3 в 2013 году. Именно тогда bioctl(8) – интерфейс для работы с RAID – стал поддерживать так называемую CRYPTO discipline, используемую для шифрования дисков. К слову, в Linux Kernel используется аналогичный метод – там эта функциональность встроенна в devmapper, первоночально используемая только для LVM.

В процессе инсталляции OpenBSD не предусмотренно вопроса о шифровании диска. Для этого нам потребуется сразу же после приглашения установщика, перейти в консоль и подготовить диск самим.

Welcome to the OpenBSD/amd64 6.4 installation program.
(I)nstall, (U)pgrade, (A)utoinstall or (S)hell? s
#

Помните как мы ставили эту ОС в начале 2000-х? Одна ошибка или просто неправильный параметр ломал устанавливаемую систему. Эта была любовь с первого взгляда 🙂

Итак, я ставлю не на голое железо, а VM-систему, поэтому мой диск навывается wd0. В случае с обычным SATA, это будет sd0. Я не буду напоминать, что вся информация с диска будет удалена.

Поехали… Инициализируем новое устройство. Вам нужна только однна команда: первая для загрузки из MBR, вторая – используется GPT с загрузкой UEFI:

# fdisk -iy wd0
Writing MBR at offset 0
#
# fdisk -iy -g -b 960 wd0
#

…и создаем на нем новый softraid раздел при помощи disklabel(8). После этого на сцену выходит герой этого поста – bioctl(8). Его параметр “C” создает encrypting discipline.

# disklabel -E wd0
Label editor (enter '?' for help at any prompt)
> a a			
offset: [64]
size: [41929586] *
FS type: [4.2BSD] RAID
> w
> q
No label changes.

# bioctl -c C -l wd0a softraid0
New passphrase:
Re-type passphrase:
sd0 at scsibus1 targ 1 lun 0:  SCSI2 0/direct fixed
sd0: 20473MB, 512 bytes/sector, 41929058 sectors
softraid0: CRYPTO volume attached as sd0
#

Вводим 2 раза passphrase и видим, как сразу же появляется сообщенние ядра о регистрации нового устройства sd0 (если вы первоночально использовали sd0 вместо wd0, как в моем примере, то у вас должно появится устройство sd1 соответственно). Все что мы будем писать на /dev/sd0 будет теперь зашифрованно AES в режиме XTS.

Так как это новое, только что созданное устройство, нам нужно запустить MAKEDEV скрипт, чтобы установщик его зарегистрировал, и его можно было использовать для установки. Коротко поясню – консоль, в которой мы сейчас находимся, была вызвана установщиком, т.е. мы не выходим из него, а потом заходим снова (и при повторном запуске он снова опросит все устройства), а до сих пор находимся в нем.

# cd /dev && sh MAKEDEV sd0
#

Следующий шаг необязателен, но все же рекомендуется занулить первый фрагмент нового псевдоустройства, т.к. после создания там скорее всего будет “мусор”.

# dd if=/dev/zero of=/dev/rsd0c bs=1m count=1
1+0 records in
1+0 records out
1048576 bytes transferred in 0.006 secs (165167248 bytes/sec)
#

Все. Устройство готово. Его должен увидеть установщик, т.к. мы запускали MAKEDEV. Теперь выходим из консоли обратно в программу-установщик при помощи команды exit и начинаем установку. Теперь я ставлю OpenBSD как обычно, но вместо wd0 ставлюю ее на новое устройство sd0.

После установи перезагружаемся и видим, как загрузчик, прежде чем показать boot-приглашение для выбора одного из доступных Kernel, сначала спрашивает passphrase для расшифровки и доступа к диску:

Если вы хотите, к примеру, просто зашифровать раздел на флешке, то доступ к ней после этого можно будет получить так:

# bioctl -c C -l sdXa softraid0
Passphrase:
softraid0: CRYPTO volume attached as sd(X+1)
# mkdir /mnt/sd(X+1)a
# mount /dev/sd(X+1)a /mnt/sd(X+1)a
...
# umount /dev/sd(X+1)a
# bioctl -d sdX
#

Если вы уже работали с cryptsetup в Linux, то наверняка узнали принцип.
Обратите внимание – всегда регистрируется новое sd устройство. В примерах выше, где я использую wd0, создается sd0, потому что в системе нет SATA-дисков. В последнем примере я использую sdX, значит для доступа к нему будет создано первое же доступное sd-устройство, например с именем sdX+1. Если sdX+1 уже существует, будет создано sdX+2 и т.д.

Поменять passphrase можно при помощи параметора “-P”:


# bioctl -P sd0
Old passphrase:
New passphrase:
Re-type passphrase:
#

 

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.

%d bloggers like this: