Что относительно того, чтобы использовать управление конфигурацией как марионетка или шеф-повар? Это - возможно, немногим более, чем вершина только для одного сценария, но если Вам нужны несколько таких сценариев, это могло бы стоить для рассмотрения.
Можно использовать /lib/cryptsetup/scripts/decrypt_derived
в Вашем crypttab
автоматически использовать ключ от одного диска для другого.
decrypt_derived
сценарий является частью cryptsetup пакета Debian.
Небольшой пример для добавления ключа от sda6crypt до sda5:
/lib/cryptsetup/scripts/decrypt_derived sda6crypt > /path/to/mykeyfile
cryptsetup luksAddKey /dev/sda5 /path/to/mykeyfile
ls -la /dev/disk/by-uuid/ | grep sda5
echo "sda5crypt UUID=<uuid> sda6crypt luks,keyscript=/lib/cryptsetup/scripts/decrypt_derived" >> /etc/crypttab
shred -u /path/to/mykeyfile # remove the keyfile
Поскольку в наше время очень трудно действительно удалить файл, гарантировать, что/path/to/mykeyfile находится на зашифрованном диске (sda6crypt
было бы в моем примере хорошее решение).
В целом можно добавить дополнительный уровень безопасности при помощи шифрования файловой системы пространства пользователя, например, через encfs
.
Основываясь на ответе Джофеля, вот тот же пример, но без сохранения ключа в файле. Ключ передается в именованном канале, который ничего не сохраняет на диск.
Вы можете использовать /lib/cryptsetup/scripts/decrypt_derived
в своем crypttab, чтобы автоматически использовать ключ с одного диска для другого. Скрипт decrypt_derived
является частью пакета cryptsetup Debian.
Измененный пример для добавления ключа из sda6crypt в sda5:
mkfifo fifo
/lib/cryptsetup/scripts/decrypt_derived sda6crypt > fifo &
cryptsetup luksAddKey /dev/sda5 fifo
rm fifo
ls -la /dev/disk/by-uuid/ | grep sda5
echo "sda5crypt UUID=<uuid> sda6crypt luks,initramfs,keyscript=/lib/cryptsetup/scripts/decrypt_derived" >> /etc/crypttab
Параметр keyscript
работает только в том случае, если crypttab
обрабатывается оригинальными инструментами cryptsetup Debian, повторная реализация systemd в настоящее время не поддерживает его. Если ваша система использует systemd (, то есть большинство систем ), вам нужна опция initramfs
, чтобы принудительно выполнить обработку в initrd с помощью инструментов cryptsetup перед запуском systemd.
decrypt_derived
имеет единственное преимущество, что нет никакого файла ключей. Если кто-то может получить корневой доступ, Вы обычно теряетесь так или иначе. Чтение файлы ключей могло быть немного легче для злоумышленника, чем запущение скрипта. Для получения большей безопасности можно укрепить систему при помощи, например, Linux TOMOYO, AppAmor, ВКУС, SELinux, grsecurity... но это требует дополнительных усилий. И вопрос, если это стоит, затем более важен. Не забывайте иметь резервное копирование ключа или отдельного ключа для случая, который разрушает диск, где ключ получен из на. – jofel 24.02.2012, 11:19