Рассматриваю шифрование жесткого диска. Решение, похоже, dm-crypt с LUKS, использующим пароль. Я работаю с несколькими независимыми жесткими дисками, смонтированными в дисковый пул для чтения. В этом случае мне приходится вводить пароль несколько раз.
Есть ли способ зашифровать жесткие диски с помощью файла-ключа, может быть, записать его на USB-накопитель и просто подключать его при необходимости?
решение1
Один из лучших способов сделать это — использовать смарт-карту с криптоключом на ней, чтобы разблокировать ключи для ваших зашифрованных блочных устройств. Вам нужно будет ввести парольную фразу (называемую «PIN» инструментами, но на самом деле это парольная фраза) только один раз, после чего она будет кэширована. Это имеет дополнительное преимущество защиты зашифрованных данных с помощью чего-то-у-вас-есть (сама смарт-карта, из которой нельзя извлечь закрытый ключ) и чего-то-вы-знаете (парольная фраза).
Отформатируйте /etc/crypttab
так:
mapper-name /dev/disk/raw-device /var/lib/filename-containing-encrypted-key \
luks,keyscript=/lib/cryptsetup/scripts/decrypt_opensc
В Debian и производных initramfs-tools обнаружит keyscript и автоматически скопирует все необходимые инструменты и демоны для доступа к смарт-карте в initramfs.
Информацию о настройке смарт-карты и создании (и шифровании) ключей можно найти в /usr/share/doc/cryptsetup/README.opensc.gz
.
Вы можете использоватьЮбикей 4илиЮбикей НЕОсреди прочего для этой цели.
Заметки по реализации: Эта функция имеет грубые края и, по-видимому, не работает из коробки, так что YMMV. В последний раз, когда мне это удалось, мне пришлось добавить следующие хаки:
- Отключить
systemd
, потому что он катастрофически пытается взять на себя весь процесс настройки зашифрованных устройств,/etc/crypttab
но он ничего не знает оkeyscript
том, что приводит к большому ПРОВАЛУ. К счастью, в Debian вы все еще можете отказаться отsystemd
. Установите этот скрипт fixer-upper, так
/etc/initramfs-tools/hooks/yubipin
как встроенная функция не установила достаточной поддержки для использования Yubikey из initramfs. Возможно, вам придется это настроить.#!/bin/sh PREREQ=cryptroot prereqs() { echo "$PREREQ" } case $1 in prereqs) prereqs exit 0 ;; esac # /scripts/local-top/cryptopensc calls pcscd with the wrong path ln -s ../usr/sbin/pcscd ${DESTDIR}/sbin/pcscd mkdir -p "${DESTDIR}/usr/lib/x86_64-linux-gnu" # opensc-tool wants this dynamically, copy_exec doesn't know that cp -pL /usr/lib/x86_64-linux-gnu/libpcsclite.so.1 "${DESTDIR}/usr/lib/x86_64-linux-gnu/libpcsclite.so.1" mkdir -p "${DESTDIR}/lib/x86_64-linux-gnu" # without this, pcscd aborts with a pthread_cancel error cp -pL /lib/x86_64-linux-gnu/libgcc_s.so.1 "${DESTDIR}/lib/x86_64-linux-gnu/libgcc_s.so.1" # this gets copied as a dangling symlink, fix it rm "${DESTDIR}/usr/lib/pcsc/drivers/ifd-ccid.bundle/Contents/Info.plist" cp -pL /usr/lib/pcsc/drivers/ifd-ccid.bundle/Contents/Info.plist "${DESTDIR}/usr/lib/pcsc/drivers/ifd-ccid.bundle/Contents/Info.plist" # pcscd needs this to open the reader once it has found it cp -pL /lib/x86_64-linux-gnu/libusb-1.0.so.0 "${DESTDIR}/lib/x86_64-linux-gnu/libusb-1.0.so.0"
Установите еще один скрипт для
/etc/initramfs-tools/scripts/local-bottom/killpcscd
очистки:#!/bin/sh set -e PREREQ=cryptopensc prereqs() { echo "$PREREQ" } case $1 in prereqs) prereqs exit 0 ;; esac # because cryptopensc does not do it properly killall pcscd
решение2
Можно просто сохранить пароль luks в файле.
Я использую это на своем домашнем компьютере; корневая файловая система находится на обычном томе luks, который я разблокирую с помощью своей парольной фразы при загрузке. Дополнительный диск содержит том luks со сгенерированным паролем.
Этот дополнительный том разблокируется файлом пароля, который находится в зашифрованной корневой файловой системе. Он автоматически разблокируется во время загрузки, если корневая файловая система разблокирована.
Мой /etc/crypttab
выглядит так:
crypt-root UUID=c5a2cf25-0aae-457e-874f-fca7ea3d5742 none luks
crypt-data UUID=96d79323-246d-49e0-9149-ec3a4cfc1c1e /etc/crypt-data.key luks
Третье поле — это ключевой файл none
для корневой файловой системы, но /etc/crypt-data.key
для файловой системы данных. /etc/crypt-data.key
содержит пароль luks:
Tm90IHJlYWxseSBteSBwYXNzd29yZC4K
Обратите внимание, что новая строка или любой другой пробел будет воспринят как часть пароля! Будьте осторожны, чтобы сгенерировать этот файл без завершающей новой строки. Также убедитесь, что у него строгие разрешения:
-rw------- 1 root root 59 Sep 14 23:57 /etc/crypt-data.key
Вы должны иметь возможность повторить этот подход для нескольких томов (либо с разными паролями, либо с одним общим паролем, по вашему выбору).