En este tutorial les enseñare a instalar Parabola GNU/Linux-libre totalmente desde 0 solo el puro sistema base, mas adelante intentare hacer otro tutorial instalando el entorno gráfico.
El objetivo de este tutorial es hacer una instalación totalmente libre de blobs binarios y código ofuscado de firmware privativo que tiene por defecto el Kernel GNU/Linux para prevenir esto, Parabola ejecuta el Kernel conocido como Linux-libre (wikipedia).
Ventajas:
Desventajas (Wikipedia):
La eliminación de controladores privativos del núcleo imposibilita el uso de Linux-libre en hardware que aún no tiene compatibilidad libre, tal como algunas tarjetas de sonido, de vídeo, de red inalámbrica y otros tipos de dispositivos. En los casos en los que sea posible, se incluye controladores libres como substitutos.
Requisitos previos (Hardware):
Comencemos con los pasos previos.
1: Descargar y preparar la imagen del sistema
Para descargar Parabola lo pueden hacer desde su pagina oficial, yo recomiendo que se descargue por P2P (Torrent) esto es debido a que todos los clientes P2P realizan una comprobación de integridad una vez realizada la descarga.
En este ejemplo yo la descargue con qBittorrent, pero se puede hacer con cualquier cliente P2P jemplo:LibTorrent, Transsmision, uTorent, Ktorrent, etc.
Insertamos a nuestra PC las 2 memorias USB que vamos a utilizar.
Mientras se descarga la imagen .iso de instalación nosotros entramos a la pagina de Pacman Mirrorlist Generator (Parabola), y generamos una lista como se explica en la siguiente captura, se me olvido poner en la imagen que la IP version debe de ser IPv4.
Copiamos y pegamos el resultado en un archivo de texto como se muestra en la siguiente captura, es importante desmarcar el repositorio (quitar el #) del principio de las lineas donde dice #Server para que estas se tomen como validas, el archivo lo guardaremos con el nombre de mirrorlist dentro de una memoria USB con formato FAT32 para que pueda ser usado durante la instalación.
Una vez descargado el archivo .iso que contiene la imagen del sistema lo grabamos en la otra USB con el siguiente comando:
Para identificar nuestra memoria USB que vamos a usar para la imagen del sistema:
$ lsblk
Para grabar la imagen del sistema el la USB seleccionada:
$ sudo dd bs=4M if=ARCHIVO.iso of=/dev/DESTINO status=progress && sync
En mi caso me quedo de este modo.
Inicio de la instalación del sistema.
Insertamos en nuestro PC las 2 memorias USB y booteamos desde la USB que contenga la imagen de instalación, lo primero que veremos es la pantalla de bienvenida con un menú de varias opciones, seleccionamos la opción según las especificaciones de nuestro equipo y presionamos la tecla Enter.
Lo siguiente es seleccionar la distribución de el teclado, en las siguientes imágenes se muestran las variaciones del español mas comunes y su comando de configuración.
Definiendo las particiones del disco:
Para este paso usare cfdisk porque es fácil de usar ingresamos el siguiente comando:
# cfdisk
En este caso el tamaño del disco de nuestra maquina virtual es 50Gb y el tamaño de la memoria RAM es de 4Gb.
Seleccionamos con las flechas direccionales del teclado la opción New y asignamos un tamaño a la partición como se muestra en la siguiente imagen y presionamos la tecla Enter.
Estos 5Gb los voy a destinar para la partición de arranque /boot, pero hay quien dice que 1Gb es un exceso yo les recomiendo que le asignen máximo 1Gb y mínimo 500Mb.
Seleccionamos la opción primary.
Al tratarse de la partición de arranque /boot seleccionamos la opción Bootable como lo muestra la siguiente imagen.
Lo siguiente es definir la partición raíz / como se muestra la siguiente imagen, es conveniente que la capacidad mínima no sea inferior a 20-15Gb.
Después de esta definiremos la partición /home que es donde se almacenan los datos de usuario, el tamaño puede variar de usuario a usuario, por lo que no incluí una captura, pero se recomienda asignar el mayor tamaño, dejando espacio para el siguiente paso.
Lo siguiente en un tema un poco controvertido entre los usuarios de GNU/Linux, el tamaño de la partición SWAP esta partición de intercambio almacena la información que no cabe en la memoria RAM, cuando la memoria RAM esta casi llena y en lugar de que el sistema empiece a matar procesos los almacena en la SWAP para su uso posterior, la partición SWAP es muy útil al utilizar la suspencion del sistema.
Hay quien dice que en equipos con más de 4Gb no se debería sobrepasar los 2Gb de SWAP como mucho, pero una vez estaba trabajando con unos archivos un poco pesados y tenia que salir, para no dejar el PC prendido y lo suspendí, mi equipo tiene 16Gb de memoria RAM y tenia 5Gb de partición SWAP, a regresar y activar el equipo este había perdido parte de la información porque no cabía en la RAM ni en la SWAP, aumente la partición SWAP a 16Gb y ya no tuve mas problemas.
Analizando lo mencionado anteriormente recomiendo que la cantidad de partición SWAP sea igual a la de la memoria RAM.
En este caso la maquina virtual cuenta con 4Gb de memoria RAM, por lo tanto la partición SWAP sera de 4Gb.
Cuando tengamos que seleccionar una de estas dos opciones seleccionaremos la opción extended esto es debido a que el disco tiene una tabla de particiones MBR que solo soporta 3 particiones primarias.
Y repetimos el proceso anterior.
Una vez asignado el tamaño de la partición SWAP seleccionamos la opción Type y a continuación la opción 82 Linux SWAP /Solaris.
Seleccionamos la opción Write escribimos en minúsculas yes.
Y por ultimo salimos de cfdisk seleccionando la opción Quit.
Este fue el resultado final de el proceso de partición del disco.
Formateo de particiones.
En este paso procederemos a formatear las particiones de el disco, en todas las particiones se utilizara el formato ext4 debido a que es el que mejor estabilidad tiene, para formatear una partición ejecutaremos el siguiente comando:
# mkfs -t ext4 /dev/PARTICION
Para la partición SWAP utilizaremos el siguiente comando:
# mkswap /dev/PARTICION
Procedemos a activar la partición SWAP con el siguiente comando:
Comenzamos por montar la partición raíz / de nuestro sistema con el siguiente comando:
# mount /dev/PARTICION /mnt
Después procedemos a crear los puntos de montaje de las particiones /home y /boot.
Y montamos las particiones.
Buscamos con el comando lsblk a nuestra memoria USB donde guardamos el archivo mirrorlist.
# lsblk
En este caso nuestra memoria USB es la /dev/sdb, lo que nos interesa es la partición /dev/sdb1, antes de montarla primero tenemos que saber donde estamos así que ejecutamos el siguiente comando:
# pwd
Como podemos ver estamos en /root, procedemos a crear un directorio llamado usb y a montar la memoria como se muestra a continuación.
1 2 |
# mkdir usb # mount /dev/sdb1 /root/usb |
Ingresamos a la carpeta usb y revisamos su contenido.
1 2 |
# cd usb # ls |
Una vez encontrado el archivo mirrorlist que creamos lo procedemos a mover con el siguiente comando:
mv mirrorlist /etc/pacman.d/
Una vez movido el archivo salimos de la carpeta, desmontamos la memoria USB y borramos el directorio.
1 2 3 |
# cd .. # umount /dev/sdb1 # rm -R usb |
Ingresamos el siguiente comando para editar los repositorios de pacman e incluir el repositorio [nonprism], una vez dentro solo tendremos que desmarquemos el repositorio (quitar el #) guardamos en archivo con Ctrl + o y salimos con Ctrl + x.
# nano /etc/pacman.conf
Una vez hecho lo anterior procedemos a probar nuestra conexión cableada ejecutando el siguiente comando:
# ping -c 3 www.duckduckgo.com
Procedemos a actualizar las firmas de los paquetes para garantizar la protección de estos y que provienen de los desarrolladores y mantenedores oficiales.
# pacman -Sy parabola-keyring
Una vez echo lo anterior procedemos a instalar el sistema base ejecutando el siguiente comando:
# pacstrap /mnt base
Después instalamos los demás componentes básicos ejecutando los siguientes comandos:
1 2 3 |
# pacstrap /mnt sudo # pacstrap /mnt grub # pacstrap /mnt networkmanager |
Procedemos a transferir los puntos de montaje a nuestro sistema ejecutando el siguiente comando:
# genfstab -U -p /mnt >> /mnt/etc/fstab
Configuración inicial del sistema
Procedemos a ejecutar el entorno chroot para configurar el sistema.
# arch-chroot /mnt
Procedemos a ponerle un nombre al equipo ejecutando el siguiente comando:
# echo NOMBRE > /etc/hostname
Procedemos a configurar nuestra localización con el siguiente comando:
# ln -s /usr/share/zoneinfo/REGION/CIUDAD /etc/localtime
Sincronizamos le reloj de nuestro sistema ejecutando el siguiente comando;
# hwclock --systohc
Buscamos y desmarcamos el repositorio (quitar el #) de nuestro local, es importante solo elegir el UTF-8, deberemos de apuntarlo y tenerlo cerca, guardamos con Ctrl + o y salimos con Ctrl + x.
# nano /etc/locale.gen
Procedemos a terminar de configurar nuestro local con lo que apuntamos del comando anterior:
# echo LANG=LOCAL.UTF-8 > /etc/locale.conf
Generamos nuestro archivo local ejecutando el siguiente comando:
# locale-gen
Procedemos a configurar la distribución de nuestro teclado en la consola, KEYMAP= es (Español españa), KEYMAP=la-latin1 (Español Latino América).
KEYMAP=es
Lo siguiente es instalar el cargador de arranque Grub con el siguiente comando:
# grub-install /dev/sda
Procedemos a ejecutar el siguiente comando para que detecte y configure la imagen de sistema:
# grub-mkconfig -o /boot/grub/grub.cfg
Continuamos generando la ramdisk del sistema ejecutando el siguiente comando:
# mkinitcpio -p linux
Finalizamos el proceso de instalación y pre-configuracion definiendo un password para el usuario root ejecutando el siguiente comando:
# passwd
Salimos del entorno de emulación chroot ejecutando el siguiente comando:
# exit
Desmontamos el sistema de archivos ejecutando el siguiente comando:
# umount -R /mnt
Por ultimo paso procedemos a reiniciar el sistema ejecutando el siguiente comando:
# reboot
Configuración interna del sistema.
Una vez realizada la instalación y pre-configuracion de manera exitosa procederemos a configurar algunos puntos básicos para prevenir vulnerabilidades en nuestro sistema, al iniciar veremos una pantalla de login e ingresaremos el password de root.
Procedemos a ejecutar el comando lsblk para asegurarnos de que los puntos de montaje se establecieron de manera correcta:
# lsblk
Hardening básico del sistema:
Restringir los accesos al log del Kernel.
Los logs del kernel contienen información importante como hash de contraseñas e información sensible sobre direcciones de memoria generalmente los logs del kernel están disponibles para algunas aplicaciones no root, ya que sirven para detectar errores en Kernel y solucionar problemas, pero lo que vamos a hacer con el siguiente comando es definir que unicamente root pueda acceder a los logs del Kernel:
# echo "kernel.dmesg_restrict = 1" >> /etc/sysctl.d/50-dmesg-restrict.conf
Reforzar SystemD:
En este paso procederemos a reforzar SystemD en lo que concierne al manejo de logs:
Lo que haremos primero sera establecer un periodo de terminación mas rápido para los procesos ejecutando el siguiente comando:
# echo "DefaultTimeoutStopSec=5s" >> /etc/systemd/system.conf
Después procedemos a delimitar la cantidad máxima de tamaño que se usara para guardar el registro, con 500Mb debe de ser mas que suficiente:
# echo "SystemMaxUse=500M" >> /etc/systemd/journald.conf
Este paso es el mas importante, consiste en deshabilitar el volcado de SystemD, este paso es crucial debido a que un volcado de núcleo contiene datos sobre todo lo que ejecuta el sistema, la ultima vez que revise un volcado de núcleo a mediados del año en curso, me encontré que tenia información sensible e incluso uno que otro password sin cifrar, el volcado de núcleo no es de utilidad para el usuario común, pero esta activo por defecto para uso de los desarrolladores que programan SystemD.
El volcado de núcleo se deshabilita ejecutando el siguiente comando:
1 2 |
# echo "Storage=none" >> /etc/systemd/coredump.conf # systemctl daemon-reload |
Protección de ataques DOS de ping.
Una de las bromas mas básicas para cortarle el acceso de Internet a una persona es realizar un ataque DOS de ping sobre la red local, para evitar ser victimas procederemos a ejecutar el siguiente comando para ignorar los ping que manden hacia nuestro sistema.
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
Configuración de usuarios:
Para configurar el comando sudo un error de principiante es editar el archivo directamente con nano, incluso cuando el mismo archivo dice explícitamente al inicio que no se edite directamente.
Para editar el archivo sudoers ejecutaremos el comando propio del archivo:
# visudo
Desmarcamos la opción de la siguiente imagen situando el cursor sobre el # y después presionando la tecla x y para guardar presionamos la tecla : y escribimos wq, después presionamos la tecla Enter.
Procedemos a añadir a nuestro usuario y establecer sus respectivos grupos ejecutando el siguiente comando, el nombre de usuario puede contener números y debe de ser escrito en letras minusculas:
# useradd -m -g users -G wheel,power,storage,,video,audio,lp,optical,scanner,games -s /bin/bash USUARIO
Lo siguiente es establecer un password para el usuario ejecutando el siguiente comando:
# passwd USUARIO
Después procedemos a configurar la información de finger de usuario ejecutando el siguiente comando:
# chfn USUARIO
Aquí les muestro un ejemplo de como rellenar la información.
Iniciando el demonio de red y actualizando el sistema.
Para iniciar el demonio de red NeworkManager es necesario ejecutar los siguientes comandos:
1 2 |
# systemctl enable NetworkManager # systemctl start NetworkManager |
Antes de actualizar el sistema procedemos a configurar los repositorios ejecutando el siguiente comando y desmarcando el siguiente repositorio:
# nano /etc/pacman.conf
Por ultimo actualizamos el sistema ejecutando el siguiente comando:
# pacman -Syyu
Notas finales.
Con esto concluimos la instalación de nuestro sistema %100 libre, este tutorial esta echo para demostrar la configuración básica pero se puede mejorar añadiendo estas opciones:
Estas opciones mencionadas no fueron añadidas al tutorial por su complejidad y debido a que alargarían mas el presente tutorial, en un un futuro cercano tal vez se haga un nuevo tutorial explicando la implementación de estas opciones.
Esta instalación se realizo en una maquina virtual, pero yo instale este sistema en mi equipo principal que cuenta con las siguientes especificaciones: