Полное шифрование диска с двухфакторной аутентификацией для Ubuntu: как?

9

Исходная информация

Я новичок в Linux, недавно отученный от Windows. В настоящее время я использую Ubuntu 11.04 без полного шифрования диска. Только мой домашний каталог зашифрован, и с eCryptFS. В последнее время я начал замечать, что шифрование не так прозрачно, как должно быть. Например, VMWare иногда сталкивается с проблемами для виртуальных машин, хранящихся в моем зашифрованном домашнем каталоге, поэтому я просто переместил виртуальные машины в незашифрованное место и связался с ним из моего зашифрованного домашнего каталога. Но это не главное: я понял, что на самом деле не очень безопасно оставлять систему незашифрованной, поскольку операционную систему с открытым исходным кодом, такую ​​как Ubuntu, очень легко изменить, чтобы разглашать информацию, которую предполагается хранить в секрете.


Цель

Я хотел бы иметь возможность работать с полным шифрованием диска вместе с ключевым устройством и паролем для аутентификации перед загрузкой.


Требования / Детали

  1. Весь диск должен быть зашифрован. Как минимум, диск состоит из отдельных разделов, которые все зашифрованы. Если есть возможность скрыть даже разделы с шифрованием, я пойду на это. Чем прозрачнее шифрование, тем лучше; Я не должен использовать свой компьютер по-другому или настраивать что-либо еще.
  2. Устройство, используемое для разблокировки и загрузки зашифрованного раздела, должно быть небольшим внешним портативным устройством. Это служит двум целям: гораздо менее вероятно, что загрузчик будет изменен в злонамеренных целях, поскольку он останется со мной, когда он не используется; и файлы ключей для дешифрования диска нигде не будут найдены на самом зашифрованном диске в любой форме.
  3. Файлы ключей должны быть зашифрованы паролем. В случае потери компьютера и USB-устройства данные и операционная система будут в безопасности. Если я потеряю USB-ключ или он скомпрометирован, я могу создать еще один чистый из резервной копии. В обоих случаях информация не разглашается. Конечно, если я потеряю свой компьютер, это несущественно.

Да, я смотрел на руководства из многих мест, но проблема в том, что они не отвечают всем требованиям (особенно номер 3). Я почти уверен, что мои требования достаточно распространены, чтобы кто-то уже пытался и успешно реализовал такую ​​настройку. Я был бы признателен, если бы любой профессионал Linux мог поделиться решением.

Кевин Ли
источник
2
«Поскольку операционную систему с открытым исходным кодом, такую ​​как Ubuntu, очень легко изменить, чтобы разглашать информацию, она должна оставаться в секрете». - Вы будете удивлены, насколько легко убедить ОС с закрытым исходным кодом сделать то же самое. Тот факт, что программа с открытым исходным кодом ничего не значит о ее безопасности или незащищенности от локальных атак.
user1686

Ответы:

2

Есть простой способ иметь полное шифрование диска, которое требует наличия определенного флэш-накопителя и вашего пароля для загрузки.

Вы отсоединяете заголовок LUKS от полностью зашифрованного жесткого диска и сохраняете его на своем флэш-накопителе.

Я предполагаю, что у вас уже есть следующие настройки:

# /dev/sda1 is the boot partition (100MB)
# /dev/sda2 is the encrypted partition
parted /dev/sda mklabel msdos
parted /dev/sda -- mkpart primary ext2 1M 200M
parted /dev/sda -- mkpart primary ext4 200M -100M
cryptsetup luksFormat /dev/sda2

Создайте копию заголовка luks и удалите его с локального устройства:

mkdir /media/ramdisk && mount -t tmpfs -osize=20m,rw tmpfs /media/ramdisk
cryptsetup luksHeaderBackup /dev/sda2 --header-backup-file /media/ramdisk/header.img
dd if=/dev/urandom of=/dev/sda2 bs=1M count=2

Выполните последний шаг несколько раз, если вы являетесь целью высокобюджетного агентства. Я также создал виртуальный диск для временного хранения заголовка, чтобы он не задерживался после этого.

С вашим USB-устройством в / dev / sdb создайте раздел размером 2 МБ и загрузите на него заголовок:

parted /dev/sdb -- mklabel MSDOS
parted /dev/sdb -- mkpart primary 1M 3M
dd if=/media/ramdisk/header.img of=/dev/sdb1

Прямо сейчас все в / dev / sda2 выглядит как случайные данные, и у вас есть заголовок в / dev / sdb1. Для доступа к зашифрованному диску вручную вы используете:

cryptsetup luksOpen --header /dev/sdb1 /dev/sda2 rootfs
mount /dev/mapper/rootfs /target

Следующим шагом будет процесс загрузки, который попросит вставить pendrive при загрузке. Мне было проще предположить, что он будет там, и иначе не получится. Сначала узнайте идентификатор вашего устройства и UUID:

find -L /dev/disk/by-id/ -samefile /dev/sdb1
/dev/disk/by-id/usb-Generic-_Compact_Flash-part1
find -L /dev/disk/by-id/ -samefile /dev/sda2
/dev/disk/by-id/scsi-SATA_ST3320820AS_5QF28W6V-part2

blkid /dev/sdb1
/dev/sdb1: UUID="63347546-2db3-4bc1-9414-1142739a4c9f" TYPE="crypto_LUKS"

Затем отредактируйте свою /etc/crypttabстроку, чтобы она выглядела так:

root /dev/disk/by-id/scsi-SATA_ST3320820AS_5QF28W6V-part2 none luks,header=/dev/disk/by-id/usb-Generic-_Compact_Flash-part1

(Вам может понадобиться этот патч, чтобы получить поддержку для headerопции в crypttab)

И последнее, но не менее важное: обновите свой initram:

update-initramfs -u

Вы могли бы пойти дальше и получить загрузочный раздел на USB-диске . Автор этой статьи находился на этом сайте и делал последующие действия .

Есть много разных подходов, которые вы можете использовать , с различной степенью безопасности и удобства.

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

ВНП
источник
1

Я знаю, что TrueCrypt доступен для OSX, Windows и Linux. Вы можете сделать два уровня шифрования для всего диска. Я использовал его в Debian с полным шифрованием диска AES. Для доступа к данным на жестком диске требуется пароль при загрузке.

kobaltz
источник
3
Я думал, что полное шифрование диска TrueCrypt работает только с Windows.
Кевин Ли
two levels of encryption for the whole drive! =two factor auth
GnP