рутокен + luks - пара шагов осталось

всем привет

ОС ubuntu 24.04

впервые делаю по инструкции https://dev.rutoken.ru/pages/viewpage.a … d=81527216

сделал почти все и перехожу внизу на "1) Выполнить пункт 8.... ", но там в примере гитхаба указан чуть отличающаяся строка /etc/crypttab, а в моем случаи это:
dm_crypt-0 PARTUUID=9a6868cd-265e-4661-b28a-3dcb2d630b0b /dev/urandom swap,initramfs

как мне следует исправить /etc/crypttab ?

Re: рутокен + luks - пара шагов осталось

Здравствуйте, muzi,
вам необходимо отредактировать crypttab в формате:
mapped_device_name source_block_device key_file luks,keyscript=decrypt_opensc

где
- mapped_device_name — это имя, под которым расшифрованное устройство будет доступно в /dev/mapper.
- source_block_device — это UUID шифрованного тома, используемого в качестве источника. Записывать его нужно в формате UUID=. Чтобы узнать UUID шифрованного тома, воспользуйтесь командой sudo cryptsetup luksUUID /dev/sda2 (вместо sda2, укажите ваш диск)
- key_file — это путь к файлу, который содержит ключ, необходимый для расшифровки устройства. В нашей инструкции это -  /boot/rootkey.enc
- luks — предполагает, что шифрование выполнено с использованием LUKS (Linux Unified Key Setup).
- keyscript=decrypt_opensc — это опция, указывающая, что для расшифровки ключа, содержащегося в /boot/rootkey.enc, используется скрипт decrypt_opensc.

Далее, выполните пункт 13 из инструкции на github, без указания decrypt_opensc.patch.

Re: рутокен + luks - пара шагов осталось

создал такой /etc/crypttab:

dm_crypt-0 PARTUUID=9a6868cd-265e-4661-b28a-3dcb2d630b0b /boot/rootkey.enc luks,keyscript=decrypt_opensc

подал update-initramfs -u

но при загрузке приходится вводить пароль, а ключ не используется

как диагностировать проблему ?

Re: рутокен + luks - пара шагов осталось

muzi,
проверьте наличие файла ключа и права доступа:
Убедитесь, что файл /boot/rootkey.enc существует и доступен для чтения. Проверьте права доступа и владельца файла: ls -l /boot/rootkey.enc.

Убедитесь, что в ОС включен модуль pcscd:
sudo systemctl enable pcscd
sudo systemctl start pcscd

Проверьте наличие и правильность скрипта decrypt_opensc. Он располагается по пути: /usr/lib/cryptsetup/scripts/decrypt_opensc.

По возможности, попробуйте заменить PARTUUID на UUID в соответствии с идентификатором вашего раздела. Различие между UUID и PARTUUID: UUID относится к файловой системе, в то время как PARTUUID относится к разделу диска.

Так же, можете посмотреть системные логи после запуска ОС через journalctl.
Посмотрите сообщения, связанные с cryptsetup.

Re: рутокен + luks - пара шагов осталось

хм, о каких правах и сервисах вы говорите, если это еще на загрузке ядра проверки идут ?
если я верно понимаю

поправил имя PARTUUID на UUID, лучше не стало

при этом /boot почемуто пустой стал

может инструкция уже неактуальна на последних версиях ubuntu ?

Re: рутокен + luks - пара шагов осталось

Здравствуйте, muzi,

Ваша строка начинается с dm_crypt-0. Убедитесь, что это имя соответствует логическому устройству, которое используется для шифрованного раздела. Обычно используется что-то вроде sda2_crypt.

Убедитесь, что имя устройства dm_crypt-0 соответствует имени, указанному в или в /dev/mapper/
ls  /dev/mapper/

Убедитесь, что вы указали верный UUID тома.
PARTUUID используется только для разделов, а UUID обычно применяется к файловым системам или шифрованным томам.
Проверьте UUID вашего раздела с помощью:
blkid /dev/sdX

Обращаю ваше внимание, что в данной команде необходимо заменить sdX имя того диска, который вы используете для шифрования.
Если /boot/ стал пустым, это может означать, что /boot/ больше не примонтирован, или вы случайно удалили файлы.
Смонтируйте /boot/, чтобы убедиться, что файл /boot/rootkey.enc существует.
mount /boot/
ls /boot/

Если файл отсутствует, повторите процесс его генерации и убедитесь, что файл скопирован правильно. Убедитесь, что файл был зашифрован с использованием открытого ключа, извлеченного из Рутокен.

Если /boot/ был не смонтирован во время выполнения update-initramfs -u, то изменения не были применены.

Если служба pcscd не запущена, то доступ к Рутокен невозможен.
Убедитесь, что служба запущена:
systemctl status pcscd

Если служба не запущена, выполните:
systemctl start pcscd
systemctl enable pcscd


Расскажите, каким именно образом вы шифровали диски через LUKS?
Какие ошибки связанные с cryptsetup появляются в journalctl после неудачной попытки расшифровки с помощью Рутокен?

Наша инструкция проверялась на Ubuntu 22.04.3 LTS.

Re: рутокен + luks - пара шагов осталось

1. строка "dm_crypt-0 PARTUUID=9a6868cd-265e-4661-b28a-3dcb2d630b0b /dev/urandom swap,initramfs" была в /etc/crypttab создана установщиком ubuntu 24.04.1 LTS

2.

~$ ls  /dev/mapper/ -al
total 0
drwxr-xr-x  2 root root     100 дек 12 08:22 .
drwxr-xr-x 21 root root    4740 дек 12 08:22 ..
crw-------  1 root root 10, 236 дек 12 08:22 control
lrwxrwxrwx  1 root root       7 дек 12 08:22 dm_crypt-0 -> ../dm-1
lrwxrwxrwx  1 root root       7 дек 12 08:22 keystore-rpool -> ../dm-0

3.

$ blkid
/dev/nvme0n1p1: UUID="AE1E-FDA7" BLOCK_SIZE="512" TYPE="vfat" PARTUUID="65de66ef-6e00-4b2c-b308-de9473a6196c"
/dev/nvme0n1p4: LABEL="rpool" UUID="18114400123631025246" UUID_SUB="10476213877615129471" BLOCK_SIZE="4096" TYPE="zfs_member" PARTUUID="c4beaead-adb8-47a0-b3a6-22fd50e8ca6d"
/dev/nvme0n1p2: LABEL="bpool" UUID="361276454038406966" UUID_SUB="6039663864063551006" BLOCK_SIZE="4096" TYPE="zfs_member" PARTUUID="d35d33a0-e783-432c-b3d7-757575b43135"
/dev/mapper/keystore-rpool: LABEL="keystore-rpool" UUID="b7073ee6-6d1a-48e1-b597-222a84b7579e" BLOCK_SIZE="4096" TYPE="ext4"

какая в моем случаи должна быть строка в  /etc/crypttab ?

4. я случайно не удалял файлы /boot )
видимо так создается initramfs по инструкции. файлы появляются обратно (и есть они сейчас) если загрузится в emergency и переделать initramfs

 ls -al /boot
total 93617
drwxr-xr-x  4 root root       18 дек 10 15:05 .
drwxr-xr-x 22 root root       26 дек  8 22:16 ..
-rw-r--r--  1 root root   287459 ноя  1 13:56 config-6.8.0-49-generic
drwxr-xr-x  3 root root     4096 янв  1  1970 efi
drwxr-xr-x  5 root root        9 дек 10 10:49 grub
lrwxrwxrwx  1 root root       27 дек  8 16:16 initrd.img -> initrd.img-6.8.0-49-generic
-rw-r--r--  1 root root 77605124 дек 10 15:05 initrd.img-6.8.0-49-generic
lrwxrwxrwx  1 root root       27 дек  8 16:16 initrd.img.old -> initrd.img-6.8.0-49-generic
-rw-r--r--  1 root root   142796 апр  8  2024 memtest86+ia32.bin
-rw-r--r--  1 root root   143872 апр  8  2024 memtest86+ia32.efi
-rw-r--r--  1 root root   147744 апр  8  2024 memtest86+x64.bin
-rw-r--r--  1 root root   148992 апр  8  2024 memtest86+x64.efi
-rw-r--r--  1 root root      245 дек 10 14:53 rootkey.dec
-rw-r--r--  1 root root      256 дек  9 14:11 rootkey.enc
-rw-------  1 root root  9064172 ноя  1 13:56 System.map-6.8.0-49-generic
lrwxrwxrwx  1 root root       24 дек  8 16:16 vmlinuz -> vmlinuz-6.8.0-49-generic
-rw-------  1 root root 14956936 ноя  1 14:41 vmlinuz-6.8.0-49-generic
lrwxrwxrwx  1 root root       24 дек  8 16:16 vmlinuz.old -> vmlinuz-6.8.0-49-generic

5. диск шифровался штатным установщиком ubuntu 24.04.1 LTS

6. актуальна ли инструкция для ubuntu 24.04.1 ?

Re: рутокен + luks - пара шагов осталось

muzi
Исходя из предоставленных вами данных, я предполагаю, что файл /etc/crypttab должен выглядеть следующим образом:

keystore-rpool UUID=18114400123631025246 /boot/rootkey.enc luks,keyscript=decrypt_opensc

Объяснение параметров:
•    keystore-rpool: это имя, которое будет использоваться для отображения в /dev/mapper/. Его можно изменить.

•    UUID=<UUID>: это UUID зашифрованного раздела /dev/nvme0n1p4.

•    /boot/rootkey.enc: ключ, который будет использоваться для разблокировки.

•    luks: указывает, что используется шифрование LUKS.

•    keyscript=decrypt_opensc: скрипт для разблокировки.

Я предполагаю, что в вашем случае необходимо расшифровывать именно раздел /dev/nvme0n1p4, потому что исходя из команды blkid, этот раздел имеет LABEL: rpool и TYPE="zfs_member".
В стандартной установке Ubuntu с ZFS корневая файловая система (/) монтируется из ZFS пула под именем rpool (root pool), и, как правило, именно этот раздел должен быть доступен после расшифровки.

Не забудьте обновить initramfs:

sudo update-initramfs -u

Также проверьте, включена ли служба pcscd:
sudo systemctl status pcscd

Если служба не запущена, выполните:
sudo systemctl start pcscd
sudo systemctl enable pcscd

После загрузки выполните:
ls /dev/mapper/

Убедитесь, что присутствуют следующие устройства:
keystore-rpool

Если советы выше не помогут, то советую переместить /boot/rootkey.enc в раздел /root/rootkey.enc или даже в initramfs. Возможно, в вашем случае, раздел boot монтируется после разблокировки LUKS, перед загрузкой ОС.  Только не забудьте обновить initramfs после переноса ключа, и прописать актуальный путь к ключу в crypttab.
Главное, чтобы файл rootkey.enc был доступен на незашифрованном разделе для расшифровки LUKS диска. Хранение rootkey.enc на незашифрованном разделе необходимо и безопасно, ведь сам ключ расшифровывается через Рутокен с момент расшифровки LUKS диска.
Для безопасности, рекомендую удалить расшифрованный ключ, а именно rootkey.dec, как указано в нашей статье.

Данная инструкция не проверялась на Ubuntu 24.04.1, но механизмы работы LUKS с версии Ubuntu 22.04.3 LTS, насколько мне известно, не изменились. Предполагаю, что инструкция должна работать исправно и на этой версии ОС.

Re: рутокен + luks - пара шагов осталось

Спасибо за развернутый ответ

1. службу pcscd запустил и разрешил
2. /etc/crypttab сделал как предложили
3. выполнил update-initramfs -u
4. перегрузился

5. пароль все еще запрашиватеся
6. служба pcscd почемуто inactive
7. в логе вижу такое:
journalctl -b|grep crypttab
дек 13 15:29:29 hp250 systemd-cryptsetup[1439]: Encountered unknown /etc/crypttab option 'keyscript=decrypt_opensc', ignoring.