Можно ли зашифровать жесткий диск с помощью ключевого файла вместо пароля?
14
Заглядывая в шифрование жесткого диска. Похоже, что переход к решению - это dm-crypt с LUKS с использованием пароля. Я работаю с несколькими независимыми жесткими дисками, смонтированными в пул дисков для чтения. В этом случае мне приходится вводить пароль несколько раз.
Есть ли способ для меня зашифровать жесткие диски с помощью ключевого файла, может быть, положить его на USB-накопитель и просто подключить его при необходимости ??
Один из лучших способов сделать это - использовать смарт-карту с криптографическим ключом для разблокировки ключей зашифрованных блочных устройств. Вам нужно будет ввести кодовую фразу (называемую «PIN-кодом» инструментами, но на самом деле это пароль) один раз, после чего она будет кэширована. Это дает дополнительное преимущество защиты зашифрованных данных с помощью чего-то, что у вас есть (самой смарт-карты, из которой не может быть извлечен закрытый ключ) и чего-то, что вы знаете (ключевая фраза).
В Debian и его производных инструменты initramfs заметят скрипт и скопируют все необходимые инструменты и демоны для автоматического доступа к смарт-карте в initramfs.
Информация о настройке смарт-карты и создании (и шифровании) ключей находится в /usr/share/doc/cryptsetup/README.opensc.gz.
Замечания по реализации : Эта функция имеет острые края и, очевидно, не работает сразу после установки, поэтому YMMV. В прошлый раз, когда я успешно достиг этого, мне пришлось добавить следующие хаки:
Отключите, systemdпотому что он катастрофически пытается взять на себя весь процесс настройки зашифрованных устройств, /etc/crypttabно ничего не знает о том, keyscriptчто приводит к большому отказу. К счастью, в Debian вы все еще можете отказаться systemd.
Установите этот скрипт верхнего уровня, /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
Очень хороший стимул использовать смарт-карты и репутацию для достижения этой цели, но я бы сказал, что метод, специфичный для дистрибутива, который включает в себя изменение системы инициализации и сторонних хакерских сценариев, помещаемых в системные каталоги с нечитаемыми путями, не может рассматриваться как ответ на вопрос: использовать файлы паролей вопрос. Подчеркивает невероятный беспорядок, эти программы, хотя.
дбанет
@dbanet, я полностью согласен и надеюсь, что кто-то еще придет и добавит ответ, описывающий, как это сделать каким-то другим более простым способом. Тогда ОП может выбрать своего любимого.
Селада
dbanet и @Celada, именно мои мысли. Это слишком сложно, и даже если мне удастся сделать это, это запатентовано, то есть у другого поставщика будет другой метод. :(
Нитин
3
Можно просто сохранить пароль luks в файле.
Я использую это на своем домашнем компьютере; Корневая файловая система работает на томе luks, который я разблокирую парольной фразой при загрузке. Дополнительный диск содержит том luks с сгенерированным паролем.
Этот дополнительный том разблокируется файлом паролей, который находится в зашифрованной корневой файловой системе. Он автоматически разблокируется во время загрузки, если корневая файловая система разблокирована.
Третье поле - это файл ключей noneдля корневой файловой системы, но /etc/crypt-data.keyдля файловой системы данных. /etc/crypt-data.keyсодержит пароль luks:
Tm90IHJlYWxseSBteSBwYXNzd29yZC4K
Обратите внимание, что новая строка или любой другой пробел будут приняты как часть пароля! Позаботьтесь о том, чтобы создать этот файл без завершающей строки. Кроме того, убедитесь, что у него есть строгие разрешения:
Можно просто сохранить пароль luks в файле.
Я использую это на своем домашнем компьютере; Корневая файловая система работает на томе luks, который я разблокирую парольной фразой при загрузке. Дополнительный диск содержит том luks с сгенерированным паролем.
Этот дополнительный том разблокируется файлом паролей, который находится в зашифрованной корневой файловой системе. Он автоматически разблокируется во время загрузки, если корневая файловая система разблокирована.
Моя
/etc/crypttab
выглядит так:Третье поле - это файл ключей
none
для корневой файловой системы, но/etc/crypt-data.key
для файловой системы данных./etc/crypt-data.key
содержит пароль luks:Обратите внимание, что новая строка или любой другой пробел будут приняты как часть пароля! Позаботьтесь о том, чтобы создать этот файл без завершающей строки. Кроме того, убедитесь, что у него есть строгие разрешения:
Вы должны иметь возможность продублировать этот подход для нескольких томов (либо с разными паролями, либо с одним общим паролем, на ваш выбор).
источник
/etc/crypttab
. Я добавил немного дополнительного текста, чтобы сделать это понятнее.