Як налаштувати LVM & LUKS для автоматичного розшифрування розділу?


21

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

Дякую за допомогу .


Ви маєте на увазі розшифрувати, не вводячи парольну фразу? Якщо процес завантаження міг би зробити це, то ключі, необхідні для розшифровки гучності, повинні були бути в системі, десь доступна під час завантаження. Як би ви розраховували, що захистить вас від крадіжок даних?
— Джеймс Генстридж

так, я думаю, що я покладу ключ у прихований розділ або флешку. Це можливо?
— isoman

Проблема полягає в тому, що якщо завантажувач може знайти ключ, то хтось, що перевіряє (незашифрований) код завантаження, також зможе знайти його. Якщо ви зберігаєте ключ на USB-накопичувачі, ви хочете бути повністю впевнені, що паличка не буде вкрадена у комп'ютера. Якщо ви збираєтесь підключити паличку лише під час завантаження, це не зручніше, ніж введення парольної фрази.
— Джеймс Генстридж

Відповіді:


27

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


3
Якщо ви не знаєте, як отримати запит на введення пароля, ви можете скористатися завантажувальним розділом на флешці для завантаження через альтернативні програми 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; Не вдалося встановити залежність для Crypto Setup для sda7crypt." Звичайно, його вже монтував initram, але .... Що я роблю неправильно?
— deitch

1
Чомусь це, схоже, не подобається / працює з systemd; він просто ігнорує keyscriptполе взагалі.
— Етьєн Брюйнз

1
У Ubuntu 17.10+ інструмент update-initramfs не генерує зображення initramfs, здатне завантажувати лук-том, якщо ваша коренева файлова система має об'ємний вміст і має файл ключа. Ви можете змусити його працювати, залишивши "жодне" як значення файлу ключових слів і встановивши параметри, щоб мати keycript = / etc / my-keycript, де / etc / my-keyscript є скриптом оболонки, який виводить ключ.
— Маціл

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

Крок 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 закриває нано, але спочатку він запитує зберегти файл [так = ввести], і яке ім'я має бути [те саме ім'я = ввести].

Що ми там зробили насправді, це те, що / 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

1
ви забудете оновити initramfs, потрібні 100%
— 3pic

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 $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 / script / unlock_custom) і chmod це 755. Не впевнений, що сплеск чи копіювання у певному місці змусили його працювати для мене, але він не працював раніше. У будь-якому випадку, він працює, але під час завантаження, коли Startet AppArmor initialization.я отримую: Запуск завдання запущений для dev-disk keyfile.device (1m 30s). Після початку 90-х X я можу використовувати свою систему ... не маю уявлення, як виправити цю стартову роботу ...
— firepol

1

@deitch У мене була така ж установка, як @Randy Orrison і наткнувся на ту ж проблему, що і ви, і виявляється, це помилка systemd, яка намагається знову змонтувати / файлову систему, коли знаходить відповідний запис у / etc / crypttab.

Щоб вирішити це, я щойно видалив запис для sda5_crypt з / etc / crypttab, коли команда update-initramfs -uv була запущена.

Перезавантажте і все працює нормально, як задумано.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.