Как установить Ubuntu с шифрованием диска и SSD-кэшированием

10

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

У меня также есть ноутбук с SSD-накопителем mSATA 32 ГБ и вращающейся ржавчиной 750 ГБ. Моя текущая установка использует bcache, чтобы использовать это, установленное с помощью этой процедуры . Это обеспечивает очень приятное повышение производительности, и мне не нужно беспокоиться о заполнении SSD.

Это будет навязчивый вопрос. Награда будет присуждена за:

  • Четкий, надежный метод выполнения новой установки Ubuntu
    • Любой релиз приемлем, но 15.04 (Vivid) будет хорошо
  • Вся файловая система будет зашифрована
    • Здесь предпочтение отдается использованию соответствующего флажка в программе установки Ubiquity по умолчанию (шифрование dm-crypt)
  • Файловая система будет кешироваться на SSD
    • Относительно предпочтения, метод ядра dm-cache / lvmcache смотрите здесь, чтобы узнать, как сделать это с Debian Jessie.
    • Кеш также должен быть защищен (то есть зашифрован)
    • Должно быть четкое объяснение того, почему кеш также зашифрован

Я уже попробовал метод для Debian Jessie выше, но он отказывается загружаться для меня. До сих пор не пробовал метод, описанный в комментариях здесь .

Опубликованные решения будут протестированы на виртуальной машине VirtualBox с двумя пустыми виртуальными дисками и выпускной версией рабочего стола 15.04 (выпуск amd64). Баунти обращается к первому решению, которое я принимаю для переустановки моего реального оборудования.

Пожалуйста, напишите свое решение, как если бы оно входило в вики сообщества.


Я получил награду - я думаю, что еще есть потенциал для решения «LUKS-on-LVM», которое сочетает в себе простоту утвержденного ответа и наличие только одного пароля с использованием только компонентов устройства отображения.

Адриан
источник
Из того, что я понимаю, вы не хотите использовать lvmcache в LVM по умолчанию при установке Ubuntu LUKS, потому что кеш будет незашифрованным.
SolsTiCe
@solsTiCe - я так понял, что lvmcrypt, будучи хорошим легким слоем поверх dm-кеша, должен иметь возможность согласовать и с LUKS (LUKS - это еще одна вещь, отображающая устройства, dm-crypt), просто важно, в какую сторону вокруг вас слой вещей
Адриан
Вы должны понимать, что раздел / boot наверняка должен быть незашифрованным. bcache был несовместим с grub на Ubuntu 14.04, и я верю, что это так и есть.
Адам Рычковски,
@AdamRyczkowski Да, у меня есть эта конфигурация сейчас. Это приемлемо, но я бы предпочел конфигурацию LUKS.
Адриан
Я не понимаю, почему LUKS исключает bcache ... Они не зависят друг от друга, и один может с радостью сидеть друг на друге.
Адам Рычковски

Ответы:

7

ЛВМ на ЛУКС на bcache

Здесь русская кукольная игра немного глубже с 3 стеками / слоями ...

Моя первоначальная идея по этому вопросу состояла в том, чтобы использовать установку Ubuntu по умолчанию с LVM на LUKS и преобразовать ее в устройство резервного копирования bcache с блоками, но у меня не получилось в моем тесте с LVM.

Более того, установщик ubuntu ( ubiquity ) слишком ограничен для установки внутри заранее подготовленного устройства bcache (по крайней мере, с LUKS на LVM), поэтому мы отступаем к методу выполнения действий вручную.

Загрузитесь с live CD / USB, выберите «Try Ubuntu» и откройте терминал

Предварительно установить

sudo -i
# Define some variable to avoid confusion and error
luks_part=/dev/sda3
boot=/dev/sda2                    # boot partition
caching_bcache=/dev/sdb           # SSD or partition in SSD

# Do secure erase of encrypted backing and caching device (see Notes [1])
dd if=/dev/urandom of=$luks_part || dd if=/dev/urandom of=$caching_bcache
# Go and grab some coffe, this will take a while...

apt-get install bcache-tools
# Setup bcache caching and backing devices
make-bcache -C $caching_bcache -B $luks_part
# (Optional) Tweak bcache
echo writeback > /sys/block/bcache0/bcache/cache_mode

# Below we now create manually what ubiquity should have done for us
# Setup LUKS device on bcache device
cryptsetup --key-size 512 luksFormat /dev/bcache0
cryptsetup luksOpen /dev/bcache0 crypted

# Setup LVM on LUKS
# You can skip that part if you don't want to use a swap
# or don't want to use multiple partition. Use /dev/mapper/crypted
# as you root latter on
pvcreate  /dev/mapper/crypted
vgcreate vg /dev/mapper/crypted
lvcreate -L 1G vg -n swap
lvcreate -l 100%FREE vg -n root

Монтаж

Держите терминал открытым и запустите установку. Выберите «Нечто другое» при разбиении и укажите

  • ваш загрузочный раздел ( /dev/sda2)
  • ваш корневой раздел ( /dev/mapper/vg-root)
  • ваш обмен ( /dev/mapper/vg-swap)

и установите флажок для форматирования ваших разделов

В конце установки не перезагружайтесь, а просто нажмите «Продолжить пробовать ubuntu»

После установки

В нашем открытом терминале

# Install bcache-tools to add bcache module to initramfs
mount /dev/mapper/vg-root /mnt
mount $boot /mnt/boot
mount -o bind /sys /mnt/sys
mount -o bind /proc /mnt/proc
mount -o bind /dev /mnt/dev
chroot /mnt
# To get apt-get running in the chroot
echo 'nameserver 8.8.8.8' > /run/resolvconf/resolv.conf
apt-get install bcache-tools

# Create /etc/crypttab to add crypted bcached partition
echo "crypted UUID=`blkid -o value /dev/bcache0|head -1` none luks" > /etc/crypttab

exit
sync
umount /mnt/sys
umount /mnt/proc
umount /mnt/dev
umount /mnt/boot
umount /mnt
vgchange -an /dev/mapper/crypted
cryptsetup luksClose crypted
sync

# Reboot & enjoy

Существует известная ошибка перезагрузки Ubuntu 15.04 с Live CD / USB, поэтому вам может потребоваться принудительная перезагрузка / завершение работы

Проверьте

После загрузки вы можете проверить, что /dev/bcache0на самом деле это раздел LUKS с

if sudo cryptsetup isLuks /dev/bcache0; then \
    echo "crypted";\
    else echo "unencrypted";\
fi

Это потому, что это кеш вашего раздела LUKS, и теперь вы получаете доступ к своим данным через устройство, /dev/bcache0а не с исходного устройства поддержки ( /dev/sda3здесь)

Ссылки

http://bcache.evilpiepirate.org/

https://wiki.archlinux.org/index.php/Bcache

https://wiki.archlinux.org/index.php/Dm-crypt

Официально bcache-status еще не объединен с bcache-tools. Вы можете получить его здесь: https://gist.github.com/djwong/6343451

[1] Там может быть лучшим способом сделать это протирание

солнцестояние
источник
Обязательно запускайте update-initramfs -uk allпосле создания crypttab и следующей exitкоманды.
Десс
4

ЛВМ на ЛУКС + ЛУКС / дм-кеш

Установщик Ubuntu использует конфигурацию LVM on LUKS для полного шифрования диска.

Если вы также хотите использовать dm-cache / lvmcache для повышения производительности, вам потребуется поместить пул кэша в зашифрованный том, чтобы обеспечить безопасность ваших данных.

Шаги

  • Создайте том LUKS на целевом блочном устройстве
  • Расширьте группу томов по умолчанию новым зашифрованным томом LUKS
  • Создайте метаданные кэша и тома данных в новом томе LUKS.
  • Свяжите их вместе как пул кеша
  • Привязать этот пул кеша к корневому тому
  • Убедитесь, что новый зашифрованный том можно подключить при загрузке, добавив его в /etc/crypttab
  • Убедитесь, что ваша загрузочная среда поддерживает dm-кеш

Сценарий ниже предоставляет пример и добавит зашифрованный пул кэша в существующую корневую файловую систему. Он был разработан для систем, которые использовали опцию шифрования диска по умолчанию в установщике Ubuntu - т.е. весь диск разделен и зашифрован, нет пользовательских разделов и т. д.

Обратите внимание, что в этом сценарии очень мало проверочного или защитного программирования. Если это разрушает вашу рабочую систему, это ваша ответственность.

Звоните так:

# 1   2          3           4     5    6
sudo bash lvmcryptocache /dev/sdb 32M 1968M
  1. Нужен рут для работы
  2. запустить скрипт в bash
  3. название сценария
  4. блочное устройство, которое вы хотите использовать (тестируется только с целым диском)
  5. размер метаданных
  6. размер данных кеша

Параметры размера по умолчанию указаны в МБ: вам потребуется соотношение пространства метаданных 1: 1000 к пространству кэша (например, если ваш кэш-диск имеет размер 180 ГБ, вам нужно 180 МБ пространства метаданных и 179820 МБ пространства данных - вы можете захотеть округлить немного метаданных, чтобы быть осторожным. Для метаданных 8M существует нижний предел.)

Вам будет предложено ввести пароль для вашего тома кеша - вам будет предложено ввести пароль для ОБА ваших дисков во время загрузки.

Ссылки


#! / Bin / Баш
#
# lvmcryptocache
#
# Добавьте пул LVM-кеша и присоедините его к корневому тому
# Включая шифрование LUKS
# Предполагается, что вы используете установку "все в корне"
# Если нет, адаптируйте его, если хотите
#
# Скрипт лицензированный GPL3 или новее
# © Адриан Уилкинс май 2015
#
# Передайте имя дискового устройства, которое вы используете в качестве кеша
# Это в идеале должно быть абсолютно пустым, поэтому запустите
#
# dd if = / dev / zero of = / dev / $ {DISK}
#
# над этим ненадолго, чтобы уничтожить таблицу разделов

CACHE_DISK = $ 1
META_SIZE = $ 2
DATA_SIZE = $ 3

DISK_NAME = $ (базовое имя $ CACHE_DISK)

CRYPT_VOLUME = $ {DISK_NAME} _crypt
CACHE_PV = / DEV / картографа / $ {CRYPT_VOLUME}

# Создать том LUKS на сыром диске

cryptsetup luksFormat $ CACHE_DISK
cryptsetup open - type luks $ CACHE_DISK $ CRYPT_VOLUME

# Начал пытаться определить размер диска, но это сложно
# Пойдите, если хотите, я исчерпал экстенты
#
# DISK_SIZE = $ (fdisk -l | grep "Диск $ {CACHE_DISK}" | awk '{print $ 5}')
# 
# META_SIZE = $ ((DISK_SIZE / 1000))
# META_SIZE = $ ((META_SIZE + 512))
# MOD = $ ((META_SIZE% 512))
# MOD_OFFSET = $ ((512 - MOD))
# META_SIZE = $ ((META_SIZE + 512)) 
# META_SIZE = $ ((META_SIZE + MOD_OFFSET))
# 
# DATA_SIZE = $ ((DISK_SIZE - META_SIZE))
# 

# Создать новый PV внутри зашифрованного тома

pvcreate $ CACHE_PV
vgextend ubuntu-vg $ CACHE_PV
lvcreate -L $ {META_SIZE} -n cachemeta ubuntu-vg $ CACHE_PV
lvcreate -L $ {DATA_SIZE} -n cachedata ubuntu-vg $ CACHE_PV
lvconvert - type cache-pool --poolmetadata ubuntu-vg / cachemeta --cachemode перезаписать ubuntu-vg / cachedata --yes
lvconvert - тип кеша --cachepool ubuntu-vg / cachedata ubuntu-vg / root

# Теперь добавьте UUID пула кеша PHYSICAL DRIVE (/ dev / sdb) в / etc / crypttab
DISK_UUID = $ (ls -al / dev / disk / by-uuid / | grep $ DISK_NAME | awk '{print $ 9}')
echo "$ {CRYPT_VOLUME} UUID = $ {DISK_UUID} none luks, отбросить" >> / etc / crypttab

apt-get install --yes thin-provisioning-tools

HOOK = $ (временные файлы)
# Добавить скрипт подключения к initramfs, чтобы добавить нужные инструменты и модули

echo "#! / bin / sh"> $ HOOK
echo "PREREQ =" lvm2 "" >> $ HOOK
echo "prereqs ()" >> $ HOOK
echo "{" >> $ HOOK
echo "echo \" $ PREREQ \ "" >> $ HOOK
echo "}" >> $ HOOK
echo "case $ 1 in" >> $ HOOK
echo "prereqs)" >> $ HOOK
echo "prereqs" >> $ HOOK
echo "exit 0" >> $ HOOK
echo ";;" >> $ HOOK
echo "esac" >> $ HOOK
echo "if [! -x / usr / sbin / cache_check]; затем" >> $ HOOK
echo "exit 0" >> $ HOOK
echo "fi" >> $ HOOK
echo ". / usr / share / initramfs-tools / hook-functions" >> $ HOOK
echo "copy_exec / usr / sbin / cache_check" >> $ HOOK
echo "manual_add_modules dm_cache dm_cache_mq dm_persistent_data dm_bufio" >> $ HOOK

cp $ HOOK / etc / initramfs-tools / hooks / lvmcache
chmod + x / etc / initramfs-tools / hooks / lvmcache

echo "dm_cache" >> / etc / initramfs-tools / modules
echo "dm_cache_mq" >> / etc / initramfs-tools / modules
echo "dm_persistent_data" >> / etc / initramfs-tools / modules
echo "dm_bufio" >> / etc / initramfs-tools / modules

# Обновить initramfs

update-initramfs -u

echo Теперь перезагрузись!
Адриан
источник
1. Вы предлагаете очистить кэш-диск нулями, но вместо этого вам следует безопасно стереть его случайными данными, если вы хотите поместить на него зашифрованные УДАЧИ. 2. В вашей настройке у вас есть 2 раздела LUKS, поэтому даже если вы используете одну и ту же фразу-пароль, вы должны ввести ее дважды, верно?
SolsTiCe
1. Произвольная очистка диска на современном оборудовании несколько устарела - нулей достаточно, чтобы диск оказался за пределами большинства неакадемических мер и, конечно, за пределами коммерческих лабораторий по восстановлению дисков. Если том, который вы используете, ранее содержал конфиденциальные данные, он не нужен, поскольку все записанные в него блоки будут зашифрованы; из-за алгоритмов выравнивания износа вы не должны использовать твердотельный накопитель, на котором вообще есть данные, чувствительные к тексту. 2. Да, есть 2 раздела LUKS, как я уже сказал в тексте, вам будет предложено ввести обе пароли во время загрузки.
Адриан
случайное стирание не для безопасного удаления данных на SSD, а для предотвращения проверки и возможности отличить зашифрованные данные от пустых, таких как 00000000zerazer000000000000. Здесь вы можете увидеть зашифрованные данные в середине. это ослабляет ваше шифрование вместо того, чтобы быть скрытым в середине случайного супа.
SolsTiCe
В итоге я пошел по этому маршруту после того, как застрял, настраивая bcache. Похоже, это работает довольно хорошо | cache_utilization_pct | 79.096846147 |. Однако в topштатах Айова ожидают 20-50% постоянно. Может ли это быть побочным эффектом буферизации?
Жан Джордаан
Я не могу утверждать, что знаю - но я предполагаю, что это может быть побочным эффектом оптимизации, связанной с минимизацией записи на SSD. Статья о IOWait здесь: thattommyhall.com/2011/02/18/iops-linux-iostat
Адриан