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

Я недавно установил 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он запрашивает у меня парольную фразу, и когда я ее ставлю, ничего не происходит, ничего не выводится на экран! Я игнорирую это и продолжаю другие шаги и перезагружаюсь, но ничего не случилось, и это просит пароль.

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

4 ответа

Я только что прошел через это на моем новом домашнем сервере, это заняло много поисков и поисков, но у меня все получилось. Я попытаюсь воспроизвести шаги здесь. Я использую 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-накопитель отсутствует, это было бы удобно в качестве запасного варианта. Надеюсь, это поможет, любые дополнения или исправления будут более чем приветствоваться!

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

#!/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 и вы сделали.

Эти инструкции от 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

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

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

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

Другие вопросы по тегам