Instalando Parabola en particións cifradas

Logo Parabola linux

Nesta ocasión respondo a un amigo que se interesou no meu post sobre cómo instalar Archlinux en particións cifradas, me consultou cómo instalar Parábola Linux en particións cifradas.

Neste post explicarei cómo instalar Parábola sobre particións cifradas nunha máquina virtual de VirtualBox.

Que é Parabola?

Básicamente é un Archlinux que só usa os paquetes libres, collen os paquetes libres de Archlinux e os usan no seu sistema, omitindo os non libres.

Para máis info a súa web oficial: https://www.parabola.nu:

A fully free, simple, and lightweight operating system

You’ve reached the website of the Parabola GNU/Linux-libre operating system. The Parabola project is a community driven effort to provide a fully free (as in freedom) operating system that is simple and lightweight.

Derived from Arch Linux, Parabola GNU/Linux-libre provides packages from Arch that meet the Free System Distribution Guidelines (FSDG) and replacements for the packages that don’t meet this requirement. Packages are provided for the i686, x86-64, and mips64el architectures.

Preparativos

Unha vez temolo host listo ( máquina virtual ou real ), debemos baixar a iso de aquí: https://wiki.parabola.nu/Get_Parabola.

NOTA: Se usas Archlinux, podes actualizar a Parabola realizando unha conversión dos paquetes que está documentada no proxecto de Parabola, neste titorial non se usará Archlinux.

Creamos un directorio para traballar coa instalación:
$ mkdir -v /home/<usuario>/Desktop/CHERNOBIL
Descargamos Parabola da dirección que puxen antes, no directorio:
$ wget https://repo.parabola.nu/iso/latest/parabola-2015.08.01-dual.iso
Engadímola chave GPG pública de Parabola:
$ gpg --keyserver pgp.mit.edu --recv-keys 0x6c37e88edd0bf0427a15676e4428ba28aa2accd2
gpg: key AA2ACCD2: public key "Icarious (GNU Hacker) <icarious@hacari.org>" imported
gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model
gpg: depth: 0  valid:   3  signed:   0  trust: 0-, 0q, 0n, 0m, 0f, 3u
gpg: hase comproba-la base de datos de confianza o 2017-07-03
gpg: Número total procesado: 1
gpg:            importadas: 1
Descargámola suma SHA512 para verificala imaxen e a firma GPG para verificar este arquivo:
$ wget https://repo.parabola.nu/iso/latest/SHA512SUMS
$ wget https://repo.parabola.nu/iso/latest/SHA512SUMS.sig
Verificámolo arquivo do hash coa firma e logo a iso co hash sha512:
$ gpg --keyid-format long --verify SHA512SUMS.sig  SHA512SUMS
gpg: Signature made Sáb 01 Ago 2015 11:25:20 CEST
gpg:                using RSA key 3F684E048B1894C1
gpg: Good signature from "Icarious (GNU Hacker) <icarious@hacari.org>" [descoñecido]
gpg:                 aka "Icarious (GNU Hacker) <icarious@mail36.net>" [descoñecido]
gpg:                 aka "Icarious (GNU Hacker) <icarious@parabola.nu>" [descoñecido]
gpg:                 aka "Icarious (GNU Hacker) <icarious@openmailbox.org>" [descoñecido]
gpg:                 aka "[jpeg image of size 4916]" [descoñecido]
gpg: AVISO: ¡Esta chave non está certificada cunha sinatura de confianza!
gpg:        Non hai indicacións de que a sinatura pertenza ao seu propietario.
Pegada dactilar da chave primaria: 6C37 E88E DD0B F042 7A15  676E 4428 BA28 AA2A CCD2
     Pegada dactilar da sub-chave: 9436 8D45 FA20 2094 B616  0A48 3F68 4E04 8B18 94C1
 
$ sha512sum -c SHA512SUMS
parabola-2015.08.01-dual.iso: OK

Pasala ISO a un USB

No caso de que a fóramos a instalar nun host real, debemos de facer este paso, na máquina virtual bastaría con montala iso:
# dd if=./parabola-2015.08.01-dual.iso of=/dev/sdb

Pre-instalación

Unha vez iniciada a máquina, co pendrive ou iso cargado, nos atoparíamos co menú de Parabola, seleccionamos iniciar a opción de x86_64, unha vez cargue podemos proceder a preparalo sistema.

Primeiro poñemos o teclado español:
loadkeys es

Crear ás particións

Ás particións a crear neste caso serán:

Para particionar uso fdisk:
# fdisk /dev/sda

Uso a opción “o” para crear unha nova taboa de particións tipo MSDOS.

AVISO: ISTO DEIXARÁ INACCESIBLES TÓDOLOS ANTIGOS DATOS DO TEU DISCO DURO, xa que xera unha nova taboa de particións.

Creo a partición de boot:

  1. Indícolle nova partición con “n”.
  2. Selecciono “p” para crear unha partición primaria para boot.
  3. Elixo o primer sector por defecto.
  4. Para o último sector poño: +512M.

Creo a partición extendida onde irán o resto:

  1. Nova partición “n”.
  2. “e” para crear unha extendida.
  3. Elixo o primer sector por defecto.
  4. Para o último tamén elixo o que ofrecen por defecto.
Creo a partición raíz:
  1. Indícolle nova partición “n”.
  2. Só me deixa crear unha lóxica, polo que premo enter para usar o primer sector que me ofrece.
  3. Logo cómo é unha máquina virtual de probas lle asigno 4GiB de tamaño a raíz, para unha de producción recomendo usar uns 20 GiB, indícolle +4G.
Creo a partición de swap:
  1. Indico unha nova partición “n”.
  2. Premo enter para usar o primer sector por defecto.
  3. Asígnolle o tamaño da ram da máquina virtual: +512M.
  4. Unha vez aceptada e definida, selecciono “t” para o tipo de partición.
  5. Selecciono “6”.
  6. Escribo 82 para definila como “linux swap / Solaris”.
Finalmente creo a HOME no espazo dispoñible:
  1. Indícolle nova partición “n”.
  2. Premo enter para o primer sector por defecto.
  3. Premo enter para o último sector por defecto, aprobeitando todo o espazo valeiro que queda.

Agora con tódalas particións definidas, gardo o cambios con “w”.

Formateando as particións

A mín gústame telas particións do meu sistema cifrado, afortunadamente nuna me roubaron o portátil mais nunca se sabe que pode pasar. Das 4 particións coas que vamos a traballar só boot non se pode cifrar, xa que non podrían inicarse os arquivos necesarios pro kernel (hai un método a través do grub para descifralo, máis complicaría moito as cousas ).

Cifrando as particións

Primeiro vamos cifrala swap, que se atopa en /dev/sda6:
# cryptsetup luksFormat /dev/sda6

Pasos:

  1. Escribir YES en maíusculas.
  2. Poñer un contrasinal.

Con isto xa teriamos unha partición cifrada.

Se repite o mesmo paso coas particións raíz e home.

Dando formato as particións

Para formatela partición boot, uso EXT2 un sistema de arquivos simple e robusto, non nos fai falta o journal nen a reserva de espazo para ROOT.

Polo que a formateo da seguinte maneira:
# mkfs.ext2 -L "BOOT" -m 0 /dev/sda1

*Con -m 0 indicámoslle que reserve o 0% de espacio para root.

Agora toca descifralas particións home, raíz, swap para darlles formato amoso o proceso para partición raíz o resto sería igual:
# cryptsetup luksOpen /dev/sda5 RAIZ

Isto nos crea un dispositivo virtual en /dev/mapper/ chamado RAIZ.

Trato a RAIZ coma unha partición normal e a formateo en XFS:
# mfks.xfs -L RAIZ /dev/mapper/RAIZ

E xa está, a nosa partición RAIZ estaría creada, cifrada e formateada.

Hai que repetilo mesmo proceso para HOME.

No caso da swap habría que descifrala e logo formateala como swap da seguinte maneira:
# mkswap -L SWAP /dev/mapper/SWAP

Agora xa teríamos as 4 particións necesarias, cifradas e formatadas.

Preparando as particións para instalación

Agora hai que montalas particións descifradas e formatadas en /mnt.

Primeiro a RAIZ:

# mount /dev/mapper/RAIZ /mnt
Dentro dela hai que crealos puntos de montaxe para home e boot:
# mkdir -v /mnt/boot /mnt/home
Montalas particións descifradas nestos puntos de montaxe:
# mount -v /dev/mapper/HOME /mnt/home
# mount -v /dev/sda1 /mnt/boot
Activala partición swap para que sexa detectada durante a instalación por genfstab:
# swapon /dev/mapper/SWAP

A conexión a internet

Se estás conectado por cable de rede o DHCP debería asignarte os parámetros da rede, para comproblamo usamos “ifconfig”.

Se ves que a túa interface non recolleu a ip e tes un servidor DHCP na túa rede, debes facer:
# dhclient -v <nombre_interfaz>

Con isto iniciarás o proceso de liberado e solicitación dunha configuración de rede para esa interface, por DHCP.

Configuración da hora

Para vela hora dispoñible no sistema usa:
$ timedatectl
Para listalas zonas horarias dispoñibles:
$ timedatectl list-timezones
Deinímola hora da nosa rexión se non queremos usar UTC:
# timedatectl set-timezone Europe/Madrid
Se queremos sincronizala hora, podemos usar ntpdate seguido da dirección dun servidor ntp:
# ntpdate hora.roa.es

Instalación de Parabola linux

Agora que temola base configurada, podemos seguir a instalación.

Seleccionar os mirrors de descarga:

Isto é opcional, podemos editar /etc/packman.d/mirrorlist e seleccionalos mirrors que queiramos, se recomendan os máis pertos por temas de velocidade.

Instalación dos paquetes base

Este comando descarga e instala a base de datos do noso sistema:
# pacstrap /mnt base

Configuralo sistema

Xeramos o arquivo fstab:
# genfstab -U -p /mnt >> /mnt/etc/fstab

Uso:

- U para que sexa definido coas UUID dos discos e así evitar problemas, con -L usaría as etiquetas.
- p excluir o punto de montaxe de pseudo sistemas de arquivos.
- /mnt indicar que quero os sistemas de arquivos montados baixo este punto.
Mudámola raíz da nosa terminal a raíz que creamos:
# arch-chroot /mnt
Poñemos un nome de host:
$ echo "parabolaVirtual" > /etc/hostname
Definímola zona horaria:
# ln -sf /usr/share/zoneinfo/zone/subzone /etc/localtime
Descomentámolos locais que necesitemos para o noso sistema en /etc/locale.gen:
# vi /etc/locale.gen

*No caso de querelos locais galegos descomentar “gl_ES.UTF-8 UTF-8”.

Xeramola localización:
# locale-gen
Definímola prefernza de localización en /etc/locale.conf:
# echo LANG=gl_ES.UTF-8 UTF-8 > /etc/locale.conf
En /etc/vconsole.conf tamén:
# vi /etc/vconsole.conf
...
KEYMAP=es

Configurar mkinitcpio necesario para inicialo sistema

Como usamos particións cifradas precisamos xerar un disco de inicio na ram para elo usamos mkinitcpio, debemos engadir aos módulos na liña “hooks” en /etc/mkinitcpio.conf importante leer a documentación do arquivo.

O meu configureino da seguinte maneira:
HOOKS="base udev autodetect modconf block encrypt filesystems keyboard fsck"

Moi importante fixarse na orde da carga dos módulos (en especial a posición de encrypt que sexa antes do filesystems).

Para ollar a información sobre algún módulo se usa:
# mkinitcpio -H <nombre_módulo>
Por defecto ven:
HOOKS="base udev autodetect modconf block filesystems keyboard fsck"
Agora hai que crealos discos virtuáis de inicio con:
# mkinitcpio -p linux-libre

!ollo en Parabola é “linux-libre” en Archlinux seriá “linux”.

Establecemolo contrasinal de root:
# passwd

Instalar grub

# pacman -S grub os-prober
Estas son as dependencias opocionáis para grub:
    freetype2: For grub-mkfont usage
    fuse: For grub-mount usage
    dosfstools: For grub-mkrescue FAT FS and EFI support
    efibootmgr: For grub-install EFI support
    libisoburn: Provides xorriso for generating grub rescue iso using grub-mkrescue
    os-prober: To detect other OSes when generating grub.cfg in BIOS systems
    mtools: For grub-mkrescue FAT FS support.
!Importante, sen esta liña da configuración do grub, non cargará o sistema cifrado, hai que asignarlle a variable “GRUB_CMDLINE_LINUX” en /etc/default/grub o seguinte valor:
GRUB_CMDLINE_LINUX="cryptdevice=/dev/sda5:cryptroot"
Instalar e aplicar as configuracións ao grub:
# grub-install --target=i386-pc --recheck --debug /dev/sda
# grub-mkconfig -o /boot/grub/grub.cfg

Engadir outras particións cifradas

Documentación

Neste apartado explico o mínimo montaxe requerido, mais nos pedirá o contrasinal por cada partición inda que teñan a mesma.

No seguinte apartado “Automatizalo descifrado de particións”, se explica como facer para que non pregunte a contrasinal por cada unidade.

Descifralas introducindo a contrasinal manualmente

*Con “blkid” podremos velo uuid das nosas unidades, nos interesan as cifradas “/dev/sdx” non as descifradas de “/dev/mapper/”.

Editase /etc/crypttab para engadilos volumes a descifrar, poñendo o nome que tendrá o volume a descifrarse ( ex: /dev/mapper/HOME ), a uuid, se usará contrasinal e o tipo de dispositivo:
...
SWAP UUID=<uuid_de_la_partición_cifrada> none luks
HOME UUID=<uuid_de_la_partición_cifrada> none luks

Automatizalo descifrado de particións

Se non queres poñer 3 contrasinais por usar 3 particións cifradas, podes poñer só a da partición raíz e logo que o sistema use un arquivo para descifralo resto de particións.

Trátase de facer un arquivo que se usará como chave das particións cifradas, as particións cifradas poden levar cada unha ata 10 arquivos ou contrasinais asociadas pra descifralas, polo tanto as nosas particións tendrían o contrasinal que lle puxemos mais un arquivo asociado.

Creamolo arquivo en /etc/keyfiles/luks/ e logo damoslle só a root permisos de lectura nesa ruta:
# mkdir -vp /etc/keyfiles/luks
# dd if=/dev/urandom of=/etc/keyfiles/luks/luks-keyfile.key bs=512 count=8
# chown -vR root:root /etc/keyfiles && chmod -vR 400 /etc/keyfiles
# chattr -R +a /etc/keyfiles/

Con chattr mudámolos permisos a nivel do sistema de arquivos, con +a facemos qu eo arquivo só sexa modificable polo sistema ou root, e inda así só podrán agregar información ao mesmo, mais non o podrán borrar, nen borrar o contido do arquivo.

Engadímolo arquivo contrasinal as particións que non sexan a raíz:
# cryptsetup luksAddKey /dev/sda7 /etc/keyfiles/luks/luks-keyfile.key
# cryptsetup luksAddKey /dev/sda6 /etc/keyfiles/luks/luks-keyfile.key
Agora en /etc/crypttab onde puxemos “none” en password, poñémola ruta ao ficheiro:
...
SWAP UUID=<uuid_da_partición_cifrada> /etc/keyfiles/luks/luks-keyfile.key luks
HOME UUID=<uuid_da_partición_cifrada> /etc/keyfiles/luks/luks-keyfile.key luks

Estando o contrasinal manual e o do ficheiro, suponse que se non carga o ficheiro preguntará polo contrasinal en cada partición.

Finalmente se reiniciamos notaremolas mudanzas, sen erros de montaxe, peticións de contrasinais e coas particións descifradas e montadas.

Saimos do chroot con “exit” ou “cntrl+D”

Desmontamos tódalas particións:
# umount -R /mnt

Xa podemos reiniciala máquina e iniciar dende o sistema instalado.

Consello final

Para conseguila ip por DHCP despóis de reiniciar, usamolo “dhcpcd” hai que habilitalo:

# systemctl enalbe dhcpcd && systemctl start dhcpcd

A partir de aquí xa está todo instalado, xa terías o teu Parabola funcionando.