1. Copia de seguridad

1. Copia de seguridad

Mi empresa está trabajando en la implementación de algunos sistemas Ubuntu en algunos de sus nuevos esfuerzos de prueba y se me ha asignado una solución de cifrado para ellos. Habiendo sido principalmente un usuario de Windows con sólo un conocimiento práctico de Ubuntu y Linux/Unix en general, esto ha sido un poco desafiante pero intrigante. Sé que muchos servicios de cifrado funcionan con Windows, pero he notado una falta de estos para Ubuntu y después de leer más de 20 publicaciones aquí al respecto, decidí que la única opción realista es una instalación nueva con cifrado de disco completo. Dicho esto, algunos de los sistemas ya han estado en uso y no se podrían borrar e instalar de nuevo con cifrado. Necesitaría TODAS las configuraciones y cambios, así como también copiar o hacer una copia de seguridad de los archivos existentes. Por lo tanto, no es tan simple como copiar /home. Tenía curiosidad por saber cuál sería el mejor curso de acción para mí. Tengo una copia completa de la partición (usada gparted para hacer una copia rápida al exterior) para mi máquina de prueba y una nueva instalación de Ubuntu con LUKS. Estoy familiarizado con los conceptos básicos de clonezilla, pero no creo que eso me ayude por lo que he podido entender.

tldr: Necesito mover una instalación completa de Ubuntu 16.04 a un disco cifrado. Algunas máquinas estarán habilitadas para TPM y otras no, necesito saber cuál es el mejor curso de acción para cada una. Gracias por ayudar a un nuevo administrador.

BONIFICACIÓN si puede describir una forma que no requiera acceso a la red externa, pero que no sea obligatoria. Es decir, si necesita un paquete, puedo descargarlo en una PC de prueba a USB/CD/DVD e instalar el paquete sin conexión.

Respuesta1

A continuación se describe un procedimiento que he utilizado con éxito varias veces. Funciona para Ubuntu 16.04 y 18.04. A diferencia de la solución propuesta por @Arno en su respuesta, no requiere edición manual de las opciones de arranque del kernel. En cambio, se basa en update-grubgenerar una configuración adecuada basada en /etc/crypttabuna solución más canónica (juego de palabras no intencionado) que también utiliza Ubuntu cuando se instala con su cifrado predeterminado basado en LVM. (esta solución no utiliza LVM ni cifrada /boot)

No soy responsable de ninguna pérdida de datos u otras posibles consecuencias desagradables de seguir esta guía. Asegúrese de tener copias de seguridad confiables antes de hacer cualquier cosa.

No estoy probando esta guía mientras escribo esto. Está basado en un (probado)publicación de blog hecha por mísobre un caso algo similar y algunos detalles que puedo recordar.

Esta guía asume que:

  • Ubuntu ya está instalado
  • El sistema arranca con (U)EFI, no con BIOS/CSM
  • /bootestá en una partición separada 1
  • Puede iniciar un medio en vivo de Ubuntu 16.04/18.04 o Pop!_OS 18.04 (desde USB, PXE, DVD, lo que sea) 2

Si /bootno está en una partición separada, extraerla es bastante sencillo: cree una partición de 200-500 MB en cualquier lugar, formatéela en ext4, copie /bootel contenido actual, agregue /etc/fstabuna entrada update-grub, reinicie.


1. Copia de seguridad

Debe hacer una copia de seguridad de las particiones actuales del sistema. La forma más sencilla de hacerlo es utilizar Clonezilla. Es a prueba de usuario, no necesita manual, simplemente siga las instrucciones.

2. Reducir particiones

Los encabezados LUKS ocupan parte del espacio en una partición. Clonezilla/partclone no puede restaurar imágenes en dispositivos más pequeños que los de origen, por lo que no podrá restaurar la imagen de una partición no cifrada en un contenedor cifrado, porque es un poco más pequeño.

Luego tenemos que reducir un poco las particiones para cifrarlas. Redúzcalos en 10 MB o más, sólo para estar seguro. La forma más sencilla de hacerlo es utilizar GParted. Está disponible en Ubuntu Live Media.

3. Hacer imágenes de particiones reducidas

Haga esto con Clonezilla nuevamente o familiarícese ya conclonación parcial, que Clonezilla utiliza de forma predeterminada. Restauraremos imágenes manualmente con partclone más adelante.

Clonación de una imagen con partclone:

sudo partclone.ext4 -c -s /dev/sda2 | pigz -0 > /mnt/backup/sda2.ext4.ptcl.gz
  1. partclone.ext4es uno de los binarios de partclone dedicado a trabajar con ext4. Cada sistema de archivos soportado tiene su propio binario partclone.

  2. /dev/sda2Obviamente es la partición que desea clonar. Prefiero referirme a las particiones por su etiqueta parcial, por ejemplo. /dev/disk/by-partlabel/os- En mi opinión, mucho más limpio. /dev/sda2Sin embargo, es más reconocible.

  3. cerdoes gzip multinúcleo. -0le dice que favorezca la velocidad sobre la compresión efectiva.

  4. /mnt/backupaquí representa alguna ubicación externa donde desea almacenar la imagen. Si acaba de usar Clonezilla antes, aún puede montarlo en /home/partimag. Si desea montar un recurso compartido SMB: sudo mount -t cifs -o username=gronostaj //192.168.1.90/Backup /mnt/backup(solicita la contraseña de forma interactiva)

4. Ampliar la(s) partición(es) al tamaño original

Queremos recuperar ese espacio extra para los encabezados LUKS, ¿no? Cambie el tamaño de las particiones a sus tamaños originales.

5. Formateo a LUKS

Este es el momento en el que pierdes tus datos originales. Asegúrese de que sus copias de seguridad estén bien.

Formatee las particiones del sistema (excepto /boot) en LUKS:

sudo cryptsetup luksFormat --type luks2 /dev/sda2

Abrir contenedores creados:

sudo cryptsetup open /dev/sda2 os

Asegúrese de que todo el contenedor cifrado parezca basura aleatoria y que sus datos antiguos aún no sean legibles:

sudo dd if=/dev/zero of=/dev/mapper/os bs=1M

(Esto sobrescribirá el contenido descifrado del contenedor con ceros, pero el contenido cifrado se verá como basura aleatoria)

6. Restaurar imágenes

Ejecute partclone manualmente para restaurar imágenes:

cat /mnt/backup/sda2.ext4.ptcl.gz | pigz -d | sudo partclone.ext4 -r -o /dev/mapper/os

Si tomó el camino fácil e hizo copias de seguridad "reducidas" con Clonezilla, mire sus archivos de salida y descubrirá fácilmente cuáles son las fuentes del clon parcial. A menos que establezca un tamaño de fragmento enorme, se fragmentarán, deberá catjuntarlos antes de conectarlos a pigz.

También debes ajustar la geometría del sistema de archivos para que se ajuste a toda la partición:

sudo resize2fs /dev/mapper/os

7. Habilitar el soporte de cifrado

Primero, haga chroot en el sistema operativo recién restaurado:

mkdir /mnt/os
sudo mount /dev/mapper/os /mnt/os
cd /mnt/os
mount --bind /etc/resolv.conf etc/resolv.conf
mount --bind /dev dev
mount -t tmpfs tmpfs tmp
mount -t sysfs sys sys
mount -t proc proc proc
sudo chroot .
mount -a

Esta terminal ahora está funcionando en su instancia instalada de Ubuntu, no en la activa.

Instalarconfiguración de cripta:

apt update
apt install cryptsetup -y

Debería crear un archivo /etc/crypttab. Si no fue así, no te preocupes, créalo manualmente. Edite este archivo y agregue entradas para las particiones:

os /dev/sda2 none luks

Guarde y salga del editor. Reconstruir initramfs:

update-initramfs -u -k all

Actualizar entradas de GRUB:

update-grub

8. Eliminar solicitudes de contraseña adicionales

Si tiene más de una partición cifrada, deberá escribir la contraseña de cada una de ellas al arrancar. Sin embargo, LUKS le permite agregar archivos de claves adicionales que pueden usarse para desbloquear particiones en lugar de contraseñas. Puede almacenar estos archivos de claves en /una partición cifrada y utilizarlos para desbloquear las siguientes.

Cree un archivo de claves aleatorio:

dd if=/dev/urandom of=/luks.key bs=4096 count=1

Agréguelo a particiones no raíz:

cryptsetup luksAddKey /dev/sda3 /luks.key

Agregar crypttabentradas:

home /dev/sda3 /luks.key luks

Reconstruir initramfs:

update-initramfs -u -k all

1 Por qué uso separado /boot:

  • Es más fácil así ;)
  • GRUB aún no es compatible con LUKS2, por lo que /bootno debe estar en la partición cifrada de LUKS2
  • Si desea cifrar LUKS /booty cifrar LUKS2 /, debe ingresar la contraseña dos veces oincrustar archivo de claves en initramfs- demasiada molestia en mi opinión, porque...
  • El cifrado /bootpor sí solo no lo hace menos vulnerable, porque incluso si /bootestá cifrado, su partición del sistema EFI no puede estarlo, por lo que el atacante puede manipularla y, por ejemplo. utilice su kernel/initramfs malicioso personalizado en lugar del suyo de /boot. (para solucionar este problema, tienes quecree un binario GRUB autocontenedor y fírmelo con su clave privada, luego use UEFI Secure Boot para verificarlo)

Defina su propio modelo de amenazas y decida qué nivel de seguridad (y contra qué) necesita.

2 Puedes probar suerte con otras versiones de Ubuntu o CD de rescate comoGRML, pero tu kilometraje puede variar. Experimenté que este procedimiento fallaba simplemente porque los medios en vivo no coincidían con el sistema.

Respuesta2

Puede crear una imagen de la partición raíz, formatearla con LUKS, montarla y sobrescribirla con la imagen. Entonces serían necesarios algunos cambios en GRUB para que lo descifre en el arranque.No he probado los pasos a continuación, son solo una pista.

Supuse que /bootestá activada sdb1, la partición raíz está activada sdb2y /media/hddes una unidad externa. Estamos en un Live USB en un mensaje de administrador.

Cifrar la partición raíz

dd if=/dev/sdb2 of=/media/hdd/diskimg bs=1M
cryptsetup luksFormat /dev/sdb2
cryptsetup luksOpen /dev/sdb2 enc_root
dd if=/media/hdd/diskimg of=/dev/mapper/enc_root

Montar las particiones

mount /dev/sdb2 /mnt
mount /dev/sdb1 /mnt/boot

Configurar GRUB

Anote el UUID de la partición ejecutando:

blkid /dev/sdb2

Edite /mnt/etc/default/grub, busque la línea que dice GRUB_CMDLINE_LINUX_DEFAULT="quiet splash". Cámbielo a lo siguiente, reemplazándolo device-UUIDpor el UUID que anotó en el paso anterior.

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash cryptdevice=UUID=device-UUID:enc_root root=/dev/mapper/enc_root"

Luego actualice la configuración de GRUB:

mount --bind /dev /mnt/dev
mount --bind /sys /mnt/sys
mount --bind /proc /mnt/proc
chroot /mnt
update-grub
exit

Y desmontar todo:

umount /mnt/dev
umount /mnt/sys
umount /mnt/proc
umount /mnt/boot
umount /mnt

Y reiniciar. Algunas trampas:

  • No he probado nada de esto y no he jugado con particiones de Linux por un tiempo, así que estoy casi seguro de que olvidé o arruiné algo. Espere a que la gente lo revise y lo arregle.
  • Esto supone que /bootestá en una partición separada; no funcionaría si todo estuviera en la misma partición.
  • En un sistema UEFI, no olvide montar también la partición EFI donde pertenece.
  • ddcopiarátodoincluido el espacio libre, un método más rápido sería copiar sólo los archivos de la partición.

¡Buena suerte!

información relacionada