Como instalar o Ubuntu com criptografia de disco E cache de SSD

10

Estou usando o Ubuntu em um ambiente corporativo, e nossa política de segurança afirma que temos que usar a criptografia completa de disco.

Eu também tenho um laptop com um SSD mSATA de 32GB e 750GB de ferrugem. Minha instalação atual usa o bcache para aproveitar isso, instalado usando este procedimento . Isso proporciona um aumento de desempenho muito bem-vindo, sem que eu tenha que me preocupar em preencher o SSD.

Esta será uma questão controversa. A recompensa será concedida por:

  • Um método claro e confiável de executar uma nova instalação do Ubuntu
    • Qualquer lançamento é aceitável, mas o 15.04 (Vivid) ficará bem
  • Todo o sistema de arquivos será criptografado
    • A preferência aqui é usar a caixa de seleção relevante no programa instalador padrão do Ubiquity (criptografia dm-crypt)
  • O sistema de arquivos será armazenado em cache em um SSD
    • Por preferência, o método do dm-cache / lvmcache do kernel vê aqui para o método fazer isso com o Debian Jessie
    • O cache também deve ser protegido (isto é, criptografado)
    • Deve haver uma explicação clara do motivo pelo qual o cache também é criptografado

Já tentei o método para o Debian Jessie acima, mas ele se recusa a inicializar para mim. Até agora não tentei o método descrito nos comentários aqui .

As soluções publicadas serão testadas em uma VM VirtualBox com dois discos virtuais em branco e uma cópia de lançamento da área de trabalho 15.04 (versão amd64). O Bounty vai para a primeira solução que adoto para reinstalar meu hardware real.

Por favor, escreva sua solução como se estivesse indo para o wiki da comunidade.

Eu recompensei a recompensa - eu acho que ainda há potencial para uma solução "LUKS-on-LVM" que combina a facilidade da resposta aprovada em ter apenas uma senha, usando apenas componentes de mapeamento de dispositivo.

    
por Adrian 07.05.2015 / 10:23

2 respostas

7

LVM no LUKS no bcache

Aqui o jogo boneca russa é um pouco mais profundo com 3 pilhas / camadas ...

Minha ideia inicial sobre essa questão era usar uma instalação padrão do Ubuntu com LVM em LUKS e convertê-la em um dispositivo de backup bcache com blocks mas não funcionou para mim no meu teste com o LVM.

Além disso, o instalador do ubuntu ( ubiquity ) é muito limitado para instalar dentro de um bcache dispositivo preparado antecipadamente (pelo menos com LUKS no LVM), então nós recorremos a um método de fazer as coisas manualmente.

Inicialize no live CD / USB, escolha "Try Ubuntu" e abra um terminal

Pré-instalação

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

Instalação

Mantenha o terminal aberto e agora execute a instalação. Escolha "Outra coisa" ao particionar e especifique

  • sua partição de inicialização ( /dev/sda2 )
  • sua partição raiz ( /dev/mapper/vg-root )
  • seu swap ( /dev/mapper/vg-swap )

e marque a caixa de seleção para formatar suas partições

No final da instalação, não reinicialize , mas clique em "Continuar tentando o Ubuntu"

Pós-instalação

No nosso terminal aberto

# 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

Há um bug de reinicialização do Ubuntu 15.04 conhecido do Live CD / USB, então você pode ter que forçar a reinicialização / desligamento

Verifique

Uma vez iniciado, você pode verificar se /dev/bcache0 é de fato uma partição LUKS com

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

Isso ocorre porque é o cache de sua partição LUKS e agora você acessa seus dados por meio do dispositivo /dev/bcache0 e nunca do dispositivo de backup original ( /dev/sda3 here)

Referências

link

link

link

bcache-status não está oficialmente integrado em bcache-tools, ainda. Você pode tê-lo aqui: link

[1] Pode haver maneiras melhores de fazer este limpar

    
por solsTiCe 08.05.2015 / 18:42
4

LVM em LUKS + LUKS / dm-cache

O instalador do Ubuntu usa a configuração LVM em LUKS para sua criptografia de disco completo.

Se você também quiser usar dm-cache / lvmcache para melhorar o desempenho, precisará colocar o pool de cache em um volume criptografado para manter a segurança de seus dados.

Os passos são

  • Crie um volume LUKS no dispositivo de bloco de destino
  • Estenda o grupo de volumes padrão com o novo volume LUKS criptografado
  • Crie os metadados e volumes de dados do cache no novo volume LUKS
  • Vincule-os como um pool de cache
  • Vincule esse pool de cache ao volume raiz
  • Verifique se o novo volume criptografado pode ser montado na inicialização, adicionando-o a /etc/crypttab
  • Certifique-se de que seu ambiente de inicialização suporta dm-cache

O script abaixo fornece um exemplo e adicionará um pool de cache criptografado a um sistema de arquivos raiz existente. Ele foi projetado para sistemas que usaram a opção de criptografia de disco padrão no instalador do Ubuntu - ou seja; disco inteiro particionado e criptografado, sem partições personalizadas, etc.

Por favor, note que há muito pouca validação ou programação defensiva neste script. Se isso destruir o seu sistema de trabalho, essa é sua responsabilidade.

Ligue para:

# 1   2          3           4     5    6
sudo bash lvmcryptocache /dev/sdb 32M 1968M
  1. Precisa do root para funcionar
  2. executar script no bash
  3. o nome do script
  4. o dispositivo de bloco que você deseja usar (testado somente com disco inteiro)
  5. o tamanho dos metadados
  6. o tamanho dos dados do cache

Os parâmetros de tamanho são, por padrão, em MB: você precisará de uma proporção de 1: 1000 de espaço de metadados para o espaço de cache (por exemplo, se seu disco de cache é de 180 GB, você precisa de 180 MB de espaço de metadados e 179820 MB de espaço de dados) arredondar um pouco os metadados para ser cauteloso. Há um limite inferior para os metadados de 8M.)

Será solicitada uma senha para o seu volume de cache - você será solicitado a fornecer as senhas para BOTH dos seus discos durante a inicialização.

Referências

#!/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!
    
por Adrian 08.05.2015 / 15:57