Как установить Ubuntu с помощью шифрования диска и кэширования SSD

10

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

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

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

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

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

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

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

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

задан Adrian 07.05.2015 в 08:23
источник

2 ответа

7

LVM на LUKS на bcache

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

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

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

Загрузите Live CD / USB и выберите «Попробуйте 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 здесь)

Ссылки

Ссылка

Ссылка

Ссылка

bcache-status официально не объединяется в инструменты bcache. Вы можете найти его здесь: Ссылка

[1] Могут быть более эффективные способы этого вытирать

    
ответ дан solsTiCe 08.05.2015 в 16:42
источник
4

LVM на LUKS + LUKS / dm-cache

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

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

Этапы

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

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

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

Вызовите так:

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

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

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

Ссылки

#!/bin/bash
#
# lvmcryptocache
#
# Add an LVM cache pool on and attach it to the root volume
# Including LUKS encryption
# Assumes you are using an "all on root" setup
# If you are not, adapt it if you like
#
# Script licensed GPL3 or later
# © Adrian Wilkins May 2015
#
# Pass the name of the disk device you are using as a cache
# This should ideally be totally blank, so run
#
# dd if=/dev/zero of=/dev/${DISK}
#
# over it for a short while to nuke the partition table

CACHE_DISK=
META_SIZE=
DATA_SIZE=

DISK_NAME=$(basename $CACHE_DISK)

CRYPT_VOLUME=${DISK_NAME}_crypt
CACHE_PV=/dev/mapper/${CRYPT_VOLUME}

# Create LUKS volume in raw disk

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

# Started to try and work out disk size stuff but it's complex
# Have a go if you like, I kept running out of extents
#
# DISK_SIZE=$(fdisk -l | grep "Disk ${CACHE_DISK}" | awk ' { print  } ')
# 
# 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))
# 

# Create new PV inside encrypted volume

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 writethrough ubuntu-vg/cachedata --yes
lvconvert --type cache --cachepool ubuntu-vg/cachedata ubuntu-vg/root

# Now add the UUID of the cache pool PHYSICAL DRIVE (/dev/sdb) to /etc/crypttab
DISK_UUID=$(ls -al /dev/disk/by-uuid/ | grep $DISK_NAME | awk '{ print  }')
echo "${CRYPT_VOLUME} UUID=${DISK_UUID} none luks,discard" >> /etc/crypttab

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

HOOK=$(tempfile)
# Add a hook script to initramfs to add the right tools and modules

echo "#!/bin/sh" > $HOOK
echo "PREREQ="lvm2"" >> $HOOK
echo "prereqs()" >> $HOOK
echo "{" >> $HOOK
echo "  echo \"$PREREQ\"" >> $HOOK
echo "}" >> $HOOK
echo "case  in" >> $HOOK
echo "prereqs)" >> $HOOK
echo "  prereqs" >> $HOOK
echo "  exit 0" >> $HOOK
echo "  ;;" >> $HOOK
echo "esac" >> $HOOK
echo "if [ ! -x /usr/sbin/cache_check ]; then" >> $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

# Update initramfs

update-initramfs -u

echo Now reboot!
    
ответ дан Adrian 08.05.2015 в 13:57