Re: RuToken и luks (Linux)
Здравствуйте! Есть интерес использовать ruToken для разблокировки на этапе загрузки LVM, защищённых dm-crypt & LUKS. «Astra Linux Special Edition» пока что не интересует, т. к. на сегодня поставок ещё не было, поэтому для начала прошу подсказать, как все довести до рабочего состояния для варианта с Debian (stable).
Итак, текущий вариант: для универсальности рассматриваем компьютер с Debian 9.4 Stretch, где СЗИ от НСД не установлена, есть под рукой ruToken ECP и ruToken S (в пределах территориального органа их очень много, желание повысить защищенность информации), SSD разбит на тома 1) /boot и 2) CryptLVM, в последнем в свою очередь тома swap, /, /tmp и /home. Дополнительно, хотя для поставленной цели это неважно, реализована двухфакторная аутентификация пользователя по инструкции отсюда — https://dev.rutoken.ru/pages/viewpage.a … Id=3440665 с имеющимся сертификатом.
В реализации работы с LUKS для простоты и отдельных своих соображений опять-таки первоначально пробую реализовать вариант с ruToken ECP, обращаться к librtpkcs11ecp.so, но не к pkcs15, а также заведомо не прибегаю к ассиметричному шифрованию.
Мои действия:
1) создаю симметричный ключ шифрования, который в случае чего можно будет использовать просто, как пароль, записываю его в ruToken ECP и в один из слотов LUKS:
LUKS_KEY=`openssl rand -base64 99` && echo "$LUKS_KEY" >> ~/LVM_LUKS.tmp
dd if=~/LVM_LUKS.tmp of=~/LVM_LUKS.key bs=1 skip=0 count=64
shred ~/LVM_LUKS.tmp
rm ~/LVM_LUKS.tmp
sudo cryptsetup luksAddKey /dev/sda2 ~/LVM_LUKS.key
pkcs11-tool --module /usr/lib/librtpkcs11ecp.so --login --write-object ~/LVM_LUKS.key --type data --label LVM_LUKS.key --application-label cryptsetup --private
shred ~/LVM_LUKS.key
rm ~/LVM_LUKS.key
2) создаю папку /crypto, а в ней файл «luks_unlock.sh» с атрибутами 0755 (при этом рабочий файл luks_unlock.sh делаю без комментариев и пустых строк):
#!/bin/bash -i
PATH=$PATH:/usr/bin
# Use RAM-disk for temporary storage
# Unlike tmpfs, ramfs does not use swap, making it
# somewhat more suitable for keeping data off persistent storage.
RAMDISK="/crypto/ram"
mkdir -p $RAMDISK
mount -t ramfs -o size=1m ramfs $RAMDISK
chmod -R u=rwx,g=,o= $RAMDISK
# Plaintext written to RAM at this location
DESTINATION=$RAMDISK/luks_output
# Ensure PCSC daemon is running
pcscd -d
echo "Decrypting LUKS volume with card from $CRYPTTAB_KEY (also $1)" >> /tmp/luks_status
# Run pkcs15-crypt on a different terminal
openvt -fsw -c 2 -- pkcs11-tool --module /usr/lib/librtpkcs11ecp.so --login --read-object --type data --label LVM_LUKS.key --output-file $DESTINATION 2> /tmp/luks_errors
# This is used to unlock the disk
cat $DESTINATION
# Overwrite and remove copy on ramdisk
shred $DESTINATION
rm $DESTINATION
3) файл /etc/crypttab привожу к виду:
# <target> <device> <key file> <options>
sda2_crypt UUID=56fe86c5-a589-4b52-a296-03c1eac5c54f none luks,keyscript=/crypto/unlock.sh
# sda2_crypt UUID=56fe86c5-a589-4b52-a296-03c1eac5c54f none luks
4) выполняю команды ниже и перезагружаюсь
update-initramfs -u
update-grub
На этапе загрузки получаю ошибку: «openvt: can't execute pkcs11-tool no such file or directory»
Как это все исправить и довести до рабочего состояния? По возможности я хочу избежать работы с pkcs15 и асимметричного шифрования.