Як налаштувати 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.