Как настроить LVM & LUKS для автоматического дешифрования раздела?


21

Я недавно установил Ubuntu Server 11.04 с полным шифрованием lvm (устанавливается из программы установки). Теперь я хочу использовать ключевой файл для автоматической разблокировки. Я пытался следовать этому руководству http://ubuntuforums.org/showthread.php?t=837416

Я сгенерировал ключ с помощью этой команды: sudo dd if=/dev/urandom of=/boot/grub/keyfile bs=1024 count=4

я вставил это, /boot/grubпотому что я думаю, что это не зашифровано. Когда я пытаюсь добавить ключ с этой запятой, sudo cryptsetup luksAddKey /dev/sdX /boot/grub/keyfile он запрашивает у меня пароль, а когда я его ставлю, ничего не происходит, на экран ничего не выводится ! Я игнорирую это и продолжаю другие шаги и перезагружаюсь, но ничего не случилось, и это просит пароль.

Спасибо за помощь .


Вы имеете в виду расшифровать, не вводя парольную фразу? Если процесс загрузки может сделать это, то ключи, необходимые для расшифровки тома, должны быть в системе где-нибудь доступными во время загрузки. Как вы ожидаете, что это защитит вас от кражи данных?
Джеймс Хенстридж

да, я думаю, что я положу ключ в скрытый раздел или флешку. Это возможно ?
Изоман

Проблема в том, что если загрузчик может найти ключ, то кто-нибудь, проверяющий (незашифрованный) загрузочный код, также сможет найти его. Если вы храните ключ на USB-накопителе, вы должны быть уверены, что его не украдут вместе с компьютером. Если вы собираетесь подключить флешку только во время загрузки, это не более удобно, чем ввод парольной фразы.
Джеймс Хенстридж

Как остановить автоматическое дешифрование: askubuntu.com/questions/615408/…
Сиро Сантилли 新疆 改造 中 C iro 六四 事件

Ответы:


27

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

Настроить:

  • / dev / sda1 - мой незашифрованный / загрузочный раздел
  • / dev / sda5 - мой раздел lvm, который содержит все остальное - root, swap и home
  • / dev / sdc1 - это раздел на моей флешке, где я буду хранить ключевой файл

Сначала я создал ключевой файл, просто в моем домашнем каталоге:

dd if=/dev/urandom of=keyfile bs=512 count=4

(Вы можете использовать больший размер блока или считать для большего ключа)

Сообщите cryptsetup новый ключ (важно содержимое, а не имя файла):

sudo cryptsetup luksAddKey /dev/sda5 keyfile

Затем я отформатировал USB-накопитель с ext2 и дал ему метку. Я использовал метку, чтобы потом можно было смонтировать ее по метке и заменить флешку на случай, если что-то пойдет не так.

sudo mkfs -t ext2 /dev/sdc1
sudo e2label /dev/sdc1 KEYS

(конечно, ваше устройство будет отличаться)

Теперь скопируйте ключевой файл на USB-накопитель, принадлежащий корневому режиму 400:

mkdir KEYS
sudo mount /dev/sdc1 KEYS
sudo cp keyfile KEYS
sudo chown root KEYS/keyfile
sudo chmod 400 KEYS/keyfile

Измените / etc / crypttab. Шахта изначально содержалась

sd5_crypt UUID=(...) none luks

который я изменил на

sd5_crypt UUID=(...) /dev/disk/by-label/KEYS:/keyfile luks,keyscript=/lib/cryptsetup/scripts/passdev

Наконец, обновите initramfs:

sudo update-initramfs -uv

Теперь он загружается с помощью ключевого файла на USB-накопителе. Если я извлекаю флешку (скажем, когда ухожу в отпуск), она не загружается, и мои данные в безопасности.

Если кто-нибудь знает, как заставить его запросить фразу-пароль, если USB-накопитель отсутствует, это было бы удобно в качестве запасного варианта. Надеюсь, это поможет, любые дополнения или исправления будут более чем приветствоваться!


3
Если вы не знаете, как получить приглашение на ввод пароля, вы можете использовать загрузочный раздел на флэш-диске для загрузки через альтернативный файл initramfs, который ищет ключевой файл, и иметь загрузку по умолчанию на жестком диске для загрузки обычного файла initramfs, который запрашивает пароль.
Восстановить Монику - ζ--

1
@ 3pic Я не уверен на 100%, так как сделал это несколько месяцев назад. Но Ubuntu загружается в виртуальную файловую систему. keyscript=/lib/cryptsetup/scripts/passdevдобавляет passdevскрипт к нему. А затем update-initramfs -uvперестраивает архив файловой системы.
VarunAgw

1
@RandyOrrison это действительно здорово. Оно работает. Но ... после того, как он проходит через initram, он сидит в течение минуты или двух минут A start job is running for dev-sda8:-keyfile.device (1min 18s...)и т. Д. Он проходит, все монтируется, но некоторое время зависает. В журнале говорится: «Превышено время ожидания устройства dev-sda8: -sda7keyfile.device; сбой зависимости для установки криптографии для sda7crypt». Конечно, он уже был смонтирован initram, но .... Что я делаю не так?
Deitch

1
По какой-то причине он не работает с systemd; он просто полностью игнорирует keyscriptполе.
Этьен Брюинз

1
В Ubuntu 17.10+ инструмент update-initramfs не будет генерировать образ initramfs, способный загружать том luks, если ваша корневая файловая система находится на томе luks и имеет файл ключа. Вы можете заставить его работать, оставив «none» в качестве значения ключевого файла и установив для параметров значение keyscript = / etc / my-keyscript, где / etc / my-keyscript - это сценарий оболочки, который печатает ключ.
Macil

6

Эти инструкции от howtoforge.com заставили меня начать работу с автоматически расшифровываемым томом.

Как автоматически разблокировать зашифрованные диски LUKS с помощью ключевого файла

Шаг 1: Создать случайный ключевой файл

sudo dd if=/dev/urandom of=/root/keyfile bs=1024 count=4

Шаг 2: Сделать ключевой файл доступным только для чтения для root

sudo chmod 0400 /root/keyfile

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

Вы также можете выбрать нужный ключевой файл для root: root и переместить его в папку / root.

Шаг 3: Добавьте ключевой файл в LUKS

Устройства с поддержкой LUKS / dm_crypt могут хранить до 10 различных ключевых файлов / паролей. Итак, рядом с уже установленным паролем мы собираемся добавить этот ключевой файл в качестве дополнительного метода авторизации.

sudo cryptsetup luksAddKey /dev/sdX /root/keyfile

SDX, конечно, ваше устройство LUKS.

Сначала вам будет предложено ввести (существующий) пароль для разблокировки диска. Если все работает хорошо, вы должны получить такой вывод:

Enter any LUKS passphrase:
key slot 0 unlocked.
Command successful.

Шаг 4: Создайте маппер

Устройства LUKS должны создать преобразователь, на который затем можно ссылаться в fstab. Откройте / etc / crypttab

sudo nano /etc/crypttab

и добавьте затем строку вроде этого:

sdX_crypt      /dev/sdX  /root/keyfile  luks

или вы можете использовать UUID устройства:

sdX_crypt      /dev/disk/by-uuid/247ad289-dbe5-4419-9965-e3cd30f0b080  /root/keyfile  luks

sdX_crypt - это имя создаваемого преобразователя. Вы можете использовать любое имя, например, «музыка», «фильмы» или «sfdsfawe» ....

Сохраните и закройте файл, нажав Ctrl-X, введите, введите. Ctrl-x закрывает nano, но сначала просит сохранить файл [yes = enter] и какое имя должно быть [same name = enter].

То, что мы сделали там, на самом деле говорит, что / root / keyfile должен использоваться вместо ввода пароля для разблокировки диска.

Шаг 5: монтируем устройство в fstab

Теперь у нас есть разблокированное устройство (ну, пока нет, но когда система загружается), и нам просто нужно смонтировать его сейчас. Откройте / etc / fstab:

sudo nano /etc/fstab

и добавьте новую запись, например:

/dev/mapper/sdX_crypt  /media/sdX     ext3    defaults        0       2

Убедитесь, что у вас есть правильное имя сопоставителя, которое вы добавили в шаге 4. Также убедитесь, что точка / папка монтирования существует. После добавления сохраните файл и закройте его (ctrl-x, enter, enter).

Шаг 6: перезагрузка или перемонтирование

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

sudo mount -a

1
Вы забыли обновить initramfs, 100% необходимо
3pic

6

Улучшение ответ Рэнди Orrison в , вот небольшой скрипт , я создал, что сделает систему запасной вариант , чтобы спрашивать у пользователя пароль , если он не может найти файл_ключа.

#!/bin/sh

ask_for_password () {
    cryptkey="Unlocking the disk $cryptsource ($crypttarget)\nEnter passphrase: "
    if [ -x /bin/plymouth ] && plymouth --ping; then
        cryptkeyscript="plymouth ask-for-password --prompt"
        cryptkey=$(printf "$cryptkey")
    else
        cryptkeyscript="/lib/cryptsetup/askpass"
    fi
    $cryptkeyscript "$cryptkey"
}

device=$(echo $1 | cut -d: -f1)
filepath=$(echo $1 | cut -d: -f2)

# Ask for password if device doesn't exist
if [ ! -b $device ]; then
    ask_for_password
    exit
fi

mkdir /tmp/auto_unlocker
mount $device /tmp/auto_unlocker

# Again ask for password if device exist but file doesn't exist
if [ ! -e /tmp/auto_unlocker$filepath ]; then
    ask_for_password
else
    cat /tmp/auto_unlocker$filepath
fi

umount /tmp/auto_unlocker

Сохранить его и заменить keyscript=/lib/cryptsetup/scripts/passdevна /etc/crypttabна пути к этому файлу и запустить , sudo update-initramfs -uvи вы сделали.


Я думаю, что ваше решение не работает для USB-накопителей для более чем одного ключевого файла. Я имею в виду, если у меня более одного зашифрованного раздела (home, swap, root). Похоже, что он не отключает драйвер USB после команды cat. У вас есть идеи, как это исправить?
Хамидулла

Это работает для меня (Xubuntu 17.10), но мне пришлось отредактировать grub и удалить «splash». Также мне пришлось сохранить файл в правильном месте (/ lib / cryptsetup / scripts / unlock_custom) и chmod 755. Не уверен, что заставка или копирование в определенном месте помогли мне, но раньше он не работал. Во всяком случае, это работает, но при загрузке, после того как Startet AppArmor initialization.я получаю: запускается задание запуска для dev-disk keyfile.device (1 м 30 с). После начала 90-х Х и я могу использовать свою систему ... не знаю, как исправить это начальное задание ...
firepol

1

@deitch У меня была такая же настройка, как у @Randy Orrison, и я столкнулся с той же проблемой, что и вы, и оказалось, что это ошибка systemd, которая пытается снова смонтировать / filesystem, когда находит соответствующую запись в / etc / crypttab.

Чтобы решить эту проблему, я просто удалил запись для sda5_crypt из / etc / crypttab после запуска команды update-initramfs -uv.

Перезагружаешься и все работает нормально, как задумано.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.