Páginas

lunes, 3 de enero de 2022

FreeBSD intercambio cifrado con GELI en un gmirror y un grupo root cifrado con GELI.

https://wiki.freebsd.org/MasonLoringBliss/ZFSandGELIbyHAND

Paso a paso - Particionar e instalar FreeBSD 13.0

Duplicación

Duplicación es la técnica de escribir los mismos datos en mas de una unidad de disco. Cada unidad de un mirror (espejo) contiene una copia idéntica de los datos. Cuando falla una unidad individual, el mirror continua funcionando y el administrador tiene tiempo para reemplazar la unidad defectuosa sin interrupción.

Mirror

Las dos unidades en un espejo pueden ser idénticas en modelo y capacidad, pero gmirror(8) no lo requiere. Los espejos creados con diferentes discos tendrán una capacidad igual a la del disco mas pequeño del mirror. Este ejemplo asume FreeBSD 13, un par de discos y el deseo de reflejar todo.  Se adapta tanto a UEFI como a instalaciones heredadas, y tiene un esquema de partición predeterminado que puede tener ambas instalaciones a la vez. FreeBSD no automatiza la actualización del código de arranque y este es el enfoque adoptado por la versión actual de esta guía. Este conjunto de instrucciones configura un par de particiones freebsd-boot, un par de particiones ESP, intercambio cifrado con GELI en un gmirror y un grupo raíz cifrado con GELI.

Fuerza la destrucción de la tabla de particiones

# gpart destroy -F ada0
# gpart destroy -F ada1

Nueva tabla de particiones GPT


# gpart create -s gpt ada0
# gpart create -s gpt ada1

Particiones de arranque, primero legacy y luego UEFI/ESP

# gpart add -t freebsd-boot -s 512k -l boot0 ada0
# gpart add -t freebsd-boot -s 512k -l boot1 ada1
# gpart add -t efi -s 1m -l efi0 ada0
# gpart add -t efi -s 1m -l efi1 ada1

ESP debe ser vfat/fat32:


# newfs_msdos /dev/gpt/efi0
# newfs_msdos /dev/gpt/efi1

Swap - estos entrarán en un geom_mirror


# gpart add -t freebsd-swap -l swap0 -a 1m -s 4096m ada0
# gpart add -t freebsd-swap -l swap1 -a 1m -s 4096m ada1

Si tienes discos que no coinciden, deberás hacer que estos tengan un tamaño coincidente:


# gpart add -t freebsd-zfs -l tank0 -a 1m ada0
# gpart add -t freebsd-zfs -l tank1 -a 1m ada1
# gmirror label -v swap gpt/swap0 gpt/swap1

Establecer GELI - Configurar claves en lugar de frases de paso para GELI


# geli init -s 4096 -b -g gpt/tank0
# geli init -s 4096 -b -g gpt/tank1
# geli attach gpt/tank0
# geli attach gpt/tank1

Crear el pool root.

# zpool create -R /mnt -o cachefile=/tmp/zpool.cache -O mountpoint=/ \
    -O atime=off -O canmount=off -O compression=on \
    tank mirror gpt/tank0.eli gpt/tank1.eli
    
# zfs create -o canmount=off -o mountpoint=none tank/ROOT
# zfs create -o mountpoint=/ tank/ROOT/default
# zpool set bootfs=tank/ROOT/default tank
# zfs create tank/home
# zfs create -o canmount=off tank/usr
# zfs create tank/usr/local
# zfs create tank/usr/obj
# zfs create tank/usr/src
# zfs create tank/usr/ports
# zfs create tank/usr/ports/distfiles
# zfs create -o canmount=off tank/var
# zfs create tank/var/jail
# zfs create tank/var/log
# zfs create tank/var/tmp
# zfs create tank/tmp

# zfs set setuid=off tank/tmp
# zfs set setuid=off tank/var
# zfs set exec=off tank/var

Copiar el caché de zpool para tenerlo en el sistema en funcionamiento


# mkdir -p /mnt/boot/zfs
# cp /tmp/zpool.cache /mnt/boot/zfs

No olvide elegir la opción Shell para terminar la configuración.


# exit

cat >> /boot/loader.conf <<EOF
zfs_load="YES"

geom_eli_load="YES"
geom_mirror_load="YES"

zpool_cache_load="YES"
zpool_cache_name="/boot/zfs/zpool.cache"
zpool_cache_type="/boot/zfs/zpool.cache"

vfs.root.mountfrom="zfs:tank/ROOT/default"
EOF

cat >> /etc/rc.conf <<EOF
zfs_enable="YES"
zfsd_enable="YES"
EOF

cat >> /etc/fstab <<EOF
/dev/gpt/efi0 /boot/efi0 msdosfs rw,late 0 0
/dev/gpt/efi1 /boot/efi1 msdosfs rw,late 0 0
/dev/mirror/swap.eli none swap sw 0 0
EOF
# exit

Reiniciar


 reboot

Consoles: EFI console
GELI Passphrase for disk0p4:


# geli status
Name  Status  Components
     ada0p4.eli  ACTIVE  ada0p4
     ada1p4.eli  ACTIVE  ada1p4
mirror/swap.eli  ACTIVE  mirror/swap

# zpool status

  pool: tank
 state: ONLINE
config:

	NAME            STATE     READ WRITE CKSUM
	tank            ONLINE       0     0     0
	  mirror-0      ONLINE       0     0     0
	    ada0p4.eli  ONLINE       0     0     0
	    ada1p4.eli  ONLINE       0     0     0

errors: No known data errors

FreeBSD es genial!
.