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

18

Недавно я установил ubuntu server 11.04 с полным lvm-шифрованием (установленным из установки). Теперь я хочу использовать ключевой файл для автоматической разблокировки. Я попытался следовать этому руководству Ссылка

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

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

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

    
задан isoman 01.09.2011 в 00:21
источник

4 ответа

24

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

Настройка:

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

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

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

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

Скажите cryptsetup новый ключ (это важно, а не имя файла):

sudo cryptsetup luksAddKey /dev/sda5 keyfile

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

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

    
ответ дан Randy Orrison 28.12.2011 в 00:57
6

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

#!/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  | cut -d: -f1)
filepath=$(echo  | 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 , и все будет готово.

    
ответ дан VarunAgw 05.08.2015 в 16:15
4

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

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

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

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

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

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] и что имя будет [то же имя = введите].

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

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

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

sudo nano /etc/fstab

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

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

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

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

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

sudo mount -a
    
ответ дан The New Guy 01.08.2013 в 22:59
0

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

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

Reeboot и все работает нормально, как предполагалось.

    
ответ дан mukul kirtane 06.03.2018 в 12:01