Logo de Archlinux

Instalando ArchLinux en particións cifradas.

Neste post explico cómo instalar ArchLinux dende 0 e sobre particións cifradas, ao final do mesmo deberías ter un sistema básico e operativo, listo pra ser persoalizado cos teus programas favoritos.

Preparativos

Debemos baixala iso de https://www.archlinux.org/download/ a descarga por torrent vai moi rápida.

Logo debemos comprobala integridade da descarga, comprobándona coa firma GPG que ofrecen nesa mesma páxina, co md5 eo sha1.

Primeiro comprobamola integridade do ficheiro cos dos hash:
$ sha1sum archlinux-2015.07.01-dual.iso | grep a025ac8e23131b038a0b7f949faeb04d382e5b25
a025ac8e23131b038a0b7f949faeb04d382e5b25  archlinux-2015.07.01-dual.iso
$ md5sum archlinux-2015.07.01-dual.iso | grep 957232076cd0b32083a702b1b2e77796
957232076cd0b32083a702b1b2e77796  archlinux-2015.07.01-dual.iso
Agora comprobámola autenticidade do mesmo coa chave:
$ gpg -v archlinux-2015.07.01-dual.iso.sig 
gpg: suponse que hai datos asinados en `archlinux-2015.07.01-dual.iso'
gpg: Signature made Mér 01 Xul 2015 19:10:09 CEST using RSA key ID 9741E8AC
gpg: using PGP trust model
gpg: Good signature from "Pierre Schmitz <pierre@archlinux.de>"
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: 4AA4 767B BC9C 4B1D 18AE  28B7 7F2D 434B 9741 E8AC
gpg: Sinatura binario, algoritmo de resumo SHA256
Pasamola ISO a un pendrive con dd:
$ dd if=./archlinux-2015.07.01-dual.iso of=/dev/sdb

Metemolo pendrive no equipo a instalalo Arch, e iniciamos.

Pre-instalación

Agora que temolo pendrive insertado e xa cargou a iso de Arch, veremolo menú de inicio, seleccionamola opción de arquitectura do equipo onde estemos instalando.

Nos atoparemos cunha terminal, agora deberemos configuralo tecrado ao noso, para elo podremos velas configuracións dispoñibles en:

/usr/share/kdb/keymaps/
No caso do teclado español:
# loadkeys /usr/share/kbd/keymaps/i386/qwerty/es.map.gz
Tamén o podemos facer de forma breve con:
# loadkeys es

Particións

Creamolas particións ao noso gusto, no meu caso farei:

Pra elo uso fdisk:
 fdisk /dev/sda

Logo dentro de fdisk creo unha nova taboa de particións, coa opción “o”.

Creo a partición de boot

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

Creo a partición raíz

  1. Indícolle a nova partición “n”.
  2. Selecciono “e” pra crear unha extendida que non tiña.
  3. Elixo 2.
  4. Premo enter pra usar o sector de inicio que me ofrece.
  5. Premo de novo enter, pra elexir o último sector dispoñible.
  6. Indico nova partición “n”.
  7. Só dispoño de espazo pra particións lóxicas, polo que doulle a enter e selecciono o primer sector dispoñible.
  8. Logo lle asigno 4GiB de tamaño con : +4G.

Creo a partición de swap

  1. Indícolle nova partición “n”.
  2. Premo enter pra usar o primer sector por defecto.
  3. Logo lle asigno o tamaño da ram da máquina virtual: +512M.
  4. Unha vez aceptada e definida, selecciono “t” pra tipo de partición.
  5. Escribo 82 pra definila como “linux swap / Solaris”.

Creo a home

  1. Indícolle nova partición “n”.
  2. Premo enter pra o primer sector por defecto.
  3. Premo enter pra o último sector por defecto e aprobeitar así tódolo espazo dispoñible no disco.

Finalizo as particións

Unha vez teño as 5 particións creadas, gardo os cambios antes de sair do fdisk, con “w”.

Formateando as particións

A min gústame ter as particións do meu sistema cifradas, afortunadamente nunca me roubaron o portátil mais nunca se sabe que pode pasar, e con él cifrado “só perdes” o hardware e non te preocupas do acceso fraudulento aos teus datos.

Das 4 particións a tratar, só boot quedará sen cifrar ( se podría meter grub cifrado, mais o proceso logo se complica un chisco máis ).

Cifrando as particións

Primeiro ciframos swap, se atopa en /dev/sda5:
 cryptsetup luksFormat /dev/sda5

Pasos:

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

E con isto xa teríamola partición cifrada.

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

Dándolle formato as particións

Pra formatear boot, usarei EXT2 o sistema de arquivos máis simple e robusto dispoñible, non precisamos de journal nen da reserva de espazo pra Root na partición de arranque polo que EXT2 me parece unha elección acertada e compatible con todo.

Con -m 0 indicamos que reserve o 0% de espazo pra root:
 mkfs.ext2 -L "BOOT" -m 0 /dev/sda1

Agora toca descifralas particións home, raíz, e swap pra darlles formato logo.

Este sería o proceso pra descifrala raíz, no caso da swap e home é o mesmo:
 cryptsetup luksOpen /dev/sda5 RAIZ

Neste caso crea un dispositivo virtual chamado “RAIZ”, todos teñen que ter un nome que non se repita.

Trato o dispositivo virtual “RAIZ” coma un normal e o formateo con XFS:
 mfks.xfs -L RAIZ /dev/mapper/RAIZ

E xa está, a partición raíz estaría creada, cifrada e formatada.

Repetir o mesmo proceso coa home.

Formateando a swap

Logo de descifrala como coa raíz, na parte do formato facemos:
mkswap -L SWAP /dev/mapper/SWAP

Agora xa temolas 4 particións necesarias, cifradas e formatadas.

Preparando as particións pra instalación

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

Primeiro montamola raíz

# mount /dev/mapper/RAIZ /mnt

Montar o resto de particións

Dentro de /mnt onde está montado RAIZ hai que crear os directorios pra montalos dispositivos virtuáis “home” e “boot”:
mkdir -v /mnt/boot /mnt/home
Montámolas particións descifradas nestos puntos de montaxe:
# mount -v /dev/mapper/HOME /mnt/home
# mount -v /dev/sda1 /mnt/boot

Activala swap

Agora toca activala swap pra que sexa detectada durante a instalación por genfstab.

# swapon /dev/mapper/SWAP
Con isto comprobamos se estamos a usala swap ou non:
free -h

A conexión a internet

Se estás conectado por cable de rede o DHCP debería de asignarte os parámetros de rede, pra comprobalo podes usar “ifconfig”.

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

Con esto iniciarás o proceso de liberado e solicitación dunha configuración de rede pra esta interface.

Configuración da hora

Pra vela hora dispoñible no sistema se usa:
timedatectl
Se queremos listalas zonas horarias dispoñibles:
timedatectl list-timezones
Definimola hora da nosa rexión se non queremos usar a de UTC:
timedatectl set-timezone Europe/Madrid
Se queremos sincronizar a hora, podemos usar ntpdate seguido da dirección dun servidor ntp:
ntpdate hora.roa.es

Instalación de ArchLinux

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

Seleccionalos mirrors de descarga

Esto é opcional, podemos editar /etc/packman.d/mirrorlist e seleccionar os mirrors que queiramos, recomendase os máis próximos por temas de velocidade.

Instalación dos paquetes base

Esto instalará o mínimo do sistema ArchLinux na raíz:
pacstrap /mnt base

Configuralo sistema

Xerámolo seu fstab:
# genfstab -U -p /mnt >> /mnt/etc/fstab

Explicación:

Mudámola raíz da nosa terminal a raíz que creamos:
# arch-chroot /mnt
Poñemos un nome de host:
echo "archVirtual" > /etc/hostname
Definímola zona horaria:
# ln -sf /usr/share/zoneinfo/zone/subzone /etc/localtime
Descomentámolos locáis que precisemos pra o noso sistema en /etc/locale.gen:
vi /etc/locale.gen

No caso de querelos locáis galegos descomentamos “gl_ES.UTF-8 UTF-8”.

Xeremola localización:
# locale-gen
Definimola preferencia de localización en /etc/locale.conf:
# echo LANG=gl_ES.UTF-8 UTF-8 > /etc/locale.conf
E en /etc/vconsole.conf:
# vi /etc/vconsole.conf
...
KEYMAP=es

Configurar mkinitcpio, necesario pra iniciar o sistema

Cómo usamos particións cifradas precisamos xerar un disco de inicio na ram, pra elo usamos mkinitcpio, deberemos engadir os módulos en liña “hooks” en /etc/mkinitcpio.conf.

Importante lee a documentación do arquivo.

O meu configureino da seguinte maneira:
HOOKS="base udev autodetect modconf block encrypt filesystems keyboard fsck"
Pra vela información sobre algún módulo se usa:
# mkinitcpio -H <nome_módulo>
Por defecto ven:
HOOKS="base udev autodetect modconf block filesystems keyboard fsck"
Agora hai que crear os discos virtuáis de inicio con:
# mkinitcpio -p linux
Establecémola clave de root:
# passwd

Instalar grub

# pacman -S grub os-prober

Estas son as dependencias opcionáis pra grub:

Paquete: Descripción:
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.

Moi importante! sen esta liña na 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"

Onde /dev/sda5 é o dispositivo que contén a raíz cifrada, e cryptroot o nome do volume luks.

Logo procedemos a súa reinstalación e reconfiguración:
# grub-install --target=i386-pc --recheck --debug /dev/sda
# grub-mkconfig -o /boot/grub/grub.cfg

Engadilas outras particións cifradas

Documentación

Editase /etc/crypttab pra engadir os volumes a descifrar:
...
SWAP UUID=<uuid_da_partición_CIFRADA> none luks
HOME UUID=<uuid_da_partición_CIFRADA> none luks
...

Consello: Con “blkid” podremos vela uuid das nosas unidades.

Editar /etc/fstab pra montar as particións descifradas ao inicio:
# /dev/mapper/SWAP LABEL=SWAP                                                                                                                                           
/dev/mapper/SWAP   none       swap    defaults                                      0       0

# /dev/mapper/HOME LABEL=HOME                                                                                                                                           
/dev/mapper/HOME   /home      xfs     defaults,rw,relatime,attr2,inode64,noquota    0       2

Automatizalo descifrado das particións

Se non queres poñer 3 contrasinais ao inicio do sistema por usar 3 particións cifradas, propóñoche poñer só a da raíz e logo un sistema que use un arquivo pra descifralo resto de particións.

Trátase de facer un arquivo que se usará como chave das particións cifradas.

Cada partición cifrada con luks pode levar 10 arquivos ou contrasinais asociadas pra descifralas, polo tanto as nosas particións terían o contrasinal que lles puséramos e permitirían o uso dun arquivo pra descifralas.

Creamolo arquivo no directorio que crearemos /etc/keyfiles/luks/ e logo damos só permiso a root pra 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 que o arquivo só sexa modificable polo sistema ou root e inda así só se podrá agregar contido ao mesmo, non podrán borralo, nen borrar o contido do ficheiro.

Por qué facelo en /etc e non en /root ?

Pois por que root é o directorio de traballo do usuario, mentres que /etc é a base de configuración do sistema e sempre debe ir na partición raíz.

Qué elixo /dev/random ou /dev/urandom ?

Suponse que /dev/random é máis aleatorio e seguro fronte a ataques criptográficos e /dev/urandom ofrece caracteres aleatorios máis rápido mais pode na teoría ser máis vulnerable a un ataque por ser menos aleatorio na producción dos datos aleatorios.

A elección fasna ti, mais a partición raíz ten unha contrasinal que introduces a man e a propia partición ten outro contrasinal que introduces a man, polo que estaríamos nas mesmas.

Se vas usar un pendrive co arquivo do contrasinal e eliminala clave manual das particións entonces é mellor usar /dev/random, noutro caso igual supón unha perda de tempo.

Engadimolo arquivo contrasinal as nosas 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 puxéramos “none” no contrasinal, poñémola ruta ao ficheiro:
...
HOME            UUID=<uuid_da_partición_CIFRADA>    /etc/keyfiles/luks/luks-keyfile.key                luks
SWAP            UUID=<uuid_da_partición_CIFRADA>    /etc/keyfiles/luks/luks-keyfile.key                luks

Estando o contrasinal manual e a do ficheiro, se supón que se non carga o ficheiro pedirache a contrasinal por cada partición.

Finalmente se reiniciamos notarémolos cambios, sen erros de montaxe, peticións de contrasinais e coas particións descifradas e montadas.

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

Desmontámolas particións:
# umount -R /mnt

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

A partires de aquí xa se pode configurar ao noso gusto e seguilos consellos desta sección da wiki de arch: https://wiki.archlinux.org/index.php/General_recommendations

Farei futuros post sobre Arch, visto o visto con Fedora 22 prefiro arriscarme a “perdelo meu tempo” configurando unha distro ao meu gusto e repasando polo camiño. :)