0% encontró este documento útil (0 votos)
43 vistas263 páginas

Presentaciones LPIC-2

El documento describe el proceso de arranque de Linux, incluyendo la función de la BIOS y UEFI, así como la gestión de particiones mediante MBR y GPT. También se aborda la arquitectura del kernel de Linux, sus módulos, el ciclo de desarrollo y el uso de DKMS para la gestión de módulos. Finalmente, se introduce systemd como un gestor de servicios que optimiza el arranque del sistema mediante la paralelización de tareas.

Cargado por

josheuga
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
43 vistas263 páginas

Presentaciones LPIC-2

El documento describe el proceso de arranque de Linux, incluyendo la función de la BIOS y UEFI, así como la gestión de particiones mediante MBR y GPT. También se aborda la arquitectura del kernel de Linux, sus módulos, el ciclo de desarrollo y el uso de DKMS para la gestión de módulos. Finalmente, se introduce systemd como un gestor de servicios que optimiza el arranque del sistema mediante la paralelización de tareas.

Cargado por

josheuga
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Proceso de

Arranque de
Linux
201.1 > Linux Kernel
LA BIOS
• Basic Input/Output System. Es un Firmware en ROM (o PROM)
• Dos partes fundamentales:
‣ Setup: Para configurar las opciones. Al arrancar se pulsa una
tecla para entrar, normalmente Supr
‣ POST: Revisa que funcionen los componentes principales
para poder arrancar
LA BIOS

C
HI SE
P
LA BIOS
• EFI/UEFI. Unified Extensible Firmware Interface
‣ Compatibilidad y emulación del BIOS
‣ Soporte para la Tabla de particiones GUID (GPT)
‣ Capacidad de gestionar y arrancar desde unidades de
almacenamiento grandes (MBR no soporta más de 2 TB).
‣ Entorno amigable y flexible, incluyendo capacidades de red.
‣ Diseño modular.
‣ Opción de “arranque seguro” (Secure Boot)
LA BIOS
LA BIOS
• Funcionamiento del arranque
‣ Al encender el PC se ejecuta el firmware de la BIOS (o UEFI)
‣ El POST comprueba que el hardware básico esté bien
‣ Se busca un cargador de arranque por orden en las unidades
que hayamos indicado en la secuencia de arranque del setup
‣ Si es BIOS se lee el primer sector de la unidad (MBR) donde
se encuentra el código para buscar el gestor de arranque
‣ Si es UEFI se ejecuta el gestor de arranque que se encuentra
en una partición especial (ESP)
MBR Y GPT
• MBR (Master Boot Record)
‣ Se encuentra en el primer sector del disco
‣ Contiene una tabla de 4 particiones
‣ Primaria, extendida o lógica
‣ No es capaz de manejar particiones de más de 2 TB
MBR Y GPT
• GPT (GUID Partition Table)
‣ Es compatible con MBR
‣ No funciona con BIOS, necesita EFI o UEFI
‣ Soporta tamaños de disco de hasta 9,4 zettabytes
‣ Puede gestionar todas las particiones que soporte el
Sistema Operativo (normalmente 128).
‣ Gestiona mejor el arranque del S. O.
Arquitectura
Del Kernel.
201.1 > Linux Kernel
Arquitectura General del Kernel de Linux
El kernel de Linux es el núcleo central del sistema operativo Linux. Es responsable de manejar toda la
interacción entre el hardware de la computadora y los procesos de software.

La arquitectura del kernel de Linux puede entenderse mejor dividiéndola en varias capas y componentes
principales:

● Gestión de Procesos: El kernel de Linux controla la creación, planificación y terminación de procesos.


Cada proceso en el sistema tiene un ID único (PID) y está asociado con un espacio de direcciones y un
conjunto de recursos del sistema.

● Gestión de Memoria: El kernel maneja la memoria a través de la paginación y la segmentación,


permitiendo a los procesos compartir la memoria o protegerla cuando sea necesario. También gestiona
la memoria virtual, permitiendo que el sistema use el disco como memoria adicional cuando la RAM está
llena.

● Sistema de Archivos: Linux soporta múltiples sistemas de archivos (como ext4, XFS, Btrfs, etc.),
permitiendo el almacenamiento y organización de archivos. El kernel maneja operaciones como la
creación, lectura, escritura y eliminación de archivos y directorios.
Arquitectura General del Kernel de Linux
● Subsistema de Red: Proporciona la funcionalidad necesaria para comunicarse con otros sistemas a
través de redes, soportando una amplia gama de protocolos.

● Interfaz de Dispositivos y Controladores: El kernel actúa como intermediario entre el hardware y los
procesos del sistema, gestionando la entrada/salida (I/O) con dispositivos a través de controladores
específicos del dispositivo.

● Seguridad: El kernel incluye características para asegurar el sistema, como el control de acceso, la
separación de privilegios y varios mecanismos de aislamiento.
Versiones
del Kernel
201.1 > Linux Kernel
Versionado del Kernel
El kernel de Linux sigue un modelo de desarrollo y lanzamiento que permite la introducción de nuevas
características, mejoras de rendimiento y correcciones de seguridad de manera organizada y predecible.

Las versiones del kernel de Linux se identifican mediante un esquema de numeración que sigue el formato X.Y.Z,
donde:

● X es el número de versión mayor. Cambios en este número indican cambios significativos o mejoras
importantes que pueden incluir incompatibilidades con versiones anteriores.

● Y es el número de versión menor. Tradicionalmente, si Y es impar (e.g., 2.5, 3.19), indica una versión en
desarrollo o "bleeding edge", donde se introducen nuevas características y cambios. Si Y es par (e.g., 2.6,
4.18), indica una versión estable, destinada al uso general. Sin embargo, desde la versión 3.0, este
esquema ha cambiado, y el foco está más en lanzar versiones estables regularmente, sin distinción
específica de números pares o impares para versiones en desarrollo.

● Z es el número de revisión o parche. Indica correcciones de errores, actualizaciones de seguridad y


mejoras menores sobre una versión estable existente. Este número se incrementa cada vez que se realiza
una nueva publicación que corrige errores o problemas de seguridad sin introducir cambios significativos
que afecten la compatibilidad.
Ciclo de Desarrollo
El desarrollo del kernel de Linux es continuo, y el ciclo de lanzamiento típicamente sigue estos pasos:

● Ventana de Fusión (Merge Window): Justo después del lanzamiento de una nueva versión estable del
kernel, se abre una ventana de fusión de aproximadamente dos semanas. Durante este período, se
aceptan nuevas características, arquitecturas, controladores y mejoras significativas para la próxima
versión. Linus Torvalds, el creador de Linux, supervisa este proceso, fusionando cambios propuestos en el
árbol de código principal.

● Período de Estabilización: Después de cerrar la ventana de fusión, el ciclo entra en un período de


estabilización, donde el enfoque principal es corregir errores y mejorar la estabilidad de las nuevas
características introducidas. Durante este período, se lanzan varias versiones candidatas (RC, Release
Candidates), generalmente en una base semanal. Este proceso continúa hasta que el kernel alcanza un
nivel de estabilidad aceptable.

● Lanzamiento: Una vez que se considera que el kernel es lo suficientemente estable y no se identifican
errores críticos, Linus Torvalds realiza el lanzamiento oficial de la nueva versión estable. Luego, el ciclo se
repite para la próxima versión.

Además de las versiones regulares, ciertas versiones del kernel son designadas como soporte a largo plazo
(Long-Term Support, LTS). Estas versiones reciben actualizaciones de seguridad y correcciones de errores
durante un período extendido, típicamente de 2 a 6 años, lo que las hace ideales para sistemas que requieren
estabilidad y soporte a largo plazo, como servidores o dispositivos embebidos.
Arquitectura General del Kernel de Linux
El kernel de Linux es el núcleo central del sistema operativo Linux. Es responsable de manejar toda la
interacción entre el hardware de la computadora y los procesos de software.

La arquitectura del kernel de Linux puede entenderse mejor dividiéndola en varias capas y componentes
principales:

● Gestión de Procesos

● Gestión de Memoria

● Sistema de Archivos

● Subsistema de Red

● Interfaz de Dispositivos y Controladores

● Seguridad
Módulos del
Kernel
201.1 > Linux Kernel
Módulos del kernel
Los módulos del kernel son archivos binarios que se adhieren a la estructura del kernel de Linux, permitiendo
interactuar directamente con el núcleo del sistema y el hardware. Pueden cargarse en el kernel en tiempo de
ejecución para añadir funcionalidades específicas al sistema operativo sin necesidad de reiniciar ni recompilar
el kernel. Permiten extender las capacidades del kernel de manera dinámica, como soporte para nuevos
dispositivos de hardware, sistemas de archivos, protocolos de red, etc.

Aunque los módulos en sí se almacenan en /lib/modules/$(uname -r)/, la configuración que determina cómo
se cargan y gestionan estos módulos puede encontrarse en /etc/

1. /etc/modules (o /etc/[Link] en algunas distribuciones): Este archivo permite especificar qué


módulos deben cargarse automáticamente en el arranque del sistema. Por lo general, solo necesitas
añadir el nombre del módulo en una nueva línea para que se cargue en el inicio.

2. /etc/modprobe.d/: Este directorio contiene archivos de configuración específicos para modprobe, la


utilidad que maneja el carga y descarga de módulos del kernel de Linux. Los archivos aquí pueden
especificar opciones para los módulos al cargarlos, alias para nombrar módulos de forma diferente, y
módulos que no deberían cargarse. Esto permite un control más detallado sobre el comportamiento de
los módulos.
Módulos del kernel
Comandos para gestionar los módulos:

● lsmod: Muestra los módulos del kernel que están actualmente cargados en el sistema.

● modinfo: Proporciona información detallada sobre un módulo del kernel específico, incluyendo su versión,
descripción, parámetros que acepta, y más.

● insmod: Carga un módulo del kernel en el sistema. Requiere la ruta completa al archivo del módulo (.ko).

● rmmod: Elimina un módulo del kernel del sistema. Solo funciona con módulos que no tienen dependencias
actualmente cargadas.

● modprobe: Añade o elimina módulos del kernel y sus dependencias asociadas. Para cargar un módulo,
simplemente se especifica su nombre; para eliminarlo, se utiliza la opción -r.

● kmod: Es una herramienta de línea de comandos y una biblioteca para gestionar módulos del kernel de
Linux. kmod actúa como un reemplazo para varias utilidades anteriores (como lsmod, insmod, rmmod, y
modprobe), ofreciendo una forma más unificada y eficiente de gestionar módulos. Su funcionamiento
generalmente es transparente para el usuario, ya que proporciona las mismas funcionalidades que las
herramientas que reemplaza.
Módulos del kernel
El archivo [Link] se encuentra en /lib/modules/$(uname -r)/ y es crucial para gestionar las
dependencias entre módulos del kernel. Este archivo lista cada módulo seguido de los módulos de los que
depende. La presencia de [Link] asegura que cuando cargues un módulo que requiere otros módulos
para funcionar correctamente, las dependencias se carguen automáticamente en el orden correcto.

La utilidad depmod se utiliza para generar [Link] y otros archivos de dependencia en


/lib/modules/$(uname -r)/. Por lo general, depmod se ejecuta automáticamente cuando instalas un nuevo
módulo del kernel o después de instalar una nueva versión del kernel.
DKMS
201.1 > Linux Kernel
Ciclo de Desarrollo
DKMS (Soporte Dinámico para Módulos del Kernel), permite instalar y actualizar módulos del kernel sin
necesidad de recompilar todo el kernel o reiniciar el sistema. Es especialmente útil para aquellos módulos del
kernel que necesitan ser reconstruidos con cada actualización del kernel, como los controladores de
dispositivos externos o aquellos que no están incluidos en el árbol de fuentes del kernel principal.

El funcionamiento de DKMS se basa en ganchos que se activan cuando se instala o se actualiza el kernel.
Cuando ocurre uno de estos eventos, DKMS automáticamente recompila e instala cualquier módulo registrado
con él para la nueva versión del kernel. Esto asegura que el módulo esté siempre disponible,
independientemente de las actualizaciones del kernel.

Ventajas de DKMS

Flexibilidad: Permite a los usuarios y administradores de sistemas mantener versiones personalizadas de


módulos del kernel sin tener que seguir el ciclo de lanzamiento del kernel de Linux.

Conveniencia: Automatiza el proceso de recompilación e instalación de módulos del kernel después de cada
actualización del kernel, eliminando la necesidad de intervención manual.

Compatibilidad: Asegura que los módulos del kernel sean compatibles con la versión actual del kernel,
reduciendo el riesgo de problemas de estabilidad o de seguridad.
Ciclo de Desarrollo
Uso de DKMS

Para usar DKMS, un módulo debe estar registrado con el sistema DKMS en el sistema operativo. Esto se hace
generalmente a través de un paquete específico del módulo que se instala en el sistema. Una vez que un
módulo está registrado, DKMS se encarga del resto, compilando e instalando el módulo automáticamente
cuando sea necesario.

DKMS es ampliamente utilizado en distribuciones de Linux para gestionar los controladores de dispositivos,
especialmente aquellos que no son parte del núcleo principal de Linux, como ciertos controladores de tarjetas
gráficas de NVIDIA o AMD, controladores de red, y otros dispositivos periféricos. Esto facilita significativamente
el proceso de mantenimiento del sistema para los administradores y usuarios, asegurando que los dispositivos
funcionen correctamente después de cada actualización del kernel.
Udev
201.1 > Linux Kernel
Udev - Gestión de Dispositivos
Se encarga de gestionar /dev/, donde se encuentran los nodos de dispositivo que representan el hardware del
sistema. Actúa como un gestor de dispositivos dinámico, permitiendo al sistema operativo responder en
tiempo real a los cambios de hardware, como conectar o desconectar dispositivos USB.

Cuando el kernel detecta un nuevo dispositivo o un dispositivo es eliminado, genera un evento en el subsistema
udev. Udev recibe este evento y lo procesa según las reglas definidas en su configuración, ubicadas en
/etc/udev/rules.d/ o /lib/udev/rules.d/. Las reglas de udev son archivos de texto que pueden incluir acciones
como renombrar un dispositivo, modificar sus permisos, o ejecutar un script cuando un dispositivo se conecta.

Características:

● Detección de hardware en Tiempo Real: udev escucha los eventos del kernel y reacciona de manera
inmediata, sin necesidad de reiniciar el sistema.
● Creación dinámica de Nodos de Dispositivo: Automáticamente crea y elimina nodos de /dev/.
● Reglas personalizables: Permite a los administradores de sistemas escribir reglas que definan cómo
deben manejarse los dispositivos.
● Gestión de permisos y accesos: A través de las reglas de udev, se pueden establecer permisos
específicos para los dispositivos, lo que contribuye a la seguridad del sistema permitiendo que solo
usuarios o grupos autorizados accedan a ciertos dispositivos.
Udevadm y más
Udevadm es la herramienta de administración de línea de comandos para udev.
● udevadm monitor: Monitorea y muestra los eventos de udev en tiempo real.

● udevadm info: Consulta la base de datos de udev para obtener información detallada sobre dispositivos
específicos.

● udevadm trigger: Permite activar manualmente los eventos udev como si un dispositivo acabara de ser
conectado.

● udevadm test: Ejecuta una simulación de eventos udev para un dispositivo específico. Esto no cambia el
sistema real ni afecta los dispositivos, pero muestra lo que udev haría si el evento ocurriera.

Otros comandos

● lshw (List Hardware) proporciona información detallada sobre el hardware del sistema. Incluye detalles
sobre la CPU, memoria, discos, tarjetas de red, y mucho más.

● lspci (List PCI) muestra información sobre todos los dispositivos PCI (Peripheral Component
Interconnect) en el sistema

● lsusb (List USB) muestra información sobre los dispositivos USB conectados al sistema, incluyendo
dispositivos integrados y externos como unidades flash, discos duros externos, webcams, y más.
Introducción
a Systemd
201.2 > Sytemd Startup Configuration
Systemd
Systemd es un sistema de inicio y gestor de servicios para Linux, diseñado para ser compatible con scripts
de inicio SysV e LSB(Linux Standard Base). Proporciona paralelización de tareas, lo que significa que puede iniciar
servicios en paralelo, acelerando el proceso de arranque. Además, systemd introduce el concepto de
"unidades" para organizar y gestionar los recursos del sistema.

Las unidades son recursos que systemd sabe cómo manejar, que pueden ser servicios, montajes de sistema de
archivos, sockets, y otros. Algunos de los tipos de unidades más comunes son:

● Service units (.service): Definen cómo iniciar, detener, reiniciar y recargar servicios.

● Target units (.target): Agrupan unidades juntas, funcionando de manera similar a los niveles de
ejecución, pero más flexibles.

● Socket units (.socket): Encargadas de la comunicación interprocesos o la red, facilitando la activación


por socket de servicios.

● Mount units (.mount): Controlan los puntos de montaje en el sistema de archivos.

● Automount units (.automount): Permiten el montaje automático de sistemas de archivos.


Systemd - Adopción
Linux distribution Date added to software repository Enabled by default? Date released as default

Arch Linux January 2012 Yes October 2012

CentOS July 2014 Yes July 2014 (v7.0)

Debian April 2012 Yes April 2015 (v8.0)

Devuan N/A (not in repository) No —

Fedora Linux November 2010 (v14) Yes May 2011 (v15)

Linux Mint June 2016 (v18.0) Yes August 2018 (LMDE 3)

Manjaro Linux November 2013 Yes November 2013

openSUSE March 2011 (v11.4) Yes September 2012 (v12.2)

Red Hat Enterprise Linux June 2014 (v7.0) Yes June 2014 (v7.0)

SUSE Linux Enterprise Server October 2014 (v12) Yes October 2014 (v12)

Ubuntu April 2013 (v13.04) Yes April 2015 (v15.04)


Systemd
● Los services se agrupan en target, donde también podemos definir el orden de ejecución y las
dependencias con otros target o services. Son los equivalentes a los runlevels en SysVinit (hay target
compatibles con estos)

● Cada unidad se define en un fichero con el nombre de dicha unidad y en la extensión se indica el tipo de
unidad, por ejemplo [Link]

● Estos ficheros pueden estar en distintos directorios como:/usr/lib/systemd/system/,


/lib/systemd/system/ o /etc/systemd/system/
Systemd - Ejemplos de service y target

-- [Link] --- -- [Link] ---

[Unit] [Unit]
Description=Regular background program Description=Graphical Interface
processing daemon Documentation=man:[Link](7)
Documentation=man:cron(8) Requires=[Link]
After=[Link] [Link] Wants=[Link]
Conflicts=[Link] [Link]
[Service] After=[Link] [Link] [Link]
ExecStart=/usr/sbin/cron -f [Link]
KillMode=process AllowIsolate=yes
Restart=on-failure

[Install]
WantedBy=[Link]
Systemd - Slices
Systemd aprovecha la funcionalidad de los cgroups (Control Groups) del kernel de Linux para implementar su sistema
de gestión de "slices". Cgroups permite al sistema operativo organizar procesos en grupos jerárquicos y
asignarles políticas de uso de recursos del sistema, como CPU, memoria, E/S de disco y red.

Systemd mapea su jerarquía de unidades, incluidos servicios, mount points, y slices, directamente a una jerarquía de
cgroups, permitiendo un control sobre los recursos que cada proceso puede consumir.

Hay dos categorías principales de "slices": "System Slices" y "User Slices".

● Los "User Slices" se utilizan para gestionar y aislar los procesos iniciados por los usuarios del sistema. Cada
usuario que inicia sesión en el sistema obtiene su propio "user slice", que permite a systemd gestionar y limitar
los recursos usados por los procesos iniciados por el usuario. Los nombres de estos "slices" siguen el formato
user-[UID].slice, donde [UID] es el ID de usuario. Por ejemplo, los procesos iniciados por un usuario con UID
1000 serán gestionados bajo [Link].

● Los "System Slices" son utilizados para organizar y gestionar servicios del sistema y otros procesos no
relacionados directamente con sesiones de usuario individuales. Por defecto, systemd inicia varios "system
slices" para diferentes propósitos.
Systemd - System Slices
System Slices

● -.slice: La raíz de la jerarquía de cgroups de systemd. Todos los demás "slices", servicios y unidades se
encuentran bajo este slice.

● [Link]: El predeterminado para servicios del sistema. La mayoría de los servicios de systemd se colocan
aquí a menos que se especifique otro slice.

● [Link]: Para máquinas virtuales y contenedores gestionados por systemd.

Directivas más comunes


● CPUQuota : Limita el porcentaje de la CPU que el grupo de procesos puede consumir.
● MemoryLimit : Establece un límite en la cantidad de memoria que el grupo de procesos puede usar.
● IOWeight, IODeviceWeight: Controla la prioridad de acceso a los dispositivos de E/S para el grupo de procesos.

Para ver los procesos que se están ejecutando bajo el "slice" de un usuario específico, puedes usar el comando
systemctl status [Link], ajustando el número 1000 al UID del usuario de interés.

Una herramienta útil para monitorear el uso de recursos por parte de las unidades de systemd es systemd-cgtop.
Systemd - Override y Drop-in
Override (Sobrescritura): La capacidad de "override" permite a los usuarios cambiar o añadir configuraciones a las
unidades de systemd sin modificar directamente los archivos de configuración originales. Esto es útil para preservar
las personalizaciones a través de actualizaciones de paquetes, que podrían sobrescribir cambios en los archivos de
configuración estándar.

Drop-In Units (Unidades Adicionales): Son archivos de configuración adicionales que systemd lee junto con el
archivo de configuración principal de una unidad. Los "drop-in" se almacenan en directorios con un nombre que sigue
el patrón [unidad].d/ y pueden contener modificaciones o adiciones a la configuración de la unidad. Systemd combina
automáticamente la configuración del archivo principal con todos los archivos "drop-in" aplicables.
Seguridad
en systemd
201.3 > systemd Security
Seguridad en Systemd
Systemd permite configurar sus unidades para para proteger y restringir los procesos que se inician en ellas.

Podremos establecer privilegios a usuarios y grupos, asignar directorios temporales, restringir dispositivos y
redes y administrar los cgroups.

Configurar unidades de systemd para ejecutarse con privilegios específicos

User=: Define el usuario bajo el cual se ejecutará el servicio.


Group=: Define el grupo bajo el cual se ejecutará el servicio.
SupplementaryGroups=: Define los grupos adicionales a los que pertenecerá el servicio durante su ejecución.

Ejemplo:

[Service]
User=www-data
Group=www-data
SupplementaryGroups=webdev
Seguridad en Systemd

Configurar unidades de systemd con un directorio /tmp privado

PrivateTmp=: Esta opción crea un directorio /tmp y /var/tmp privado para el servicio, aislado del sistema y de otros
servicios.
Ejemplo:
[Service]
PrivateTmp=true
Esto asegura que el servicio tenga su propio espacio de directorio temporal, evitando posibles conflictos o
filtraciones de datos con otros servicios que también utilizan /tmp.
Seguridad en Systemd

Restringir el acceso a dispositivos de servicios

DeviceAllow=: Especifica qué dispositivos puede acceder un servicio. Esto puede ser usado para limitar el
acceso a dispositivos específicos por razones de seguridad.

Ejemplo:
[Service]
DeviceAllow=/dev/null rw
DeviceAllow=/dev/random r

En este ejemplo, el servicio tiene permisos de lectura y escritura en /dev/null y solo permisos de lectura en
/dev/random.
Seguridad en Systemd

Gestionar la accesibilidad de red de los servicios

IPAddressAllow=: Permite el acceso a la red solo a las direcciones IP especificadas.


IPAddressDeny=: Bloquea el acceso a la red desde las direcciones IP especificadas.

Ejemplo:
[Service]
IPAddressAllow=[Link]/24
IPAddressDeny=any

En este ejemplo, el servicio sólo puede comunicarse con dispositivos en la subred [Link]/24 y se le niega el
acceso a todas las demás direcciones IP.

RestrictNetworkInterfaces=: Restringe las interfaces de red a las que puede acceder un servicio.

Ejemplo:
[Service]
RestrictNetworkInterfaces=eth0

En este ejemplo, el servicio solo puede usar la interfaz de red eth0.


Seguridad en Systemd

Linux capabilities permiten otorgar privilegios específicos a procesos sin necesidad de darles todos los
privilegios de root. Esto se configura usando AmbientCapabilities= en systemd.

Ejemplo:
[Service]
AmbientCapabilities=CAP_NET_BIND_SERVICE

Esto permite que el servicio vincule puertos menores a 1024 sin ser root. Se puede consultar man capabilities

Cgroups se usan para limitar, contabilizar y aislar el uso de recursos (CPU, memoria, disco, red) de un grupo de
procesos. Systemd utiliza cgroups para gestionar los recursos de los servicios.

Ejemplo:
[Service]
CPUQuota=20%
MemoryLimit=500M

Este ejemplo configura el servicio para que use como máximo el 20% de la CPU y 500MB de memoria.
Seguridad en Systemd
Ejemplo completo

[Unit]
Description=Ejemplo de servicio seguro

[Service]
ExecStart=/usr/bin/ejemplo
User=ejemplo
Group=ejemplo
SupplementaryGroups=ejemplo_supp
PrivateTmp=true
DeviceAllow=/dev/null rw
IPAddressAllow=[Link]/24
IPAddressDeny=any
RestrictNetworkInterfaces=eth0
AmbientCapabilities=CAP_NET_BIND_SERVICE
CPUQuota=20%
MemoryLimit=500M

[Install]
WantedBy=[Link]
GRUB 2
201.4 > Bootloaders and System Recovery
GESTORES DE ARRANQUE
La BIOS/UEFI pasan el control al gestor de arranque que será el programa
responsable de cargar el sistema operativo.

• LILO
Linux Loader, es un cargador muy antiguo que está en desuso.
• GRUB (legacy)
El sustituto de Lilo, pero también casi desaparecido por su sucesor GRUB2. Lo
podemos encontrar en distribuciones antiguas.

‣ Admite BIOS pero no UEFI


‣ Fichero de configuración: /boot/grub/[Link] (o [Link])
GESTORES DE ARRANQUE

GRUB numera las unidades y particiones de forma especial. El primer disco será
(hd0) y la primera partición (hd0,0), después 1 y así consecutivamente

Opciones del menú de configuración

‣ default: S.O. por defecto que arrancará


‣ timeout: segundos que espera la elección del usuario
GESTORES DE ARRANQUE
Las entradas de cada Sistema Operativo tienen:
‣ title: Nombre que aparece en el menú
‣ root: Indica con su nomenclatura, la partición que contiene el sistema
operativo. Ejemplo: root (hd1,2)
‣ kernel: Ruta del fichero del kernel y opciones de arranque
‣ initrd: Ruta del disco RAM, con opciones y controladores para poder
arrancar.
Para sistemas operativos que No son Linux:
‣ rootnoverify: Partición del S.O.
‣ chainloader: Para pasar el control a otro cargador de arranque. +1 significa
que lee el primer sector de la partición indicada por rootnoverify.
GESTORES DE ARRANQUE
• GRUB2
El actual gestor de arranque en casi todas las distribuciones. Es muy versátil,
puede cargar módulos según las necesidades del sistema.

‣ Hereda la nomenclatura de GRUB, pero las particiones empiezan en 1


‣ Fichero de configuración: /boot/grub/[Link] (o /boot/grub2/[Link])
‣ Las entradas de los S.O. empiezan por la palabra reservada menuentry
seguida del título y el resto de opción van dentro de llaves
‣ Otras diferencias:
✓ set root = hd0,msdos1
✓ rootnoverify se sustituye por root
GESTORES DE ARRANQUE
El menú de configuración no se modifica manualmente. Las opciones se
personalizan en /etc/default/grub y el resto de datos se obtienen con unos script
que se encuentran en /etc/grub.d/, que se van ejecutando por orden según su
nombre.
Para crear el /boot/grub/[Link] se ejecuta update-grub o
grub-mkconfig (la salida habrá que redirigirla a dicho fichero).

Para instalar grub2: grub-install


GESTORES DE ARRANQUE
OPCIONES PARA EL KERNEL
‣ QUIET: evita que se muestren todos los mensajes al arrancar
‣ DEBUG: aparecen mensajes de depuración
‣ INIT: Indica el programa que se ejecutará al arrancar, en lugar de /sbin/init.
ejemplo: init=/bin/bash
‣ SINGLE: Se ejecuta en modo monousuario.
‣ ROOT=/DEV/DEVICE : indica la partición que tiene el sistema raiz
‣ RO o RW: Se monta en sólo lectura o en lectura/escritura
‣ MEM = SIZE: Fuerza a usar una cantidad determinada de RAM
ejemplo: mem=1024M
Shell de GRUB
● Acceso durante el arranque: La shell de GRUB puede ser accedida durante la secuencia de arranque
antes de que se cargue el sistema operativo. Esto se hace generalmente presionando una tecla
específica (como c) cuando se muestra el menú de GRUB.

● Interfaz interactiva: GRUB proporciona una interfaz de línea de comandos donde puedes escribir
comandos manualmente para cargar sistemas operativos, configurar parámetros de kernel, y modificar la
configuración de arranque.

● Flexibilidad: Puedes utilizar la shell para cargar diferentes núcleos, pasar parámetros específicos al
kernel, y reparar o modificar entradas de arranque corruptas o mal configuradas.

● Soporte de scripts: GRUB permite ejecutar comandos desde scripts, lo que te permite automatizar
tareas repetitivas directamente desde la shell.
Shell de GRUB
Comandos Básicos de la Shell de GRUB

● ls: Lista las particiones y dispositivos reconocidos por GRUB. Es útil para identificar los dispositivos
disponibles y su estructura de partición.

● set: Muestra o establece variables de entorno de GRUB. Por ejemplo, set root=(hd0,1) configura la
partición desde la cual GRUB intentará cargar el sistema operativo.

● cat: Muestra el contenido de un archivo. Es útil para ver la configuración de los archivos de configuración
dentro de GRUB.

● configfile: Carga un archivo de configuración de GRUB. Esto puede ser utilizado para cambiar entre
diferentes configuraciones sin alterar la configuración original.

● insmod: Carga un módulo GRUB. Los módulos pueden proporcionar funcionalidad adicional como
soporte para un sistema de archivos.

● search: Busca un dispositivo por su etiqueta o UUID, lo cual es útil si no conoces la designación exacta
del disco o partición.

● boot: Comienza el proceso de arranque con los parámetros actuales.


Shell de GRUB
En sistemas UEFI, la shell de GRUB se vuelve aún más crucial debido a las capas adicionales de configuración
que UEFI introduce, como las entradas de arranque UEFI y el Secure Boot. En tales sistemas, puedes usar GRUB
para manipular las variables de UEFI directamente desde la shell, utilizando comandos como:

efivar -l

Este comando listaría todas las variables UEFI disponibles, lo que puede ayudarte a diagnosticar problemas

Al igual que GRUB 2 tiene un shell, en los entornos UEFI, existe una funcionalidad denominada UEFI Shell, que es
una interfaz de línea de comandos que permite manipular el firmware UEFI, los dispositivos y las particiones. La
shell de UEFI puede ser usada para ejecutar scripts, arrancar sistemas operativos de manera manual, y cambiar
la configuración del firmware. Sus usos principales son:

● Navegación y Gestión de Archivos: Permite navegar por los sistemas de archivos en dispositivos
reconocidos por UEFI.
● Carga de Aplicaciones EFI: Permite iniciar aplicaciones EFI, como otros gestores de arranque o
herramientas de diagnóstico.
● Modificación de Variables UEFI: Permite modificar variables de configuración que controlan el
comportamiento del firmware y del proceso de arranque.
Opciones del GRUB
Los gestores de arranque como GRUB permiten modificar o sobrescribir temporalmente las opciones de
arranque durante el proceso de inicio. Esto puede incluir cambiar parámetros del kernel, modificar el
dispositivo raíz, o ajustar otros parámetros importantes. Estos cambios pueden ser vitales para solucionar
problemas de arranque o para iniciar el sistema en un modo especial como el modo de recuperación o el modo
seguro.

Acceso al Menú de GRUB: Al iniciar el sistema, normalmente pulsando una tecla como Shift o Esc, se accede al
menú de GRUB.

Modificación de Parámetros de Arranque: En el menú de GRUB, puedes seleccionar una entrada de arranque
y presionar 'e' para editar sus comandos de inicio. Esto te permite modificar parámetros como:

● ro a rw para montar el sistema de archivos raíz como escribible.


● Agregar single para arrancar en modo single-user .
● Agregar init=/bin/bash para arrancar directamente a una shell de Bash.

Continuar el Arranque: Después de realizar los cambios, se puede continuar el proceso de arranque con las
nuevas configuraciones presionando Ctrl+x o F10, según la versión de GRUB.
Contraseña para GRUB
Configurar una contraseña en GRUB sirve para varios propósitos de seguridad:

● Restringir el Acceso al Menú de GRUB: Evita que los usuarios no autorizados cambien opciones de
arranque o editen los parámetros del kernel y de arranque.

● Prevenir el Acceso a Modos de Recuperación: Impide que alguien use el modo de recuperación o el
shell de emergencia a menos que conozca la contraseña.

● Proteger las Entradas de Arranque Específicas: Puedes configurar contraseñas para entradas
específicas, permitiendo un control más detallado sobre quién puede arrancar qué sistemas operativos
o versiones del kernel.
Configuración de la Contraseña en GRUB
1. Generar una Contraseña Hash

Primero, debes generar un hash de la contraseña que deseas usar. Esto se puede hacer usando el comando
grub-mkpasswd-pbkdf2. Este comando te pedirá que ingreses la contraseña y luego generará un hash PBKDF2
de la misma.

grub-mkpasswd-pbkdf2

Anote el hash resultante, ya que lo necesitarás para el siguiente paso.

2. Editar el Archivo de Configuración de GRUB

Después de generar el hash de la contraseña, necesitas agregarlo al archivo de configuración de GRUB. Este
archivo suele estar ubicado en /etc/grub.d/40_custom .

Añade la siguiente línea al archivo de configuración:

set superusers="usuario"
password_pbkdf2 usuario tu_hash_de_contraseña

Reemplaza "usuario " con un nombre de usuario que elijas, y tu_hash_de_contraseña con el hash generado
anteriormente.
Configuración de la Contraseña en GRUB
Si quieres que alguna entrada del menú de arranque no necesite contraseña para arrancar, habría que añadir
--unrestricted en las líneas de menuentry en /etc/grub/[Link] o /etc/grub.d/10_linux para las que no quieres
pedir la contraseña, dejando las demás protegidas por defecto.

3. Actualizar la Configuración de GRUB

Después de editar y guardar el archivo de configuración, necesitas actualizar GRUB para que los cambios surtan
efecto:

update-grub

Este comando regenerará el archivo de configuración principal de GRUB, incorporando los cambios que has
realizado.
Systemd
Boot
201.4 > Bootloaders and System Recovery
Systemd-boot
systemd-boot, anteriormente conocido como gummiboot, es un gestor de arranque simple basado en UEFI que
viene con systemd. Está diseñado para ser rápido y sencillo, y proporciona funcionalidades básicas para cargar el
kernel de Linux y otras imágenes de arranque directamente en hardware con UEFI, sin depender de GRUB u otros
bootloaders más complejos.

La instalación de systemd-boot es un proceso directo, pero es importante asegurarse de que el sistema esté
utilizando UEFI y no BIOS tradicional. Aquí están los pasos básicos para instalar systemd-boot:

Verifica el modo UEFI:


Antes de instalar systemd-boot, asegúrate de que tu sistema esté arrancando en modo UEFI. Puedes verificar
esto en la configuración de la UEFI/BIOS de tu computadora, o revisando si el directorio /sys/firmware/efi
está presente, lo que indica que estás en modo UEFI.

Instalar systemd-boot:
Si estás usando una distribución que viene con systemd, puedes usar bootctl para instalar systemd-boot:

bootctl install

Este comando instalará systemd-boot en la partición ESP (EFI System Partition) que está montada típicamente
en /boot o /efi. Copia los binarios de systemd-boot a la ESP y crea las entradas en la NVRAM del sistema UEFI
para bootear systemd-boot.
Configuración de systemd-boot
Los archivos de configuración principales son:

loader/[Link]: Este archivo configura el comportamiento general del gestor de arranque. Ejemplo de configuraciones
en [Link]:

default Debian
timeout 4
editor 0

Aquí, default especifica el patrón del archivo de entrada que se cargará por defecto. timeout establece el tiempo de espera
antes de arrancar automáticamente la entrada por defecto, y editor indica si el editor de entradas de arranque debe estar
habilitado (1) o deshabilitado (0).

Entradas de arranque: Las entradas de arranque se definen en archivos .conf ubicados en el directorio
loader/entries/ . Cada sistema operativo o kernel que desees arrancar debe tener un archivo de entrada. Un ejemplo de
un archivo de entrada para un kernel de Linux podría ser:

title Debian
linux /vmlinuz-linux
initrd /[Link]
options root=PARTUUID=xxxxx rw

Aquí, title es el nombre que aparece en el menú de arranque, linux especifica la ruta al kernel de Linux, initrd es la ruta a la
imagen initramfs, y options contiene las opciones pasadas al kernel, como la especificación del dispositivo root.
Configuración de systemd-boot
Actualizar systemd-boot

Si necesitas actualizar systemd-boot después de cambiar la configuración o actualizar el firmware, puedes ejecutar

bootctl update

Este comando actualizará los binarios de systemd-boot en la ESP si hay versiones más nuevas disponibles.
Systemd rescue
and emergency
modes
201.3 > Bootloaders and System Recovery
Modo Rescate
El modo de rescate de systemd es un estado de operación que arranca el sistema con los servicios más esenciales y un
entorno de shell para permitir la administración y reparación del sistema. En este modo, systemd intenta montar todas las
particiones del sistema de archivos, pero no arranca la mayoría de los servicios normales y mantiene el sistema en un
estado mínimo.

Acceder al Modo de Rescate:

Durante el arranque del sistema, puedes interrumpir el proceso normal de arranque (usualmente manteniendo presionado
Shift o pulsando Esc para ingresar al menú de GRUB).

Editar la entrada de arranque en GRUB y agregar el argumento [Link]=[Link] al comando de arranque del
kernel.

Continuar el arranque.

El sistema iniciará directamente en el modo de rescate.

Una vez en el modo de rescate, se te pedirá la contraseña de root para continuar. Este modo es útil para reparar sistemas
de archivos dañados, recuperar archivos perdidos, modificar configuraciones erróneas y otras tareas de diagnóstico y
recuperación.
Modo de Emergencia
El modo de emergencia es incluso más minimalista que el modo de rescate. Este modo no intenta montar las particiones
de sistema de archivos, excepto la raíz (/), y solo inicia los servicios más básicos. El modo de emergencia es útil cuando
incluso el modo de rescate es demasiado avanzado, por ejemplo, cuando hay errores serios en las particiones o el sistema
de archivos.

Acceder al Modo de Emergencia:

Al igual que con el modo de rescate, interrumpe el arranque en GRUB.

Añade [Link]=[Link] al comando de arranque del kernel.

Continúa el arranque para entrar en el modo de emergencia.

En el modo de emergencia, también necesitarás autenticarte como root para proceder. Este modo es adecuado para
situaciones en las que necesitas un entorno aún más controlado y minimalista para efectuar reparaciones críticas.
Directorios
Importantes
201.4 > Bootloaders and System Recovery
/boot/
1. /boot/

El directorio /boot/ es un componente esencial en la mayoría de los sistemas Linux, donde se almacenan los archivos
necesarios para el arranque del sistema. Aquí se guardan los siguientes tipos de archivos:

● vmlinuz (o vmlinuz-<version>): Es el kernel de Linux comprimido. Este archivo es cargado directamente por el gestor
de arranque (como GRUB) y es esencial para iniciar el sistema operativo.

● initramfs (o initrd, initramfs-<version>.img): Es una imagen temporal del sistema de archivos inicial que se carga en la
memoria durante el arranque antes de que el sistema de archivos raíz esté disponible. El initramfs contiene los
módulos del kernel y los scripts necesarios para montar el sistema de archivos raíz y realizar configuraciones
preliminares antes de pasar el control al sistema operativo principal.

● [Link] (o [Link]-<version>): Contiene el mapa de símbolos del kernel, que es útil para la depuración del
kernel.

● config (o config-<version>): Guarda la configuración de compilación del kernel, que documenta cómo se configuró el
kernel.
/boot/grub/
2. /boot/grub/

El directorio /boot/grub/ es específico para sistemas que usan GRUB como gestor de arranque. Contiene los archivos de
configuración y datos necesarios para que GRUB inicie el sistema operativo y otros componentes.

Incluye:

● [Link]: Es el archivo de configuración principal de GRUB. Contiene menús, entradas de arranque, y opciones que
GRUB utiliza para cargar sistemas operativos o herramientas adicionales. Este archivo no se debe editar
manualmente.

● grubenv: Almacena variables de entorno para GRUB, que pueden ser modificadas durante el arranque y guardadas
para usos posteriores.

● Fonts, modules, i386-pc, x86_64-efi, etc.: Directorios y archivos que contienen módulos, fuentes, y otros archivos
binarios que GRUB puede cargar durante el arranque. Estos módulos pueden añadir funcionalidades adicionales a
GRUB, como soporte para diferentes sistemas de archivos o capacidades de red.
/boot/efi/
El directorio /boot/efi/ es utilizado en sistemas con firmware UEFI.

Este directorio es una montura del sistema de archivos EFI (ESP - EFI System Partition) y contiene los cargadores de
arranque y las aplicaciones necesarias para sistemas UEFI.

El contenido típico incluye:

● EFI: Directorio que contiene las aplicaciones de firmware UEFI, como el cargador de arranque de Windows, GRUB
como EFI/grub/grubx64.efi para sistemas Linux, y otras utilidades UEFI.

● Microsoft: Carpeta que contiene los archivos de arranque de Windows en sistemas dual-boot.

● BOOT: Directorio que puede contener un cargador de arranque de respaldo, como [Link], que se puede
utilizar si el cargador principal falla o no está disponible.
SMART
202.1 > Storage Device Integrity
and Encryption
Introducción a SMART

SMART es una tecnología integrada en la mayoría de los discos duros y SSD modernos que
permite a los usuarios y sistemas operativos monitorear el estado del dispositivo de
almacenamiento y detectar fallos potenciales antes de que ocurran.
Proporciona una variedad de datos sobre el estado del disco, incluyendo atributos como la
tasa de errores de lectura, el tiempo de búsqueda, el número de sectores reasignados, y
muchos otros parámetros que pueden indicar problemas de hardware inminentes.
El comando smartctl es parte del paquete smartmontools y se utiliza para controlar y
monitorear los dispositivos de almacenamiento usando SMART.
Uso Básico de smartctl
Consultar toda la información SMART del disco: smartctl -a /dev/sda
Este comando muestra todos los atributos SMART del disco /dev/sda, incluyendo información básica, atributos SMART,
y registros de auto-pruebas.

Estado SMART del disco: smartctl -H /dev/sda


Muestra un breve resumen del estado de salud del disco.

Activar o desactivar SMART en un disco:


smartctl -s on /dev/sda
smartctl -s off /dev/sda
Estos comandos permiten activar o desactivar el monitoreo SMART en el dispositivo.

Ejecutar una prueba SMART: smartctl -t short /dev/sda smartctl -t long /dev/sda
Las pruebas SMART pueden ser cortas o largas, y verifican diferentes aspectos del hardware del disco para detectar
fallos potenciales.
Smartd
smartd es el demonio de smartmontools que monitorea continuamente los discos duros y envía alertas si detecta
problemas. Se configura con el fichero /etc/[Link].
Línea de ejemplo:
/dev/sda -a -o on -S on -s (S/../.././02|L/../../7/03) -m root@[Link]
-a: Activa todas las pruebas y notificaciones SMART.
-o on: Activa el monitoreo automático de sectores fuera de servicio.
-S on: Activa la recopilación automática de estadísticas SMART.
-s (S/../.././02|L/../../7/03): Programa pruebas cortas (S) cada día a las 2 AM y pruebas largas (L) cada semana el día 7 a
las 3 AM.
-m root@[Link]: Envía notificaciones por correo electrónico a root@[Link].

Iniciar smartd
systemctl start smartd
systemctl enable smartd
Atributos SMART
● Reallocated Sectors Count (Cuenta de Sectores Reasignados): Indica el número de sectores defectuosos que
han sido reasignados. Un aumento en este valor puede ser una señal de advertencia.

● Current Pending Sector Count (Cuenta de Sectores Pendientes): Muestra el número de sectores que están
pendientes de ser reasignados debido a errores de lectura.

● Offline Uncorrectable Sector Count (Cuenta de Sectores No Corregibles Offline): Indica el número de sectores
que no pueden ser corregidos durante una prueba offline.

● Power-On Hours (Horas de Encendido): Muestra el tiempo total que el disco ha estado en funcionamiento.

● Temperature Celsius (Temperatura en Celsius): Indica la temperatura actual del disco. Temperaturas elevadas
pueden reducir la vida útil del disco.
Encriptación de
discos y sistemas
de archivos
202.1 > Storage Device Integrity
and Encryption
Encriptación de Discos

La encriptación de discos y sistemas de archivos es una técnica esencial para proteger los
datos almacenados en dispositivos de almacenamiento.
Esta técnica garantiza que los datos no puedan ser leídos o modificados por personas no
autorizadas, protegiendo así la información sensible incluso si el dispositivo de
almacenamiento es robado o accedido de forma indebida.

Tipos de Encriptación
● Encriptación de Discos Completos
● Encriptación a Nivel de Sistema de Archivos
Encriptación de Discos Completos
La encriptación de discos completos (FDE - Full Disk Encryption) cifra todos los datos en un
disco duro o un dispositivo de almacenamiento. Este tipo de encriptación se aplica a nivel de
bloque y protege todo el contenido del disco, incluyendo los archivos del sistema, los archivos
de usuario, el espacio libre y los archivos temporales.
Ventajas:
● Seguridad Integral: Protege todos los datos en el dispositivo.
● Transparencia: Una vez que se ha autenticado, el sistema de archivos y las aplicaciones
pueden acceder a los datos sin necesidad de modificar el software.
● Protección de Todo el Sistema: Incluye archivos de sistema y de usuario.
Desventajas:
● Rendimiento: Puede afectar el rendimiento del sistema debido al cifrado y descifrado
continuo.
● Complejidad en la Recuperación: La recuperación de datos en caso de fallos del sistema
puede ser más complicada.
Encriptación a Nivel de Sistema de Archivos
La encriptación a nivel de sistema de archivos cifra archivos o directorios específicos dentro de
un sistema de archivos. Esta técnica permite un control más granular sobre qué datos se cifran
y quién puede acceder a ellos.
Ventajas:
● Flexibilidad: Permite cifrar solo los archivos sensibles.
● Rendimiento Mejorado: Menos impacto en el rendimiento ya que solo se cifran partes
específicas del disco.
● Control Granular: Facilita la implementación de políticas de acceso basadas en usuarios
o grupos.
Desventajas:
● Gestión Compleja: Requiere una gestión más detallada para asegurarse de que todos los
archivos sensibles estén cifrados.
● No Protege Todo el Disco: Los archivos no cifrados pueden ser vulnerables.
Algoritmos de Encriptación
Existen varios algoritmos de encriptación utilizados comúnmente para cifrar datos en discos y
sistemas de archivos:

AES (Advanced Encryption Standard)


AES es uno de los algoritmos más utilizados para la encriptación de datos debido a su
seguridad y eficiencia. Es un estándar de cifrado simétrico que puede usar claves de
128, 192, o 256 bits.

Serpent
Serpent es un algoritmo de cifrado simétrico que también fue finalista en el proceso de
selección para el estándar AES. Es conocido por su alta seguridad, aunque es más lento
que AES.

Twofish
Twofish es otro algoritmo de cifrado simétrico que ofrece un buen equilibrio entre
seguridad y rendimiento. Al igual que Serpent, también fue un finalista en el proceso de
selección para AES.
Software de
cifrado
202.1 > Storage Device Integrity
and Encryption
dm-crypt
dm-crypt es una infraestructura del kernel de Linux que proporciona encriptación transparente
de dispositivos de almacenamiento a nivel de bloque. Es una de las capas más bajas en la pila de
encriptación de discos en Linux y es utilizada como backend por muchas herramientas de
encriptación, incluyendo LUKS.

Características Principales de dm-crypt


● Cifrado de Bloques: Encripta bloques individuales de datos en el nivel del dispositivo, lo que
significa que cualquier sistema de archivos que se cree en el dispositivo estará cifrado.
● Transparente para Aplicaciones: Una vez montado, las aplicaciones y el sistema operativo
pueden acceder a los datos cifrados sin necesidad de modificaciones especiales.
● Soporte para Múltiples Algoritmos de Cifrado: Incluye soporte para algoritmos de cifrado
como AES, Twofish, y Serpent, entre otros.
● Integración con LVM: Puede ser utilizado junto con el Gestor de Volúmenes Lógicos (LVM)
para proporcionar volúmenes encriptados flexibles y redimensionables.
dm-crypt
Comandos Básicos de dm-crypt
Abrir un Dispositivo Cifrado con dm-crypt:
cryptsetup open --type plain /dev/sda1 encrypted
Este comando abre el dispositivo /dev/sda1 utilizando encriptación simple.
Cerrar un Dispositivo Cifrado:
cryptsetup close encrypted
Cierra el dispositivo cifrado previamente abierto.
LUKS
LUKS es un estándar para la encriptación de discos en Linux que utiliza dm-crypt como su backend de
encriptación. LUKS facilita la gestión de claves y la interoperabilidad entre diferentes herramientas y
distribuciones de Linux. Proporciona un formato estándar en disco para los volúmenes cifrados, lo que
hace que sea más fácil de usar y gestionar.
Características Principales de LUKS
● Formato Estándar en Disco: Define un formato de disco estándar que almacena no solo los datos
cifrados, sino también información de configuración y claves de encriptación.
● Gestión de Múltiples Claves: Soporta múltiples claves de encriptación para un solo volumen, lo
que permite una gestión de accesos flexible y segura.
● Interoperabilidad: Al ser un estándar, los volúmenes cifrados con LUKS pueden ser gestionados y
montados en diferentes sistemas y herramientas que soporten LUKS.
● Seguro: Utiliza prácticas seguras para el manejo de claves y encriptación de datos, protegiendo
contra muchos vectores de ataque comunes.
LUKS
Comandos Básicos de LUKS
● Inicializar un Dispositivo con LUKS:cryptsetup luksFormat /dev/sda1
Este comando inicializa el dispositivo /dev/sda1 con un contenedor LUKS, configurando el cifrado y
las claves necesarias. Se te pedirá que confirmes la operación y que introduzcas una contraseña de
encriptación.
● Abrir un Dispositivo LUKS: cryptsetup luksOpen /dev/sda1 my_encrypted_volume
Este comando abre el dispositivo LUKS /dev/sda1 y asigna el nombre de dispositivo mapeado
my_encrypted_volume. Se te pedirá que ingreses la contraseña de encriptación.
● Crear un Sistema de Archivos en el Volumen Cifrado:
mkfs.ext4 /dev/mapper/my_encrypted_volume
Crea un sistema de archivos en el volumen cifrado recién abierto.
● Montar el Volumen Cifrado:mount /dev/mapper/my_encrypted_volume /mnt
Monta el volumen cifrado en el directorio /mnt.
● Cerrar el Dispositivo LUKS:cryptsetup luksClose my_encrypted_volume
Cierra el dispositivo mapeado y cifra de nuevo el volumen.
LUKS
Gestión de Claves en LUKS
● Añadir una Nueva Clave:cryptsetup luksAddKey /dev/sda1
Permite añadir una clave adicional al contenedor LUKS del dispositivo /dev/sda1. Se te pedirá que
ingreses una clave existente para autenticación antes de agregar una nueva.
● Eliminar una Clave:cryptsetup luksRemoveKey /dev/sda1
Elimina una clave del contenedor LUKS. De nuevo, se te pedirá que ingreses una clave existente
para autenticación.
Configuración de Arranque Automático
El archivo /etc/crypttab configura qué volúmenes cifrados deben ser abiertos automáticamente
durante el arranque.
Ejemplo de Entrada en /etc/crypttab:
my_encrypted_volume /dev/sda1 none luks
Esta línea indica que el dispositivo /dev/sda1 debe ser abierto y mapeado como my_encrypted_volume
usando LUKS durante el arranque del sistema.
Casos de Uso Comunes
● Protección de Datos Personales: Uso de LUKS para cifrar discos duros y unidades USB que
contienen información personal sensible.

● Cumplimiento de Normativas: Implementación de encriptación en servidores y dispositivos de


almacenamiento para cumplir con regulaciones de protección de datos como GDPR o HIPAA.

● Seguridad en Entornos Empresariales: Cifrado de discos en laptops y estaciones de trabajo


corporativas para proteger la información confidencial en caso de pérdida o robo del
dispositivo.
SAN
Una Red de Área de Almacenamiento (SAN) es una red especializada de alta velocidad que
proporciona acceso a almacenamiento consolidado a nivel de bloque. Las SAN son utilizadas
principalmente en entornos empresariales donde se requiere un acceso rápido, confiable y flexible a
grandes volúmenes de datos.

Protocolos Relevantes en SAN

● iSCSI (Internet Small Computer Systems Interface): permite enviar comandos SCSI a través de
redes IP.

● FCoE (Fibre Channel over Ethernet): encapsula comandos Fibre Channel en tramas Ethernet,
permitiendo que el tráfico Fibre Channel se transporte a través de redes Ethernet.

● AoE (ATA over Ethernet): permite la transmisión de comandos ATA a través de redes Ethernet,
proporcionando acceso a nivel de bloque a dispositivos de almacenamiento.
Identificadores en SAN
● WWID: Identificador único mundial que se asigna a cada dispositivo de almacenamiento en
una SAN. Los WWIDs son utilizados para identificar de manera única y persistente los
dispositivos de almacenamiento.

● WWN: Nombre único mundial asignado a cada puerto de red en una SAN, similar a una
dirección MAC en redes Ethernet.

○ Tipos de WWN

■ WWPN (World Wide Port Name): Identifica un puerto específico en un dispositivo de


almacenamiento.
■ WWNN (World Wide Node Name): Identifica un nodo o dispositivo completo.

● LUN (Logical Unit Number): Número que se utiliza para identificar una unidad lógica dentro de
un dispositivo de almacenamiento en una SAN.
RAID
202.2 > Configuración de RAID
Introducción a RAID
RAID (Redundant Array of Independent Disks) permite mejorar el rendimiento y/o la redundancia de
los datos en los sistemas de almacenamiento.

Se pueden crear RAID usando hardware o software. En ambos casos dispondremos de una unidad de
almacenamiento con prestaciones adicionales a las de los discos originales utilizados. Se puede
aumentar velocidad de lectura y escritura, pero su mayor utilidad es conseguir mayor seguridad
protegiendo al sistema del fallo físico de un disco.

Aquí nos centraremos en cómo configurar e implementar RAID por software, específicamente RAID 0, 1
y 5, utilizando herramientas y utilidades de Linux.
Niveles de RAID
RAID 0 (Striping):

Descripción: Los datos se dividen en bloques y se distribuyen entre todos los discos del
arreglo. No ofrece redundancia.

Ventajas: Mejora el rendimiento de lectura y escritura.

Desventajas: Si un disco falla, se pierde toda la información.

RAID 1 (Mirroring):

Descripción: Los datos se duplican en dos discos. Ofrece redundancia al mantener una copia
idéntica de los datos en ambos discos.

Ventajas: Alta disponibilidad y protección contra fallos de disco.

Desventajas: La capacidad efectiva es la mitad de la capacidad total de los discos


combinados.
Niveles de RAID
RAID 5 (Striping with Parity):

Descripción: Los datos y la información de paridad se distribuyen entre tres o más discos. Si
un disco falla, los datos pueden reconstruirse a partir de la paridad.

Ventajas: Buen equilibrio entre rendimiento, capacidad y redundancia.

Desventajas: La reconstrucción de datos puede ser lenta y el rendimiento de escritura puede


ser menor debido al cálculo de la paridad.

RAID 10 (Stripe of Mirrors):

Descripción: Combina RAID 0 y RAID 1. Los datos se duplican (mirroring) y se distribuyen


(striping) en múltiples discos.

Ventajas: Alta disponibilidad y rendimiento.

Desventajas: Requiere al menos cuatro discos y tiene una capacidad efectiva del 50% del
total.
Niveles de RAID
Conocimiento de Otros Niveles de RAID

RAID 6: Similar a RAID 5, pero con una paridad adicional. Puede soportar la falla de dos discos.

RAID 7: Nivel patentado que añade una capa de caché adicional para mejorar el rendimiento.

RAID 50: Combinación de RAID 5 y RAID 0. Ofrece alta redundancia y rendimiento.


MDADM
mdadm es la herramienta principal para gestionar RAID por software en Linux.
mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sda /dev/sdb
Este comando crea un dispositivo RAID 1 llamado /dev/md0 con 2 discos (/dev/sda, /dev/sdb)

● Ver estado del raid: cat /proc/mdstat o mdadm --detail /dev/md0


● Ver más detallado: mdadm --query --detail /dev/md0
● Parar el raid: mdadm --stop /dev/md0
● Poner un disco en fallo: mdadm -f /dev/md0 /dev/sdb1
● Quitar un disco: mdadm --remove /dev/md0 /dev/sdb1
● Añadir un disco: mdadm --add /dev/md0 /dev/sdb1
● Volver a arrancarlo: mdadm --assemble /dev/md0 /dev/sdb1 /deb/sdc1
[Link]
Es el archivo de configuración de mdadm se utiliza para definir arrays RAID y persistir
configuraciones.

Ubicación: /etc/mdadm/[Link] o /etc/[Link]

Orden para añadir la configuración:


mdadm --detail --scan > /etc/mdadm/[Link]
LVM
202.3 > Logical Volume Manager
LVM
El Gestor de Volúmenes Lógicos (LVM) es una herramienta potente y flexible en
Linux que permite a los administradores de sistemas gestionar el espacio de
almacenamiento de manera más eficiente.

LVM facilita la creación, modificación y eliminación de volúmenes lógicos, grupos


de volúmenes y volúmenes físicos, así como la creación de instantáneas y el
redimensionamiento de volúmenes.
Componentes de LVM
Physical Volumes (PV): Discos físicos o particiones que se agregan a LVM.

Comando: /sbin/pv* (e.g., pvcreate, pvdisplay, pvmove, pvremove)

Volume Groups (VG): Conjuntos de volúmenes físicos combinados para crear un pool de
almacenamiento del cual se asignan volúmenes lógicos.

Comando: /sbin/vg* (e.g., vgcreate, vgdisplay, vgextend, vgreduce, vgremove)

Logical Volumes (LV): Volúmenes de almacenamiento creados a partir de grupos de


volúmenes, que pueden ser redimensionados y movidos fácilmente.

Comando: /sbin/lv* (e.g., lvcreate, lvdisplay, lvextend, lvreduce, lvremove)


[Link]
COMANDOS LVM. VOLUMENES FÍSICOS

● pvcreate: Inicializa un disco o partición como un volumen físico para ser utilizado en LVM.
pvcreate /dev/sda1
● pvdisplay: Muestra información sobre volúmenes físicos.
pvdisplay
● pvmove: Mueve los datos de un volumen físico a otro.
pvmove /dev/sda1 /dev/sdb1
● pvremove: Elimina la etiqueta de volumen físico de un dispositivo.
pvremove /dev/sda1
COMANDOS LVM. GRUPOS DE VOLUMENES
● vgcreate: Crea un grupo de volúmenes.

vgcreate myvg /dev/sda1 /dev/sdb1


● vgdisplay:Muestra información sobre grupos de volúmenes.

vgdisplay
● vgchange: Activa o desactiva grupos de volúmenes.

vgchange -a y myvg
● vgextend: Añade un volumen físico a un grupo de volúmenes.
vgextend myvg /dev/sdc1
● vgreduce:Elimina un volumen físico de un grupo de volúmenes.

vgreduce myvg /dev/sdb1


● vgremove:Elimina un grupo de volúmenes.

vgremove myvg
COMANDOS LVM. VOLUMENES LÓGICOS
● lvcreate: Crea un volumen lógico.

lvcreate -n mylv -L 10G myvg


● lvdisplay: Muestra información sobre volúmenes lógicos.

lvdisplay
● lvextend: Aumenta el tamaño de un volumen lógico.

lvextend -L +5G /dev/myvg/mylv


resize2fs /dev/myvg/mylv
● Lvreduce: Reduce el tamaño de un volumen lógico.

lvreduce -L -5G /dev/myvg/mylv


resize2fs /dev/myvg/mylv
● lvremove: Elimina un volumen lógico.

lvremove /dev/myvg/mylv
Instantaneas
Las instantáneas permiten crear copias de los volúmenes lógicos en un estado particular en el tiempo.
Son útiles para realizar copias de seguridad y restauraciones rápidas.

● Crear una Instantánea:


lvcreate --size 1G --snapshot --name mylv_snapshot /dev/myvg/mylv

Una vez creada la instantánea se puede montar y acceder a todo su contenido.

● Eliminar una Instantánea:


lvremove /dev/myvg/mylv_snapshot
Archivos y Directorios Relacionados

● /dev/mapper/
Directorio donde se encuentran los enlaces a los volúmenes lógicos activos.

● /etc/lvm/[Link]
Archivo de configuración principal para LVM.
ZFS
202.4 > Basic ZFS Operations
ZFS
ZFS (Zettabyte File System) es un sistema de archivos avanzado y un gestor de volúmenes lógicos
desarrollado originalmente por Sun Microsystems. ZFS combina las funcionalidades de un sistema de
archivos y un gestor de volúmenes, lo que facilita la administración del almacenamiento y proporciona
características avanzadas como protección contra la corrupción de datos, alta capacidad, snapshots, y
administración simplificada.

Características Principales de ZFS


1. Integridad de Datos

ZFS utiliza sumas de verificación (checksums) para cada bloque de datos almacenado. Cada vez que se
lee un bloque, ZFS verifica su integridad comparando la suma de verificación calculada con la
almacenada.

Si se detecta una discrepancia, ZFS puede corregir automáticamente el error utilizando datos
redundantes si el sistema está configurado en un RAID adecuado (como RAID-Z o Mirrors).
Características Principales de ZFS
2. Capacidad de Almacenamiento

ZFS está diseñado para manejar una cantidad extremadamente grande de datos, hasta 256 billones de
exabytes. Esto es más que suficiente para cualquier aplicación actual y futura.

Soporta archivos de hasta 16 exabytes y volúmenes de almacenamiento de hasta 256 billones de


exabytes.

3. Administración de Propiedades

ZFS permite establecer propiedades en los sistemas de archivos, como cuotas (quota), límites de reserva
(reservation), y niveles de compresión.

Las propiedades se pueden heredar a través de jerarquías de sistemas de archivos, simplificando la


administración.
Características Principales de ZFS
4. Gestión de Volúmenes Lógicos

● Virtual Device (VDEV): Un VDEV es un bloque lógico de almacenamiento en ZFS. Los VDEVs
pueden ser discos individuales, espejos de discos, o configuraciones RAID-Z.
Los VDEVs se agrupan en pools de almacenamiento (Zpools), que son los contenedores de
almacenamiento básicos en ZFS.

● Zpool: Un Zpool se compone de uno o más VDEVs. Es el contenedor principal de almacenamiento


en ZFS. Proporciona una abstracción sobre los dispositivos físicos, permitiendo que los sistemas de
archivos y los volúmenes lógicos se creen, redimensionen y gestionen de manera flexible.

● ZFS File System: Dentro de un Zpool, se pueden crear múltiples sistemas de archivos ZFS. Cada
sistema de archivos puede tener sus propias configuraciones, como cuotas y propiedades de
compresión.
Características Principales de ZFS
5. Snapshots y Clones

Un snapshot es una copia de solo lectura de un sistema de archivos ZFS o un volumen en un momento
específico. Los snapshots utilizan almacenamiento eficiente, ya que solo almacenan los cambios
incrementales realizados desde el último snapshot.

Un clone es una copia de lectura/escritura de un snapshot. Los clones también son eficientes en el uso
del almacenamiento y pueden ser utilizados para pruebas o desarrollo sin afectar los datos originales.

6. Protección y Seguridad

ZFS integra controles de acceso basados en roles (RBAC) y permite establecer permisos detallados
para usuarios y grupos.

Soporta encriptación de datos nativa, lo que asegura que los datos sean almacenados de forma segura
y solo accesibles por usuarios autorizados
Características Principales de ZFS
7. RAID Nativo

● RAID-Z: ZFS soporta varias configuraciones RAID-Z: RAID-Z1 (paridad simple), RAID-Z2 (paridad
doble) y RAID-Z3 (paridad triple). RAID-Z es similar a RAID-5 y RAID-6, pero con mejoras para
evitar el problema del "escritura de hueco" (write hole).

● Mirrors: ZFS también soporta configuraciones de espejo (mirror), donde los datos se duplican en
dos o más discos para proporcionar redundancia y alta disponibilidad.

8. Compresión y Desduplicación

● Compresión: ZFS soporta compresión de datos en línea, lo que reduce el espacio de


almacenamiento requerido y puede mejorar el rendimiento al reducir la cantidad de datos
transferidos desde el disco. Los algoritmos de compresión soportados incluyen LZ4, GZIP y otros.

● Desduplicación: ZFS puede eliminar datos duplicados en el nivel de bloque, lo que ahorra espacio
de almacenamiento. La desduplicación puede ser muy eficiente, pero también puede consumir una
cantidad significativa de memoria y CPU.
COMANDOS
Crear un Zpool zpool create mypool /dev/sda /dev/sdb

Listar Zpools zpool list

Ver Detalles de un Zpool zpool status mypool

Destruir un Zpool zpool destroy mypool

Crear un Sistema de Archivos ZFS zfs create mypool/mydataset

Listar Sistemas de Archivos ZFS zfs list

Montar un Sistema de Archivos ZFS zfs mount mypool/mydataset

Destruir un Sistema de Archivos ZFS zfs destroy mypool/mydataset

Asignar una Cuota al Sistema de Archivos zfs set quota=10G mypool/mydataset

Comprobar la Cuota Asignada zfs get quota mypool/mydataset

Crear una Instantánea zfs snapshot mypool/mydataset@snap1

Listar Instantáneas zfs list -t snapshot

Destruir una Instantánea zfs destroy mypool/mydataset@snap1


Conocimientos útiles
Los subvolúmenes en ZFS son un tipo de datasets, y se gestionan dentro de un ZFS. Pueden tener sus
propias configuraciones de cuotas, compresión, y otras propiedades. Se manejan igual que un ZFS File
System

Las instantáneas de ZFS son de solo lectura y no se montan directamente. Sin embargo, se puede acceder
a ellas a través del sistema de archivos ZFS. Las instantáneas se encuentran en el directorio .zfs/snapshot
dentro del dataset.

Archivos y Utilidades Utilizados

● zpool: Comando principal para gestionar zpools.


● zfs: Comando principal para gestionar sistemas de archivos ZFS y datasets.
● /dev/mapper/: Directorio donde se encuentran los dispositivos de mapeo utilizados por ZFS.
Runtime
Networking
Configuration
203 > Advanced Networking Configuration
FUNDAMENTOS DE LOS PROTOCOLOS DE INTERNET [Link]

Algunos protocolos:

‣ IP (Internet Protocol): Su principal función es transmitir datos entre un origen y un


destino que tendrán un identificador asignado (dirección IP). Es no orientado a la
conexión.

‣ TCP (Transmission Control Protocol): Garantiza que los paquetes lleguen


correctamente sin errores y en orden. También dispone de control de flujo (se adapta
a la velocidad entre el transmisor y emisor) y control de la congestión.

‣ UDP (User Datagram Protocol): Permite el envío de paquetes sin establecer antes una
conexión. No proporciona ninguna de las garantías de funcionamiento de TCP. Al ser
más ligero, aumenta su velocidad.

‣ ICMP : Se utiliza para transmitir datos de estado y mensajes de error.


FUNDAMENTOS DE LOS PROTOCOLOS DE INTERNET [Link]

DIRECCIONES IP POR CLASES


IPv4 usa 32 bit, agrupados en 4 bytes en decimal separados por un punto

‣ Clase A: [Link] (esta no se usa) - [Link] (sus primeros 3 bit son 000)

✓ Red privada: [Link] - [Link] (Cantidad de ips: 16.777.216)

‣ Clase B: [Link] - [Link] (sus primeros 3 bit son 100)

✓ Red privada: [Link] - [Link] (Cantidad de ips: 1.048.576)

‣ Clase C: [Link] - [Link] (sus primeros 3 bit son 110)


✓ Red privada: [Link] - [Link] (Cantidad de ips: 65.536)
FUNDAMENTOS DE LOS PROTOCOLOS DE INTERNET [Link]

Características de IPv6
‣ Utiliza 128 bits: Admite 340 sextillones de IP's distintas. 670 mil billones por cada
milímetro cuadrado del planeta tierra. 😅
‣ Notación Hexadecimal: Está representado por ocho grupos de cuatro dígitos en
Hexadecimal (representan valores del 0 al 15, siendo el 10 la letra A y el 15 la F)
✓ Los grupos se separan por el signo de dos puntos (:)
✓ Si hay varios ceros seguidos se pueden quitar (pero solo una vez) :0000:0000: = ::

✓ Los ceros a la izquierda se pueden quitar :0001:000F: = :1:F:


‣ Autoconfigurable: Puede asignarse un valor basándose en la MAC
‣ Sin máscara de red: La parte de red siempre son los cuatro primeros grupos y el resto
es la parte de host
‣ Más seguro: Incorpora opciones sobre seguridad. IPsec está integrado y permite
autenticar y cifrar los paquetes
El comando IP [Link]

Comandos obsoletos Comandos equivalentes

arp ip n (ip neighbor)

ifconfig ip a (ip addr), ip link, ip -s (ip -stats)

netstat ss, ip route (for netstat -r), ip -s link (for netstat -i), ip maddr (for netstat -g)

route ip r (ip route)


El comando IP [Link]
iproute2 (ip)
Reemplaza los comandos ifconfig, route, y arp. Además aporta otras muchas funciones.
Sintaxis
ip [OPCIONES] OBJETO [COMANDO [ARGUMENTOS]]
Objetos
‣ link: Para configurar los objetos físicos o lógicos de la red
‣ address: Manejo de direcciones asociadas a los diferentes dispositivos.
‣ neighbour: Administrar los enlaces de vecindad (ARP).
‣ rule: Ver las políticas de enrutado y cambiarlas.
‣ route: Ver las tablas de enrutado y cambiar las reglas de las tablas.
‣ tunnel: Administrar los túneles IP
‣ maddr: Ver las direcciones multienlace, sus propiedades y cambiarlas.
‣ mroute: Establecer, cambiar o borrar el enrutado multienlace.
‣ monitor: Monitorizar continuamente el estado de los dispositivos, direcciones y rutas
El comando IP [Link]

Iproute2 (ip)
‣ Des/activar interfaz: ip link set enp0s3 up/down
‣ Des/activar arp: ip link set dev enp0s3 arp on/off
‣ Ver Direcciones IP: ip addr show / ip -c a
‣ Añadir dirección IP: ip addr add [Link]/24 dev enp0s3
‣ Borrar dirección IP: ip addr del [Link]/24 dev enp0s3
‣ Ver tabla enrutamiento: ip route show
‣ Añadir ruta: ip route add [Link]/24 via [Link] dev enp0s3
‣ Borrar ruta: ip route del [Link]/24
‣ Puerta de enlace: ip route add default via [Link]
Redes inalámbricas

Una interfaz de red inalámbrica es un dispositivo que permite a un equipo conectarse a una red
sin cables físicos, utilizando ondas de radio para transmitir y recibir datos.
Modos de Operación de las Interfaces Inalámbricas
● Managed Mode: La interfaz actúa como un cliente que se conecta a un punto de acceso
(Access Point, AP).
● Monitor Mode: Permite capturar todos los paquetes que se transmiten a través de la red,
útil para análisis y seguridad.
● Ad-Hoc Mode: Permite que la interfaz se conecte directamente con otras interfaces en
un modo de red sin infraestructura.
● AP Mode: La interfaz actúa como un punto de acceso.
Iw - Configuración WiFi
iw es la herramienta de línea de comandos para configurar y obtener información de las interfaces inalámbricas. Es una
evolución de iwconfig, ofreciendo más funcionalidades y siendo compatible con las tecnologías más recientes.
Comandos Básicos
● Mostrar interfaces inalámbricas: iw dev
● Muestra las redes inalámbricas disponibles: iw dev wlan0 scan
● Des/Conectar a un punto de acceso: iw dev wlan0 dis/connect SSID
● Cambiar el modo de operación: iw dev wlan0 set type managed
wpa_supplicant es una herramienta que gestiona la autenticación en redes inalámbricas que utilizan WPA/WPA2 (Wi-Fi
Protected Access). Es crucial para conectarse a redes seguras.
Configuración Básica
● Crear un archivo de configuración. Esto genera un archivo de configuración cifrado con la contraseña de la red.
wpa_passphrase "SSID" "password" > /etc/wpa_supplicant/wpa_supplicant.conf
● Iniciar wpa_supplicant.Conecta la interfaz wlan0 utilizando el archivo de configuración proporcionado.
wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf
● Obtener una dirección IP
dhclient wlan0
Iwd - Configuración WiFi
iwd (iNet wireless daemon) es un demonio que gestiona las conexiones inalámbricas, diseñado para ser una alternativa
ligera a wpa_supplicant. iwctl es la herramienta de línea de comandos para interactuar con iwd.
Comandos Básicos con iwctl
● Listar dispositivos inalámbricos:iwctl device list
● Listar redes disponibles:iwctl station wlan0 get-networks
● Conectar a una red:iwctl station wlan0 connect SSID
● Configurar y verificar la conexión:iwctl station wlan0 show
VLAN, Bridges
& Bonds
203.1 > Runtime Networking Configuration
VLAN

Una VLAN (Red de Área Local Virtual) es una tecnología que permite crear redes lógicas
separadas dentro de una misma red física. Esto se logra etiquetando el tráfico de red con un
identificador de VLAN (VLAN ID). Las VLANs son útiles para segmentar el tráfico, mejorar la
seguridad y optimizar el rendimiento de la red.

En una VLAN, cada paquete de red lleva una etiqueta que indica a qué VLAN pertenece. Los
switches y routers utilizan esta etiqueta para dirigir el tráfico sólo a los dispositivos que
pertenecen a esa VLAN, aislando el tráfico de otras VLANs en la misma red física.
Bridges

Un bridge (puente) es una interfaz virtual que permite unir múltiples interfaces de red,
haciendo que funcionen como si fueran parte de una misma red física. Los bridges son
comúnmente utilizados en entornos de virtualización para permitir que las máquinas virtuales
se comuniquen entre sí y con la red física.
Un bridge actúa como un switch virtual que puede conectar varias interfaces de red (físicas y
virtuales). Los paquetes recibidos en una interfaz del bridge pueden ser reenviados a cualquier
otra interfaz dentro del mismo bridge, dependiendo de la dirección MAC de destino.

¿Bridge o router?
Un bridge opera en el nivel 2 (Capa de Enlace de Datos) del modelo OSI. Esto significa que un
bridge trabaja directamente con direcciones MAC para decidir a dónde enviar el tráfico.
Bonds

Un bond (también conocido como NIC teaming o agregación de enlaces) es una técnica que
combina múltiples interfaces de red físicas en una sola interfaz lógica. Esto se utiliza para
aumentar el ancho de banda disponible o para proporcionar redundancia en caso de fallos de
una de las interfaces físicas.
Los bonds pueden operar en varios modos, dependiendo de cómo quieras que se distribuya el
tráfico: backup, Round Robin, etc…
NetworkManager
203.2 > Persistent Network Configuration
Arquitectura de NetworkManager
NetworkManager es una herramienta de sistema para administrar las conexiones de red y los
dispositivos en sistemas operativos Linux. Está diseñada para simplificar la configuración de las
redes y proporcionar una gestión dinámica y automatizada de las interfaces de red, tanto
cableadas como inalámbricas
La arquitectura de NetworkManager está compuesta por varios componentes que trabajan en
conjunto para gestionar eficazmente las conexiones de red.

1. Demonio NetworkManager (NetworkManager)


Es el núcleo de NetworkManager. Se ejecuta en segundo plano como un servicio del sistema y
es responsable de:
● Detectar y gestionar dispositivos de red.
● Mantener el estado de las conexiones.
● Aplicar políticas de red y prioridades.
● Interactuar con otros servicios y aplicaciones a través de D-Bus.
Arquitectura de NetworkManager
2. Interfaz D-Bus
D-Bus es un sistema de mensajería que permite la comunicación entre procesos.
NetworkManager utiliza D-Bus para:
● Permitir que aplicaciones y servicios externos interactúen con él.
● Notificar cambios en el estado de la red.
● Recibir instrucciones de las interfaces de usuario y scripts.

3. Herramientas de Línea de Comandos


nmcli (NetworkManager Command Line Interface)
● Proporciona una interfaz de línea de comandos para interactuar con NetworkManager.
● Permite a los usuarios y scripts gestionar conexiones y dispositivos de red.
● Soporta la creación, modificación y eliminación de conexiones.
nmtui (NetworkManager Text User Interface)
Es una interfaz basada en texto que facilita la configuración de conexiones sin necesidad de
recordar comandos complejos. Útil en entornos sin interfaz gráfica.
Arquitectura de NetworkManager
4. Interfaces Gráficas
● Nm-applet: Se integra en entornos de escritorio como GNOME o Xfce.
Permite a los usuarios gestionar conexiones de forma interactiva desde el área de
notificaciones.
● Extensiones: Hay extensiones disponibles para diferentes entornos de escritorio, como
KDE (plasma-nm). Proporcionan integración y funcionalidades adicionales adaptadas al
entorno.
5. Backends y Plugins
NetworkManager utiliza backends y plugins para soportar diferentes tipos de conexiones:
● Wi-Fi: Utiliza wpa_supplicant para gestionar autenticaciones y conexiones inalámbricas.
● VPN: Soporta múltiples tipos de VPN a través de plugins como
NetworkManager-openvpn, NetworkManager-vpnc, etc.
● Modems 3G/4G: Gestiona conexiones móviles mediante ModemManager.
nmcli
Ver Información:
● Listar conexiones activas: nmcli connection show --active
● Listar todas las conexiones: nmcli connection show
● Listar dispositivos de red: nmcli device status smartctl
Gestionar Conexiones
● Crear una nueva conexión Ethernet con IP estática
nmcli connection add type ethernet ifname eth0 con-name "EthernetEstatica"
[Link] manual [Link] "[Link]/24" [Link] "[Link]"
[Link] "[Link]"

● Conectar a una red Wi-Fi


nmcli device wifi connect "SSID" password "Contraseña"

● Modificar una conexión existente


nmcli connection modify "NombreConexion" [Link] auto

● Activar/Desactivar una conexión:


nmcli connection up "NombreConexion"
nmcli connection down "NombreConexion"
Archivos
Ubicados en /etc/NetworkManager/system-connections/
Se pueden editar directamente, pero es recomendable usar nmcli para evitar errores.
Ejemplo de archivo .ini:
[connection]
id=MiConexiónCableada
uuid=e9226f0f-8a16-0c9e-82f0-9191c2c0a8fb
type=ethernet
autoconnect=true

[ipv4]
method=manual
addresses=[Link]/24
gateway=[Link]
dns=[Link];[Link];

[ipv6]
method=auto
Archivos
Archivo principal de configuración:
/etc/NetworkManager/[Link]

Configura opciones globales, como plugins y dispositivos no gestionados.


Ejemplo:
[main]
plugins=keyfile

[logging]
level=INFO

[keyfile]
unmanaged-devices=interface-name:eth1
systemd-networkd
systemd-resolved
203.2 > Persistent Network Configuratio
Systemd-networkd
Está diseñado para administrar configuraciones de red, ofreciendo una alternativa ligera y
eficiente a otras herramientas como NetworkManager, especialmente en entornos de servidor o
sistemas embebidos.
Componentes principales
● [Link]: El servicio de systemd que se ejecuta en segundo plano y
gestiona la configuración de las interfaces de red.
● [Link]: Opcional, asegura que las interfaces de red
estén completamente configuradas antes de que se inicien otros servicios que dependan
de la red.
● networkctl: Una herramienta de línea de comandos que se usa para interactuar con
systemd-networkd, permitiendo ver el estado de las interfaces, reiniciar configuraciones,
y más.
● Archivos de configuración: Los archivos de configuración de systemd-networkd se
encuentran principalmente en el directorio /etc/systemd/network/ y utilizan un formato
de archivo .network o .netdev.
Unidad de servicio systemd-networkd
Esta unidad de servicio es el corazón de systemd-networkd.
Lee los archivos de configuración en /etc/systemd/network/ y aplica las configuraciones a las
interfaces de red, como direcciones IP, rutas y DNS.
Puedes gestionar este servicio con los comandos típicos de systemd:
systemctl start systemd-networkd
systemctl enable systemd-networkd
systemctl restart systemd-networkd

La configuración de systemd-networkd se realiza a través de archivos de configuración


específicos que definen cómo deben gestionarse las interfaces de red. Estos archivos se
encuentran típicamente en /etc/systemd/network/ y están compuestos de secciones que
contienen claves y valores.
Configuración de systemd-networkd
Ejemplo de archivo .network para Ethernet estático
Supongamos que queremos configurar una interfaz Ethernet con una dirección IP estática.
El archivo de configuración básico sería el siguiente:

[Match]
Name=eth0

[Network]
Address=[Link]/24
Gateway=[Link]
DNS=[Link]

[Match]: Define a qué interfaz se aplica la configuración. En este caso, la configuración se


aplicará a la interfaz eth0.
[Network]: Especifica las configuraciones de red, como la dirección IP, la puerta de enlace
(gateway) y el servidor DNS. Si deseas configurar una interfaz para obtener su dirección IP
mediante DHCP, el archivo sería más simple:

[Network]
DHCP=yes
Configuración de systemd-networkd
Ejemplo de archivo .network para IPv6 con SLAAC (Stateless Address Autoconfiguration)

Para configurar una interfaz con IPv6 y SLAAC, el archivo se vería algo como esto:
[Match]
Name=eth0

[Network]
IPv6AcceptRA=yes

Esto habilita la recepción de anuncios de router (RA), lo que permite la autoconfiguración de


direcciones IPv6 sin necesidad de un servidor DHCPv6.
networkctl
networkctl es una herramienta utilizada para gestionar las interfaces de red cuando se usa
systemd-networkd como backend. Proporciona una forma de ver el estado de las interfaces, así
como de reiniciarlas y detenerlas.

Comandos útiles
● Ver el estado: networkctl status
● Ver el estado de las conexiones: networkctl list
● Recarga los ficheros .network: networkctl reload
● Des/Activa los interfaces: networkctl down/up
systemd-resolved
systemd-resolved es otro servicio en el ecosistema systemd que se encarga de la resolución
de nombres DNS.
Características:
● Soporte para DNS sobre TLS (DoT): Esto permite realizar consultas DNS de manera
segura y cifrada.
● Resolución de nombres multi-capa: systemd-resolved permite resolver nombres de host
desde múltiples fuentes (por ejemplo, DNS local, caché de DNS, etc.).
● Gestión de caché DNS: Almacena consultas DNS para acelerar las resoluciones
posteriores.
● systemd-resolved reemplaza el antiguo uso de /etc/[Link], gestionando
dinámicamente las configuraciones de DNS.
Configuración systemd-resolved
Puedes gestionar el servicio con los comandos de systemd:
systemctl enable systemd-resolved
systemctl start systemd-resolved

El archivo de configuración principal de systemd-resolved es /etc/systemd/[Link].


Un ejemplo básico de configuración sería:
[Resolve]
DNS=[Link] [Link]
FallbackDNS=[Link] [Link]
DNSOverTLS=yes

DNS: Especifica los servidores DNS primarios.


FallbackDNS: Servidores DNS de respaldo en caso de que los primarios no respondan.
DNSOverTLS: Habilita la resolución de DNS cifrada mediante TLS.
resolvectl
resolvectl es la herramienta de línea de comandos para interactuar con systemd-resolved.
Permite verificar el estado del resolver y realizar consultas DNS manualmente.

Comandos útiles
● Ver el estado del resolvedor: resolvectl status
● Realizar una consulta DNS manual: resolvectl query [Link]
Ventajas de systemd-networkd y systemd-resolved

● Ligereza: Comparado con NetworkManager, systemd-networkd es más ligero y consume


menos recursos, lo que lo hace ideal para servidores.
● Integración con systemd: Dado que ambos servicios son parte de systemd, la integración
es profunda y permite un control centralizado mediante comandos estándar como
systemctl.
● Configuración declarativa: La configuración a través de archivos es simple, basada en
archivos de texto en formato INI, lo que facilita la automatización y administración.
Netplan
203.2 > Persistent Network Configuratio
Netplan
Netplan utiliza archivos YAML como fuente de configuración de red y luego traduce esas
configuraciones a los backends subyacentes. Esto significa que no necesitas interactuar
directamente con otras herramientas de configuración, ya que Netplan genera
automáticamente los archivos necesarios para los servicios de red.
Componentes
● Archivos de configuración YAML: Se encuentran en el directorio /etc/netplan/ y tienen la
extensión .yaml. Estos archivos definen las interfaces de red, las direcciones IP, las rutas,
los servidores DNS, y más.
● Backend de red. Netplan admite dos backend: systemd-networkd y NetworkManager
● Aplicación de la configuración: Una vez que se ha definido un archivo YAML de
configuración de red, Netplan genera automáticamente los archivos de configuración
adecuados para el backend de red seleccionado y los aplica.
● Comandos de Netplan: Los comandos básicos de Netplan incluyen netplan apply, que
aplica las configuraciones, y netplan try, que permite probar una configuración de red
antes de aplicarla de forma permanente.
Configuración de Netplan
Configuración de una dirección IP estática con systemd-networkd

network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: no
addresses:
- [Link]/24
gateway4: [Link]
nameservers:
addresses:
- [Link]
- [Link]
Configuración de Netplan
Configuración de una dirección IP dinámica con NetworkManager

network:
version: 2
renderer: NetworkManager
ethernets:
eth0:
dhcp4: yes

Configuración de IPv6 automática (SLAAC):


network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp6: no
ipv6-privacy: true
accept-ra: true
Solución a
problemas de red
203.2 > Persistent Network Configuration
Problemas de red
No hay conexión a la red
Posibles causas:
● La interfaz de red no se detecta o está apagada:
○ ls /sys/class/net/

○ ip link show <interface>

● El cable de red está desconectado o el adaptador Wi-Fi no está funcionando.


● Configuración IP incorrecta : ip a o ifconfig
○ ¿ DHCP ? (/var/lib/dhcp/[Link])
○ Dirección IP
○ Máscara red
○ Puerta de enlace: ip route
○ DNS: ping, dig
Problemas de red
No resuelve nombres de dominio
Posibles causas:
● Problemas con la configuración de DNS en /etc/[Link].
● El servidor DNS está caído o inaccesible.

Es muy común que los DNS estén configurados en /etc/[Link], pero este fichero se puede
gestionar de forma estática o dinámica mediante el paquete resolvconf

También debemos conocer si tenemos activo systemd-resolved

Podemos usar comandos como ping, nslookup, traceroute o mtr


Gestores de red
Es fundamental conocer qué gestor de red está configurando nuestra conexión.
Es útil saber qué distribución y versión de Linux estás utilizando, ya que algunas distribuciones
tienen frameworks predeterminados:
● Debian/Ubuntu: Tradicionalmente usan ifupdown. Pero cada vez más NetworkManager
● Ubuntu (18.04 en adelante): Usa netplan como framework predeterminado.
● Red Hat: Usan NetworkManager por defecto en las versiones modernas.
● SUSE / openSUSE: Utilizan Wicked.

Puedes verificar tu distribución con el siguiente comando:


cat /etc/os-release
Gestores de red
Podemos buscar ficheros o directorios clave que sabemos que son utilizados por los diferentes
gestores de red:
● ifupdown ● netplan
○ /etc/network/interfaces ○ /etc/netplan/*.yaml
○ /etc/network/interfaces.d/
● wicked
● systemd-networkd ○ /etc/sysconfig/network/
○ /etc/systemd/network/ ○ /etc/wicked/
● NetworkManager
○ /etc/NetworkManager/[Link]
○ /etc/NetworkManager/system-connections/

También podemos utilizar comandos para identificar los procesos:

● Systemctl status: NetworkManager | systemd-networkd | networking | wickedd

● ps aux | grep network


Herramientas para servidores
● ss: Inspeccionando conexiones y sockets
○ ss -tln
● lsof: Listado de archivos abiertos, incluyendo conexiones de red
○ lsof -i
● mtr: Combinación de ping y traceroute. Útil para diagnosticar o hacer informes
○ mtr [Link]
● nc: Netcat, herramienta versátil para interactuar con la red.
○ Probar si un puerto está abierto en un host: nc -zv [Link] 22
RESOLUCIÓN DE PROBLEMAS BÁSICOS DE RED [Link]

tracepath / tracepath6

Muestra el camino recorrido hasta llegar al destino indicado

traceroute / traceroute6

Parecido a trachepath pero con más opciones. Puede requerir permisos de root

ping / ping6

Envía un paquete ICMP para comprobar que el destino responde. En Linux no termina
hasta que pulsemos CONTROL+C. A no ser que se use la opción -c que indica el
número de paquetes a enviar.
RESOLUCIÓN DE PROBLEMAS BÁSICOS DE RED [Link]

netcat (nc)
Abre un puerto en un host (que hará de servidor) y recoge todo lo que le envía un
cliente. En general reenvía la salida estándar al servidor.
Algunas opciones:
‣ -l: abre el puerto para escucha (Listen): Acepta una única conexión de un cliente y se cierra.
‣ -p: Indica el puerto
‣ -k: El puerto permanece abierto después de haber recibido una conexión. Se usa con el
parámetro -l y permite infinitas conexiones.
‣ -u: El puerto abierto se abre como UDP, en vez de TCP que es la opción por defecto.
‣ -e: indica la ruta de un fichero que se ejecutará al establecer la conexión
‣ -v: Muestra información de la conexión.
‣ -z: Se usa para escanear puertos: nc -z -v destino 10-500
RESOLUCIÓN DE PROBLEMAS BÁSICOS DE RED [Link]
Socket Statistics (ss)
Obtiene información sobre los sockets (internos y de red). Sin parámetros lista todas las
conexiones actuales. Sintaxis

ss [options] [FILTER]
Opciones
‣ -t Sólo conexiones TCP, -u las UDP
‣ -l Socket a la escucha
‣ -p Muestra el nombre y PID del proceso asociado a cada conexión
‣ -s Estadísticas resumidas
‣ -n No resolver los nombres, mostrar las IP's
RESOLUCIÓN DE PROBLEMAS BÁSICOS DE RED [Link]
Filtros
FILTRO := [state ESTADO-TCP] [exclude ESTADO-TCP] [EXPRESIÓN]

Con state los sockets deben estar en: ESTABLISHED, LISTENING, CLOSED, CONNECTED,
TIME-WAIT, etc..

Con exclude se excluirán los que estén en el estado indicado.


EXPRESIÓN se puede construir con:
‣ Los operadores and (por defecto), or y not.
‣ (origen y/o destino) {src|dst} [IP[/prefijo]][:puerto]
‣ (puerto origen/destino) {dport|sport} {eq|neq|gt|ge|lt|le} [IP]:puerto
Ejemplos:
ss state established '(sport = :http or sport = :https)' src [Link]/24
ss sport neq :21 and sport neq :https or not dst [Link]/24
Make and Install
Programs from
Source
204 > System Maintenance
Instalar software desde código fuente

./configure

● Arquitectura
Makefile
Código Fuente ● Compilador
● Librerías make

make install
Configure
Los scripts configure se usan para verificar el entorno de compilación y ajustar el proceso en función del sistema en el
que se ejecuta el programa.
Crea un archivo Makefile adaptado al sistema y a las opciones especificadas por el usuario
El uso más básico de un script configure es simplemente ejecutarlo sin parámetros adicionales:
./configure
Algunos de los parámetros más utilizados permiten personalizar dónde se instalarán los archivos, habilitar o deshabilitar
características específicas del programa, o definir comportamientos especiales del proceso de compilación.

● --prefix: Directorio de instalación

● --enable- y --disable-: Habilitar o deshabilitar características opcionales

● --with- y --without-: Incluir o excluir bibliotecas o componentes externos

Para ver todas las opciones que acepta un script configure: ./configure --help
Make
make es una herramienta de automatización que facilita la compilación de programas. Lo hace utilizando instrucciones
definidas en un archivo llamado Makefile. Revisa qué archivos han cambiado y solo recompila los necesarios
El Makefile define cómo deben compilarse los diferentes archivos de código fuente y en qué orden. Un Makefile típico
está compuesto de reglas, que tienen la siguiente estructura:
objetivo: dependencias
comandos

● Objetivo: Es el archivo que queremos generar, como el archivo ejecutable o un archivo intermedio.
● Dependencias: Son los archivos o recursos que el objetivo necesita para ser generado. Si alguno de estos
cambia, el objetivo debe ser reconstruido.
● Comandos: Son los comandos de shell que se ejecutan para construir el objetivo. Cada línea de comandos debe
estar precedida por un tabulador.
Ejemplo:
archivo1.o: archivo1.c
gcc -c archivo1.c
Make install
make install es el paso final en el proceso de compilación e instalación de software a partir del código fuente. Se
encarga de copiar los archivos compilados a los directorios apropiados del sistema, de manera que puedan ser usados
por todos los usuarios.

Después de haber ejecutado ./configure y make, simplemente puedes ejecutar el siguiente comando para instalar el
software:
make install
Otros datos
Directorios para almacenar ficheros de código fuente:
● /usr/src/
○ Tradicionalmente, aquí se encuentran las fuentes del kernel de Linux y otros paquetes que requieren ser
compilados
● /usr/local/src/
○ Se utiliza cuando un administrador de sistemas descarga y compila programas manualmente, en lugar de
utilizar un gestor de paquetes
Patch es una utilidad que se utiliza para aplicar cambios a los archivos de código fuente de un programa. Los archivos
de parches (normalmente con la extensión .patch o .diff) contienen las diferencias entre dos versiones de un archivo, y
el comando patch aplica esos cambios al archivo original.
Sintaxis básica:
patch archivo_original < archivo_de_parche.patch

Para crear el archivo .patch, se usa la herramienta diff para generar las diferencias. El comando sería algo así:
diff -u programa.c programa_nuevo.c > cambio_programa.patch
Backup
Operations
204 > System Maintenance
Qué copiar

Tres preguntas clave:


● ¿Qué copiar?
● ¿Cuándo copiar?
● ¿Cómo copiar?

Directorios que se pueden incluir en los respaldos:


● /etc: Contiene archivos de configuración críticos.
● /var: Puede contener logs, correos, bases de datos, y otros datos que cambian frecuentemente.
● /home: Contiene los archivos de usuario.
● /srv: Contiene datos de los servicios del sistema, como servidores web.
● /root: Carpeta del administrador del sistema.

/proc, /sys, /dev: Son sistemas de archivos virtuales o dinámicos que no necesitan respaldo.
Consistencia

La consistencia de los respaldos se refiere a que los archivos y los datos dentro del respaldo
reflejen un estado "válido" del sistema o de la aplicación en un momento determinado, sin estar
incompletos o corrompidos por cambios en el sistema mientras se realiza el respaldo.

Consistencia a nivel de archivo (File-level consistency)


Los archivos son respaldados tal como están en el momento en que se accede a ellos. Esto
funciona bien para archivos estáticos que no están en uso o modificándose durante el
respaldo, como configuraciones del sistema o archivos de texto. Sin embargo, no garantiza que
aplicaciones en ejecución o bases de datos estén en un estado coherente cuando se restauren.
Consistencia
Consistencia lógica (Application-level consistency)
En este nivel, se asegura que la aplicación o base de datos esté en un estado coherente cuando
se realiza el respaldo. Esto implica que se han tomado medidas para garantizar que los datos no
cambien durante el proceso de respaldo, o que la aplicación sea consciente del respaldo y se
prepare para ello. Algunas bases de datos y aplicaciones permiten crear "puntos de
consistencia" o "checkpoints", en los cuales se detienen todas las transacciones activas antes
de realizar el respaldo.
Consistencia a nivel de sistema (System-level consistency)
La consistencia a nivel de sistema garantiza que todo el sistema esté en un estado coherente
durante el respaldo. Esto es útil cuando se están respaldando múltiples aplicaciones y servicios
que interactúan entre sí. Un ejemplo sería un servidor que aloja una base de datos y un servidor
web, donde ambos deben estar sincronizados y consistentes.
Consistencia. Métodos
Congelación de aplicaciones o servicios (Quiescing)
Algunas aplicaciones ofrecen la capacidad de "congelar" las operaciones mientras se realiza un
respaldo.
Uso de instantáneas (Snapshots)
Las instantáneas de volúmenes o sistemas de archivos permiten crear un "punto de
restauración" del estado del sistema en un instante específico.
Barreras de escritura (Write Barriers)
Las barreras de escritura son mecanismos que garantizan que todas las escrituras pendientes
en el sistema de archivos o la base de datos se completen antes de tomar un respaldo.
Respaldos a nivel de aplicación
Algunas aplicaciones críticas, como bases de datos y servidores de correo, tienen sus propios
mecanismos internos para realizar respaldos consistentes sin interrumpir el servicio. Por
ejemplo: mysqldump
Instantaneas
Una instantánea no es una copia completa de los datos, sino un registro de las diferencias o
cambios entre el momento en que se toma la instantánea y el estado actual del sistema de
archivos. Este método es muy eficiente, ya que no es necesario copiar todos los datos, sino
sólo los bloques que cambian después de la creación de la instantánea.
Cuando creas una instantánea:
● El sistema marca los bloques que existen en ese momento como "inmutables".
● A medida que se realizan cambios en los datos, solo los bloques modificados se copian y
almacenan en otra ubicación, mientras que los bloques que no cambian permanecen sin
tocarse.
Sistemas de archivos y tecnologías que soportan instantáneas: LVM, ZFS, Btrfs
Cybersecurity Infographics

Pérdida de datos:
corrompidos, Fallos del hardware
eliminados..

Ataques de malware Desastres naturales,


y ransomware incendios, robos ...
the farthest planet
Medios de respaldo
Discos duros (HDDs) y unidades de estado sólido (SSDs)
Beneficios:
● Velocidad de acceso: Los discos duros y SSDs proporcionan un acceso rápido y aleatorio a los datos, lo
que facilita restauraciones rápidas.
● Disponibilidad inmediata: Puedes acceder a los datos de forma instantánea, sin necesidad de cargar
cintas o esperar largos tiempos de búsqueda.
● Compatibilidad: No requieren hardware especializado, y casi todos los sistemas operativos tienen
soporte nativo para discos duros y SSDs.

Desventajas:
● Costo por GB (especialmente en SSDs): Aunque los HDDs tienen un costo más bajo que los SSDs el
almacenamiento en discos puede ser costoso cuando se maneja una gran cantidad de datos.
● Fiabilidad limitada: Los discos duros son más propensos a fallos mecánicos con el tiempo, y aunque los
SSDs no tienen partes móviles, también pueden fallar con el uso prolongado debido al desgaste de las
celdas de memoria.
● Durabilidad a largo plazo: Los discos no son tan duraderos para almacenamiento a largo plazo en
comparación con las cintas, y necesitan mantenerse en condiciones adecuadas (sin golpes, vibraciones,
etc.).
Servidores de almacenamiento
Medios de respaldo
Cintas (Tapes)
Beneficios:
● Costo por GB: Las cintas ofrecen un costo por gigabyte muy bajo, lo que las hace atractivas para
almacenar grandes cantidades de datos.
● Durabilidad: Las cintas pueden durar muchos años (10-30 años en condiciones adecuadas), lo
que las convierte en una opción adecuada para el archivo de largo plazo.
● Escalabilidad: Las bibliotecas de cintas permiten almacenar grandes volúmenes de datos en un
formato compacto.

Desventajas:
● Lentitud: Las cintas tienen tiempos de acceso secuenciales, lo que significa que encontrar un
archivo específico puede ser lento. Comparado con los discos duros o la nube, la restauración de
datos es mucho más lenta.
● Mantenimiento y gestión: Requieren hardware especializado (unidades de cinta y sistemas de
gestión de cintas), lo que puede aumentar los costos operativos y la complejidad.
● Disponibilidad: Aunque son duraderas, el acceso a los datos almacenados en cintas puede no
ser inmediato, especialmente si las cintas están almacenadas fuera del sitio.
Cintas

[Link]
Cintas
Servidores de almacenamiento
HDD

Precios a
Octubre del
2024
Medios de respaldo
Almacenamiento en la nube (Cloud Storage)
Beneficios
● Escalabilidad: Puedes aumentar o reducir la capacidad de almacenamiento sin necesidad de
adquirir nuevo hardware.
● Acceso remoto: Los datos pueden ser accesibles desde cualquier lugar con Internet, lo que es
ideal para respaldos distribuidos.
● Redundancia: Los proveedores suelen ofrecer almacenamiento distribuido y replicado. Los
datos están protegidos en múltiples ubicaciones, mejorando la fiabilidad y disponibilidad.
● Costos iniciales bajos: No necesitas invertir en hardware físico, lo que reduce los costos
iniciales de infraestructura.
Desventajas
● Costo a largo plazo: Los costos pueden escalar rápidamente. Además, hay costos por
transferencias de datos y operaciones de restauración.
● Dependencia de Internet: El acceso a tus respaldos depende de la conectividad a Internet.
● Seguridad: Existe un riesgo asociado con almacenar datos críticos en servidores de terceros. La
encriptación de datos es una práctica estándar para mitigar este riesgo.
● Velocidad: La transferencia de datos desde internet es menor que localmente.
Medios de respaldo
Característica Cintas Discos (HDD/SSD) Almacenamiento en la nube

Costo por GB Bajo Medio (SSD más alto) Variable (depende del uso)

Velocidad de acceso Lento (secuencial) Rápido (aleatorio) Depende de la velocidad de


internet

Durabilidad a largo plazo Alta (hasta 30 años) Media (riesgo de fallos Alta (redundancia en la nube)
mecánicos)

Facilidad de restauración Baja (dependiente de hardware) Alta (acceso inmediato) Alta (pero dependiente de
internet)

Escalabilidad Limitada Limitada Muy alta

Portabilidad Buena Media Muy alta

Requisitos de mantenimiento Moderado Bajo Bajo


(hardware especializado)
Backups: Linux
standard tools
204 > System Maintenance
Herramientas para copias de seguridad
En Linux, existen varias herramientas estándar para realizar copias de seguridad parciales y
manuales.

Las más comunes son:


● dd: Para copias a nivel de bloque.
● rsync: Para sincronizar directorios o archivos.
● tar: Para empaquetar y comprimir archivos.
El comando dd
dd es una herramienta que trabaja a nivel de bloque. Esto significa que copia sectores de disco
completos, lo que es útil para respaldos de discos o particiones.
Sintaxis básica de dd:
dd if=origen of=destino [opciones]

Ejemplo 1: Respaldo completo de una partición:


dd if=/dev/sda1 of=/backup/sda1_backup.img bs=4M

● if: Especifica el archivo de entrada (en este caso, la partición /dev/sda1).


● of: Especifica el archivo de salida (donde se guardará la imagen del respaldo).
● bs=4M: Define el tamaño de bloque, lo que puede acelerar el proceso (ajustar según el sistema).

Restaurar un respaldo:
dd if=/backup/sda1_backup.img of=/dev/sda1 bs=4M
El comando rsync
rsync es una herramienta muy poderosa para sincronizar archivos y directorios de manera
eficiente. Es especialmente útil para realizar copias de seguridad incrementales, ya que solo
copia los archivos que han cambiado o son nuevos.
Sintaxis básica de rsync:
rsync [opciones] origen destino

Ejemplo 1: Copia de seguridad parcial (sincronización de un directorio):


rsync -av /home/ /backup/home/

● a: Modo archivo, preserva permisos, enlaces, propietarios, etc.


● v: Modo verbose, para ver detalles del proceso.

Este comando sincroniza el contenido de /home con /backup/home. Si ya existe un archivo en


el destino que no ha cambiado, rsync no lo copiará nuevamente, lo que ahorra tiempo y
espacio.
El comando rsync
Ejemplo 2: Copia de seguridad a través de SSH (remoto):
rsync -av -e ssh /home/ usuario@servidor_remoto:/backup/home/

Este comando realiza una copia de seguridad de /home a un servidor remoto usando SSH. Esto
es útil cuando necesitas realizar respaldos a otro servidor de forma segura.

Ejemplo 3: Respaldo incremental con rsync:


rsync -av --delete /home/ /backup/home/

La opción --delete asegura que los archivos eliminados en /home también se eliminen en el
directorio de respaldo /backup/home/, manteniendo la sincronización actualizada
EL COMANDO TAR
• El comando tar sirve para compactar varios ficheros y directorios
en un sólo archivo.
• Mediante opciones podemos comprimir el fichero resultando
utilizando distintos métodos de compresión
• Sintaxis: tar [opciones] [Link] datos

• Uso básico. Compactar: tar -cf [Link] /etc/ /var/


Extraer: tar -xf [Link]

• Comprimir con gzip: tar -czf [Link] /etc/ /var/


Extraer: tar -xzf [Link]
EL COMANDO TAR
• Opciones más importantes:
- c : compacta
- x : expande (extrae)
- f : escribe o lee de un fichero
- z : comprime o descomprime con gzip
- j : comprime o descomprime con bzip2
- P : utiliza rutas absolutas (por defecto serán relativas)
- p : preserva los permisos de los ficheros originales
- r : añade elementos a un fichero compactado
- t : muestra la información que contiene un fichero tar
EL COMANDO TAR
• Opciones para copias de seguridad
‣ Totales: se copian todos los datos
‣ Diferenciales: se copian sólo los que se hayan modificado
desde una fecha indicada. Se utiliza la opción -N seguido de la
fecha
‣ Incrementales: se copian sólo los ficheros que se han
modificado desde la última copia. Se utiliza la opción -g
seguido de la ruta del fichero de registro.
Uso de cintas
Los dispositivos /dev/st* y /dev/nst* son archivos de dispositivos especiales que representan
unidades de cinta magnética (tape drives). Estos archivos permiten la interacción del sistema
operativo con las unidades de cinta, que suelen usarse para copias de seguridad (backups),
archivado a largo plazo y almacenamiento de grandes volúmenes de datos.

● /dev/st* : Representa dispositivos de cinta con rebobinado automático. Después de


que un trabajo de escritura o lectura se completa, la cinta se rebobina automáticamente
al inicio.
● /dev/nst* : Representa dispositivos de cinta sin rebobinado automático. Cuando un
trabajo de escritura o lectura se completa, la cinta no se rebobina automáticamente, lo
que puede ser útil si deseas seguir escribiendo o leyendo desde la posición actual de la
cinta.
Ejemplo: tar -czf /dev/st0 /home/user/data/
Verificar Backups
204 > System Maintenance
Verificar Backups
¿Por qué es importante verificar la integridad de los respaldos?
● Detección de corrupción de datos: Durante el proceso de creación, transferencia o
almacenamiento de un respaldo, los archivos pueden corromperse debido a problemas en
los discos duros, errores de red, o fallos de software. La verificación ayuda a detectar
estos problemas antes de que sea demasiado tarde.
● Confirmar restauraciones exitosas: No basta con realizar respaldos; es fundamental
asegurarse de que sean restaurables y completos. La verificación asegura que los datos
respaldados son funcionales y completos.
● Evitar fallos de restauración: Sin verificación, podrías descubrir que un archivo de
respaldo está dañado solo cuando intentas restaurarlo, lo que podría ser devastador si los
datos son críticos y no tienes una copia válida.

Los métodos más comunes incluyen el uso de sumas de verificación (checksums),


comparaciones bit a bit y la verificación automática proporcionada por ciertas herramientas
de respaldo.
Checksum
Los checksums son códigos generados por algoritmos que toman como entrada un archivo o
conjunto de archivos y generan una cadena alfanumérica única (hash). Al comparar el hash
generado al crear el respaldo con el hash generado durante la verificación, puedes asegurarte
de que los archivos no han cambiado ni se han corrompido.

Algoritmos de hash más comunes:


● MD5: Aunque se considera menos seguro para datos críticos debido a vulnerabilidades
de colisiones, sigue siendo útil para la verificación de integridad de archivos.
● SHA-256 o SHA-512: Son mucho más seguros y menos propensos a colisiones, por lo que
se recomiendan para la verificación de archivos importantes.
Creación de checksums al realizar el respaldo:
Al crear un respaldo, puedes generar un checksum que represente el estado del archivo de
respaldo en ese momento.
Checksum
Ejemplo con SHA-256:

sha256sum /backup/home_backup.[Link] > /backup/home_backup.sha256

Este comando genera un archivo .sha256 que contiene el checksum del archivo
home_backup.[Link]. Este checksum puede ser usado posteriormente para verificar la
integridad del respaldo.

Verificación de la integridad del respaldo usando checksums:


Una vez que se haya generado el checksum, puedes usarlo en el futuro para verificar la
integridad del archivo de respaldo.

Ejemplo de verificación:
sha256sum -c /backup/home_backup.sha256
Verificación con rsync
rsync es una herramienta excelente para sincronización de archivos, pero también puede ser
utilizada para verificar la integridad de los archivos comparando su contenido entre la copia de
respaldo y el original.
Comparación de archivos con rsync:
Puedes utilizar la opción --checksum de rsync para verificar que los archivos en el respaldo
coincidan con los originales, calculando y comparando checksums de los archivos en ambas
ubicaciones.
Ejemplo:
rsync -av --checksum /home/ /backup/home/
Verificación con tar
Cuando utilizas tar para crear respaldos, también puedes verificar la integridad de los archivos
comprimidos utilizando su capacidad de comprobación interna.
Verificación interna de archivos tar:
Si has creado un archivo tar comprimido, puedes verificar su integridad usando la opción
--compare o -d para comparar el contenido del archivo comprimido con los archivos
originales.
Ejemplo:
tar --compare -f /backup/home_backup.[Link]
Verificación con dd
Si estás respaldando discos completos o particiones usando dd, puedes hacer una verificación
comparando los datos de bloque bit a bit entre el respaldo y la partición original. Aunque es un
proceso lento, es muy efectivo para garantizar la exactitud de las copias a nivel de bloque.
Comparación bit a bit con cmp:
Después de crear el respaldo, puedes utilizar la herramienta cmp para comparar el archivo de
respaldo con el disco original:
cmp /dev/sda1 /backup/sda1_backup.img

Este comando compara los datos de la partición original /dev/sda1 con la imagen
/backup/sda1_backup.img y detecta cualquier diferencia entre ellos. Si no hay diferencias, el
comando no devolverá ningún mensaje, lo que indica que los datos son idénticos.
Otras herramientas
204 > System Maintenance
Otras Herramientas
BorgBackup, restic, y rclone: Herramientas de respaldo individuales
Estas herramientas están diseñadas principalmente para respaldos a nivel de archivo y están
enfocadas en la simplicidad, flexibilidad, y la facilidad de uso. Suelen ser más fáciles de
implementar en entornos más pequeños o en sistemas individuales, aunque también pueden
escalar a entornos más grandes.

BorgBackup y restic:
● Están diseñadas para realizar respaldos locales y remotos con características avanzadas
como deduplicación y cifrado.
● No requieren una arquitectura cliente-servidor complicada, por lo que son adecuadas
tanto para respaldos personales como para algunos casos de uso empresarial.
● Son perfectas para realizar respaldos de un solo sistema o pocos sistemas, sin necesidad
de infraestructura compleja.
Otras Herramientas
rclone:
Enfocado en la sincronización y transferencia de archivos entre almacenamiento local y en la
nube. No es una herramienta de respaldo tradicional, pero se puede usar para enviar respaldos
a servicios de almacenamiento en la nube.
Es muy útil en entornos donde el respaldo remoto (especialmente en la nube) es una prioridad.
Otras Herramientas
Bacula, Bareos, y BackupPC: Soluciones empresariales de respaldo centralizado
Estas herramientas tienen una arquitectura más compleja y están diseñadas para gestionar
respaldos en múltiples sistemas o servidores en entornos más grandes y complejos. Están
orientadas hacia la gestión centralizada de respaldos en infraestructuras de TI empresariales.

Bacula y Bareos:
● Siguen una arquitectura cliente-servidor. Tienes un servidor central que coordina y
gestiona los respaldos de múltiples clientes (servidores o estaciones de trabajo) en la red.
● Soportan medios de almacenamiento variados (cintas, discos, almacenamiento en red),
además de características avanzadas como automatización, gestión de volúmenes y
restauraciones centralizadas.
● Son herramientas de gran escala, más adecuadas para entornos empresariales grandes
que requieren la gestión de múltiples nodos y recursos de respaldo distribuidos.
Otras Herramientas
BackupPC:
● Aunque no tiene un enfoque cliente-servidor estricto, puede realizar respaldos de
múltiples máquinas usando protocolos como rsync, smb o tar sin necesidad de instalar un
cliente específico.
● Está diseñado para ser una solución de respaldo eficiente en la red, adecuada para
respaldar PCs y servidores sin requerir la instalación de agentes en los clientes.
Gestión de Recursos
204 > System Maintenance
Medición del Uso de CPU
La CPU es uno de los recursos más demandados en un sistema y su uso intensivo puede
afectar el rendimiento general. Hay varias herramientas útiles para medir y monitorear el
consumo de CPU:

● top/htop: Muestra información de uso de CPU, memoria, carga promedio y una lista de
procesos activos ordenados por uso de CPU.
● vmstat:proporciona una visión general de los recursos del sistema, incluyendo CPU,
memoria, y E/S. Muestra estadísticas de procesos en espera y en ejecución, actividad de
interrupciones, y tiempo de CPU utilizado por el sistema y el usuario.
● Iostat (paquete sysstat): es una herramienta que permite analizar el rendimiento del CPU
y los dispositivos de E/S. Aunque se usa frecuentemente para monitorear discos, también
proporciona información de uso de CPU.
● mpstat (paquete sysstat): permite monitorizar el uso de CPU en sistemas con múltiples
núcleos. Puedes ver el uso por cada núcleo individualmente, útil para identificar
desequilibrios en la carga de trabajo de la CPU.
Medición del Uso de Memoria
La memoria es un recurso que puede agotarse rápidamente, especialmente en sistemas con
aplicaciones intensivas en RAM. El uso de intercambio (swap) también es un buen indicador de
la salud de la memoria.

● free: muestra la cantidad total de memoria libre y usada, incluyendo intercambio (swap).
● smem: proporciona un análisis detallado del uso de memoria, incluyendo memoria
compartida entre procesos y consumo de memoria física y virtual.
● pmap: muestra un desglose del uso de memoria de un proceso específico.
pmap <PID> es útil para analizar en detalle el uso de memoria de un proceso en particular.

● vmstat, top/htop
Medición del Uso de Disco
El almacenamiento es uno de los recursos más críticos, y el uso intensivo de disco puede ser
una de las causas de los cuellos de botella en el sistema.

● iostat: es excelente para medir el rendimiento de los discos. Muestra la tasa de lectura y
escritura y el tiempo de espera (await) de cada dispositivo de disco.
● df: proporciona información sobre el uso del espacio en disco.
● du: permite ver el espacio utilizado por directorios y archivos. Es útil para localizar los
archivos y carpetas que más espacio consumen. ncdu lo hace de forma visual.
● iotop: monitorea el uso de I/O en tiempo real, mostrando los procesos que están
accediendo al disco y la cantidad de I/O que generan.
● lsof: lista los archivos abiertos en el sistema y los procesos asociados, permitiendo un
análisis detallado de la actividad de archivos y puertos.
Medición del Uso de E/S (I/O)
El rendimiento de I/O (entrada/salida) impacta directamente en la rapidez con la que los datos
se leen y escriben en el disco o se transmiten a través de la red.

● dstat: muestra métricas de CPU, disco, red y memoria en una sola línea, siendo útil para
analizar I/O de disco y red en paralelo.
● blktrace: es una herramienta avanzada para trazar operaciones de E/S a nivel de bloque
en el sistema. btt (Block Tracing Toolkit): ayuda a procesar los datos generados por
blktrace y analizar detalladamente el rendimiento de dispositivos de almacenamiento.
● ifstat: es una herramienta para monitorear la actividad de las interfaces de red,
mostrando el tráfico entrante y saliente por cada interfaz en tiempo real.
● iftop: es una herramienta de monitoreo de ancho de banda que muestra en tiempo real el
tráfico de red por conexión IP, lo que facilita la identificación de las conexiones que
consumen más ancho de banda.
● iptraf-ng: es una herramienta interactiva en línea de comandos para monitorear tráfico
de red. Ofrece detalles en tiempo real sobre paquetes entrantes y salientes, tráfico IP,
conexiones TCP, estadísticas de red por protocolo y actividad de puertos.
Problemas de rendimiento
Síntoma: Alta Carga del Sistema
Muestra un valor elevado en la métrica de "load average" (carga promedio), que representa la
cantidad de procesos en espera para ser ejecutados
● Causas:
○ Uso elevado de CPU
○ Interrupciones de hardware
○ Alta demanda de I/O
● Herramientas de diagnóstico:
○ uptime y top: uptime muestra la carga promedio en los últimos 1, 5 y 15 minutos. top
permite observar los procesos activos y ver cuáles están utilizando más CPU.
○ iostat: si muestra tiempos de espera altos (await), puede indicar que la carga de CPU
se debe a procesos esperando operaciones de disco.
○ ps y pstree: Permiten analizar procesos en ejecución. pstree puede ser útil para
identificar procesos secundarios generados por un proceso principal intensivo en CPU.
Problemas de rendimiento
Síntoma: Uso Elevado de Memoria y Consumo de Swap
Cuando el sistema se queda sin RAM, comienza a utilizar swap (espacio de intercambio en disco),
lo que puede ralentizar el sistema significativamente debido a que el acceso a disco es mucho
más lento que el acceso a RAM
● Causas
○ Procesos que consumen mucha memoria
○ Fuga de memoria: uno o varios procesos acumulan memoria sin liberarla.
○ Cache de disco excesivo: El sistema Linux utiliza RAM como caché de disco para
mejorar el rendimiento, pero esto puede convertirse en un problema si la memoria es
escasa y el sistema sigue incrementando el caché.
● Herramientas de diagnóstico:
○ free: Observa la cantidad de memoria libre y si el swap está en uso.
○ vmstat: las columnas si (swap in) y so (swap out) indican actividad de intercambio, y
valores elevados son una señal de problemas de memoria.
○ smem y pmap: smem ofrece un desglose detallado y pmap <PID> ayuda a ver el mapa
de memoria de un proceso específico.
○ top: observa la columna RES, que indica la cantidad de RAM en uso por cada proceso.
Problemas de rendimiento
Síntoma: Latencia Alta en Operaciones de Disco (I/O)
Una latencia elevada en las operaciones de disco causa lentitud en aplicaciones que requieren
acceso constante al disco, como bases de datos o servicios de archivos
● Causas
○ Procesos con alta demanda de I/O: Copias de seguridad, bases de datos o cualquier
proceso que realice numerosas lecturas/escrituras.
○ Hardware de disco lento: Discos mecánicos lentos o configuraciones de
almacenamiento compartido pueden incrementar la latencia.
○ Sobrecarga de E/S: Puede deberse a una carga elevada de I/O en disco
● Herramientas de diagnóstico
○ iotop: Muestra en tiempo real qué procesos están usando I/O de disco.
○ iostat: Permite ver el rendimiento de cada dispositivo de disco. La métrica await indica
el tiempo de espera promedio por operación de I/O.
○ blktrace y btt: Herramientas avanzadas para trazar y analizar operaciones de I/O,
útiles cuando se necesita un diagnóstico detallado del rendimiento de disco.
Problemas de rendimiento
Síntoma: Problemas de Red o Latencia de Red Elevada
Problemas de red pueden manifestarse como latencias altas, pérdida de paquetes, conexiones
inestables o lentitud en la transmisión de datos.
● Causas
○ Saturación de ancho de banda: Sobrecarga debido a un alto volumen de tráfico.
○ Configuración incorrecta de red: Problemas con la configuración de interfaces de red,
tablas de enrutamiento, o firewalls.
○ Problemas en el hardware de red: Deficiencias o fallas en los adaptadores de red,
switches o routers.
● Herramientas de diagnóstico
○ ss: Es útil para ver cuántas conexiones tiene cada servicio y detectar problemas.
○ iftop: Permite identificar procesos que están generando tráfico elevado.
○ iptraf-ng: Monitoriza el tráfico de red y ver detalles como puertos y protocolos.
○ ping y traceroute: ping ayuda a verificar la conectividad y la latencia hacia un host
específico. Traceroute permite detectar problemas en el enrutamiento de paquetes.
Problemas de rendimiento
Síntoma: Sistema Congelado o Bajo Rendimiento en General
Los usuarios experimentan retrasos significativos al intentar realizar cualquier acción, y el sistema
no responde adecuadamente a los comandos.
● Causas
○ Cuellos de botella en múltiples recursos: Puede deberse a una combinación de alta
carga de CPU, uso intensivo de memoria y consumo elevado de I/O.
○ Problemas de hardware: Fallos en CPU, memoria o discos.
○ Procesos de muy alta prioridad: Procesos configurados con una prioridad alta que
monopolizan la CPU y otros recursos.
● Herramientas de diagnóstico
○ uptime: un valor de carga promedio consistentemente alto podría indicar una
sobrecarga de recursos.
○ top y htop: revisar el consumo de CPU, memoria y E/S de los procesos para identificar
posibles culpables.
○ sar: útil para detectar aumentos repentinos en el uso de recursos.
○ dmesg: Muestra mensajes del sistema y del kernel, donde pueden aparecer errores de
hardware o advertencias que indiquen problemas.
Gestionar el consumo de recursos con systemd
Systemd proporciona una estructura jerárquica para la asignación de recursos a través de slices,
scopes y services, y permite utilizar Cgroups (grupos de control) para limitar y priorizar el uso de
CPU, memoria y E/S de disco.
● Slices: Son contenedores jerárquicos que agrupan y organizan recursos para servicios y
procesos. Al definir slices, puedes asignar una cantidad de recursos específica a un
conjunto de servicios o procesos, asegurando que no consuman más de lo asignado.
systemd crea slices predefinidas como [Link] (para procesos de usuario) y [Link]
(para servicios de sistema).
● Scopes: Son grupos de procesos temporales creados de forma dinámica, útiles para tareas
no gestionadas directamente por systemd, como procesos iniciados por usuarios. A través
de los scopes, systemd aplica restricciones de recursos, aunque no tienen la persistencia de
los servicios.
● Services: A través de los archivos de configuración de cada servicio, puedes definir límites
específicos de CPU, memoria y E/S.
Cada una de estas unidades utiliza los Cgroups (grupos de control) para restringir los recursos
que los procesos pueden consumir.
Parámetros de Configuración de CPU
Systemd ofrece varias propiedades de configuración para gestionar el uso de CPU en cada slice,
scope o servicio.
● CPUWeight: Define el peso relativo del uso de CPU para un servicio o slice en comparación
con otros. Un valor más alto otorga mayor prioridad. Su rango es de 1 a 10000.
● CPUQuota: Establece un límite en el porcentaje de tiempo de CPU que un servicio o slice
puede consumir en un período dado. Esto se especifica como porcentaje (por ejemplo, 50%
significa que el servicio puede usar la mitad del tiempo de CPU disponible).
● CPUQuotaPeriodSec: Define el período de tiempo durante el cual se evalúa CPUQuota. El
valor predeterminado suele ser 100ms, pero puede ajustarse según la carga del sistema.
● AllowedCPUs: Restringe el uso de CPU de un servicio a núcleos específicos. Esto es útil en
sistemas con múltiples núcleos donde algunos servicios necesitan estar aislados en un
conjunto de núcleos.
Control de Memoria

● MemoryMin: Establece una cantidad mínima de memoria que se garantiza para un servicio
o slice. Si otros servicios intentan usar la memoria, se preservará esta cantidad mínima para
el servicio configurado.
● MemoryLow: Define un límite suave para la memoria, permitiendo que el servicio consuma
más en caso de que haya memoria disponible. Sin embargo, en situaciones de presión de
memoria, otros servicios pueden usar la memoria hasta el límite de MemoryMin.
● MemoryHigh: Limita el consumo de memoria bajo condiciones normales, pero permite
temporalmente un uso superior. Si el consumo de memoria persiste por encima de
MemoryHigh, el sistema intentará liberar memoria.
● MemoryMax: Establece un límite máximo absoluto en la memoria que un servicio puede
consumir. Si el servicio intenta exceder este límite, el sistema matará el proceso o limitará su
uso de memoria.
Control de E/S (I/O) en Slices, Scopes y Servicios

● IOWeight: Similar a CPUWeight, define el peso relativo de E/S para un servicio o slice.
Valores más altos otorgan mayor prioridad de E/S en comparación con otros servicios.
● IODeviceWeight: Permite especificar el peso de E/S para un servicio en un dispositivo
específico, útil en sistemas con múltiples discos.
● IOReadBandwidthMax y IOWriteBandwidthMax: Limitan el ancho de banda máximo de
lectura y escritura respectivamente, especificado en bytes por segundo. Útil para garantizar
que un servicio no sobrecargue el almacenamiento con operaciones de I/O.
● IOReadIOPSMax y IOWriteIOPSMax: Establecen el número máximo de operaciones de I/O
por segundo que un servicio puede realizar en un dispositivo específico. Esto permite limitar
el número de operaciones de I/O y no solo el volumen de datos.
● IODeviceLatencyTargetSec: Define un objetivo de latencia para el dispositivo. Si la latencia
de E/S del servicio excede este objetivo, se toman medidas para reducir su impacto.
Control de E/S (I/O) en Slices, Scopes y Servicios

● IOWeight: Similar a CPUWeight, define el peso relativo de E/S para un servicio o slice.
Valores más altos otorgan mayor prioridad de E/S en comparación con otros servicios.
● IODeviceWeight: Permite especificar el peso de E/S para un servicio en un dispositivo
específico, útil en sistemas con múltiples discos.
● IOReadBandwidthMax y IOWriteBandwidthMax: Limitan el ancho de banda máximo de
lectura y escritura respectivamente, especificado en bytes por segundo. Útil para garantizar
que un servicio no sobrecargue el almacenamiento con operaciones de I/O.
● IOReadIOPSMax y IOWriteIOPSMax: Establecen el número máximo de operaciones de I/O
por segundo que un servicio puede realizar en un dispositivo específico. Esto permite limitar
el número de operaciones de I/O y no solo el volumen de datos.
● IODeviceLatencyTargetSec: Define un objetivo de latencia para el dispositivo. Si la latencia
de E/S del servicio excede este objetivo, se toman medidas para reducir su impacto.
Comandos

systemctl set-property permite aplicar propiedades de Cgroups en tiempo real sin


modificar el archivo de configuración de servicio.
systemctl set-property [Link] CPUQuota=50%
Una vez configuradas las restricciones de recursos, puedes visualizar la estructura jerárquica de
Cgroups y ver cómo están asignados los recursos utilizando:
● systemd-cgls: Muestra la jerarquía de Cgroups activos y permite verificar los procesos y
servicios en cada slice, scope y service.
● systemd-cgtop: Similar a top, muestra el uso en tiempo real de CPU, memoria y E/S de
cada Cgroup administrado por systemd, facilitando el monitoreo continuo de los recursos.
PROTECCIÓN DE DATOS MEDIANTE CIFRADO [Link]

SSH
Es un protocolo (y programa) que permite acceder a un servidor remoto de una
forma segura cifrando la información que se intercambia con el cliente.
La función más usada es ejecutar comandos mediante terminar en una máquina
remota, pero puede usarse para copiar (scp), ftp (sftp) y para crear "túneles"
seguros usados por multitud de aplicaciones.
Para cifrar la comunicación utiliza claves públicas y privadas.
El programa clientes se configura en el fichero /etc/ssh/ssh_config y el servidor
en /etc/ssh/sshd_config.
Podemos iniciar sesión con el usuario y la contraseña o usando unas claves
instaladas en el cliente y el servidor.
PROTECCIÓN DE DATOS MEDIANTE CIFRADO [Link]

Directivas destacadas de /etc/ssh/sshd_config.


‣ Port : Número de puerto por el que escucha el servidor (22)
‣ PermitRootLogin: Indica si el root puede acceder mediante ssh o no
‣ X11Forwarding: Se permite el túnel para ejecutar programas de forma remota
usando el entorno gráfico

Ficheros de claves privadas (según su sistema de cifrado)


CLIENTE SERVIDOR
~/.ssh/id_rsa /etc/ssh/ssh_host_rsa_key
~/.ssh/id_dsa /etc/ssh/ssh_host_dsa_key
~/.ssh/id_ecdsa /etc/ssh/ssh_host_ecdsa_key
~/.ssh/id_ed25519 /etc/ssh/ssh_host_ed25519_key

Las ficheros de clave pública son iguales pero acabados en .pub


PROTECCIÓN DE DATOS MEDIANTE CIFRADO [Link]

ssh-keygen
Genera un par de claves publica y privada. Por defecto usa RSA. Opciones:
‣ -t: método de cifrado (rsa, dsa, ecdsa, ed25519, ...)
‣ -b: bits usados para el cifrado
ssh-keygen -t ecdsa -b 2084

Por defecto usará el directorio ~/.ssh/ para guardar las claves


Para acceder a un servidor con estas claves hay que guardar la clave pública en
~/.ssh/authorized_keys
PROTECCIÓN DE DATOS MEDIANTE CIFRADO [Link]

Tunel SSH

Es una conexión cifrada entre dos puntos que se establece con la intención de que
sea utilizada para trasmitir los datos de otra aplicación o servicio de forma segura.
ssh -N -f -L 8080:destino:80 usuario@origen
‣ -N : no ejecuta un comando
‣ -f : Se procesa en segundo plano
‣ -L : Especifica los puertos en el origen y el destino
SSH [Link]

Recomendaciones de seguridad para el servidor ssh


๏ Protocol: 2. No se puede admitir la versión 1
๏ Port : Es muy recomendable cambiar el puerto por defecto (22) por otro que no sea parecido (2222)
๏ PermitRootLogin: Se debe denegar el acceso a root, es mejor entrar como otro usuario y después
subir de privilegios con su o sudo.
๏ X11Forwarding: Desativar, valor no.
๏ PasswordAuthentication: No. Se recomienda la autenticación por clave pública-privada.
๏ Desactivar SSH tuneling.
✦ AllowTcpForwarding no
✦ AllowStreamLocalForwarding no
✦ GatewayPorts no
✦ PermitTunnel no
SSH [Link]

Otras directivas a tener en cuenta


๏ MaxAuthTries: Número de intentos de login antes de cortar la conexión.
๏ AllowGroups / AllowUsers: Permitir sólo unos grupos o usuarios determinados
๏ PrintLastLog: no. Desactiva la información del último login
๏ PrintMotd no. Desactiva el mensaje de entrada (/etc/motd).
Estas dos directivas NO desactivan el mensaje de bienvenida del propio shell, para ello se puede usar la
directiva HUSHLOGIN_FILE del fichero /etc/[Link] o añadir un fichero al home del usuario touch
~/.hushlogin. También se deberían revisar las opciones de motd en /etc/pam.d/sshd
SSH
204 > System Maintenance
SSH CA (certificate authority)
En entornos con numerosos usuarios y servidores, la gestión individual de claves SSH puede
volverse compleja y propensa a errores. Una Autoridad de Certificación (CA) SSH permite
simplificar y centralizar esta gestión.
Una CA SSH es una entidad que posee un par de claves (pública y privada) utilizado para firmar
otras claves públicas, generando certificados SSH. Estos certificados permiten a los servidores y
clientes SSH confiar en las claves firmadas sin necesidad de intercambiar claves públicas
directamente entre cada par de sistemas.
● Ventajas
○ Escalabilidad: Simplifica la gestión de claves en entornos con muchos usuarios y
servidores.
○ Seguridad Mejorada: Facilita la revocación y rotación de claves.
○ Administración Centralizada: Permite un control central sobre quién puede acceder a
qué recursos.
○ Validez Temporal: Los certificados pueden tener una validez limitada, reduciendo el
riesgo de uso indebido.
SSH CA
Pasos necesarios:
● Configurar la CA SSH
○ Generar el Par de Claves de la CA:
ssh-keygen -t rsa -b 4096 -f /root/ssh_ca/ca_user_key -C "CA SSH para usuarios"
● Configurar los Servidores para Confiar en la CA
○ Copia la clave pública de la CA a cada servidor:
scp /root/ssh_ca/ca_user_key.pub root@servidor:/etc/ssh/
○ Edita el archivo /etc/ssh/sshd_config en cada servidor y añade:
TrustedUserCAKeys /etc/ssh/ca_user_key.pub
○ Opcionalmente, especifica el archivo AuthorizedPrincipalsFile:
AuthorizedPrincipalsFile /etc/ssh/authrized_principals/%u
%u Se reemplaza por el nombre de usuario.
● Generar y Firmar Claves de Usuarios
○ Los Usuarios Generan sus Claves Públicas/Privadas
ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa -C "usuario@[Link]"
SSH CA
● Enviar la Clave Pública para Firmar
○ El usuario envía su clave pública (~/.ssh/id_rsa.pub) al administrador de la CA.
● La CA Firma la Clave Pública del Usuario
○ El administrador firma la clave pública del usuario:
ssh-keygen -s /root/ssh_ca/ca_user_key -I usuario_cert -n usuario -V +52w /path/a/id_rsa.pub
-I: Identificador del certificado (puede ser cualquier cadena descriptiva).
-n: Principals (nombres de usuario autorizados).
-V: Periodo de validez (ejemplo: +52w para 52 semanas).
● Distribuir el Certificado al Usuario
○ El certificado id_rsa-[Link] se envía al usuario, quien debe colocarlo en su directorio
~/.ssh/.
● Configurar el Cliente SSH del Usuario
○ El usuario debe asegurarse de que su cliente SSH utiliza el certificado:
En ~/.ssh/config, añadir:
Host *
IdentityFile ~/.ssh/id_rsa
CertificateFile ~/.ssh/id_rsa-[Link]
Ansible Basics
205> Configuration Management
Beneficios de la Automatización
● Eficiencia Operacional: Elimina tareas manuales repetitivas, permitiendo a los administradores enfocarse en
actividades estratégicas. Reduce el tiempo necesario para implementar cambios o nuevas configuraciones.

● Consistencia y Confiabilidad: Todas las máquinas reciben exactamente las mismas configuraciones y
actualizaciones, eliminando inconsistencias. Los errores humanos se reducen gracias a la idempotencia,
garantizando que los estados deseados sean aplicados correctamente.

● Escalabilidad: Facilita la gestión de cientos o miles de servidores simultáneamente. Se puede implementar una
nueva máquina con una configuración idéntica en minutos.

● Trazabilidad y Auditoría: Permite registrar y documentar cada cambio realizado en el sistema. Las herramientas
de automatización suelen incluir funciones para registrar las configuraciones aplicadas.

● Recuperación Rápida: En caso de fallos, los sistemas pueden restaurarse rápidamente aplicando las
configuraciones automatizadas predefinidas.
Casos de Uso Reales
● Despliegue Rápido de Infraestructura: Configuración de clústeres de servidores para aplicaciones web y bases
de datos.

● Parcheo de Seguridad: Automatización de la instalación de actualizaciones críticas en cientos de servidores.

● Preparación de Entornos de Desarrollo: Creación de entornos preconfigurados para desarrolladores con las
herramientas necesarias.

● Migración entre Entornos: Migración de aplicaciones de un entorno local a la nube o entre proveedores de nube.
Principales características de Ansible
● Automatización sin agentes: Ansible utiliza SSH para comunicarse con los nodos remotos. No requiere software
adicional (agentes) en los nodos, lo que simplifica su uso.
● Declarativo, no imperativo: Escribes lo que quieres que se configure en un archivo YAML, y Ansible lo ejecuta.
● Idempotencia: Ansible garantiza que las tareas se ejecuten una sola vez, sin causar cambios adicionales si ya
están en el estado deseado.
● Inventarios: Los sistemas se agrupan en un archivo llamado inventory, donde defines hosts y grupos de hosts
para administrar.
Cómo Ansible Interactúa con Sistemas Remotos

● Conexión basada en SSH: Requiere que el nodo de control tenga acceso SSH a los nodos gestionados. Se
pueden usar claves SSH sin contraseña para facilitar la autenticación.
● Ejecución por módulos: Ansible copia módulos (scripts) al sistema remoto y los ejecuta para realizar las tareas
necesarias.
● Requisitos mínimos en el nodo remoto:

○ Python instalado (normalmente ya presente en sistemas Linux modernos).


○ El usuario que se conecta debe tener permisos para realizar las tareas necesarias (a menudo mediante
sudo).
El Inventario de Ansible
Es una lista de nodos (hosts) que se gestionan desde el nodo de control. Estos nodos se pueden agrupar y configurar
mediante un archivo de texto simple o una fuente dinámica. Crear y mantener un archivo de inventario adecuado es
esencial para gestionar sistemas de manera eficiente con Ansible.
Tipos de Inventarios
● Inventario Estático
○ Un archivo simple en formato INI o YAML.
○ Es ideal para pequeñas infraestructuras o configuraciones locales.

● Inventario Dinámico
○ Genera inventarios en tiempo real usando un script o un plugin.
○ Ideal para entornos en la nube o infraestructuras dinámicas.
Inventario Estático - Formato Básico INI
El archivo de inventario se encuentra típicamente en /etc/ansible/hosts por defecto. Puede ser personalizado según tus
necesidades. Un inventario puede tener nombres de host o sus IP’s.
Tiene la siguiente estructura:
[webservers]
Grupos:
[Link]
[Link] Los hosts se agrupan entre corchetes ([group_name]).
[webservers] agrupa nodos relacionados con servidores web.
[databases]
[Link] Hosts:
[Link]
Pueden ser especificados por nombre de dominio, IP o alias.
[all:vars]
ansible_user=admin
Ejemplo: [Link] o [Link].
ansible_port=22
ansible_ssh_private_key_file=/path/to/private_key Variables de grupo o globales:
[all:vars] define variables comunes para todos los hosts.
Inventario Estático - Formato Básico en YAML
Todos los inventarios en YAML comienzan con el grupo raíz all, que puede contener:
hosts: Una lista de servidores.
children: Subgrupos de hosts.
all:
hosts:
backup1:
ansible_host: [Link]
ansible_user: root
ansible_ssh_pass: mypassword
children:
web_servers:
hosts:
web1:
ansible_host: [Link]
ansible_user: ubuntu
web2:
ansible_host: [Link]
ansible_user: admin
db_servers:
hosts:
db1:
ansible_host: [Link]
ansible_user: root
Playbooks de Ansible
Los playbooks son el núcleo de Ansible, escritos en formato YAML para definir configuraciones, tareas y acciones
que deseas realizar en sistemas remotos.
Un playbook es un archivo YAML que describe las tareas a ejecutar en un conjunto de hosts. Los playbooks son
declarativos: definen el estado deseado en lugar de los pasos exactos para llegar a ese estado.

Ejemplo básico (1 play):


- name: Configurar servidores web
hosts: web_servers
tasks:
- name: Instalar Apache
apt:
name: apache2
state: present

Un playbook se ejecuta usando el comando ansible-playbook:


ansible-playbook [Link]

Puedes especificar el fichero de inventario con la opción -i


ansible-playbook -i inventario [Link]
Playbooks de Ansible
Uso de Handlers
Los handlers son tareas especiales que se ejecutan cuando son "notificadas" por otras tareas que generan cambios.
Definir un Handler
Se colocan bajo la clave handlers y tienen un nombre único.
handlers:
- name: Reiniciar Nginx
service:
name: nginx
state: restarted

Notificar un Handler
Una tarea puede notificar a un handler si realiza un cambio:yaml
- name: Modificar configuración de Nginx
copy:
src: /local/path/[Link]
dest: /etc/nginx/[Link]
notify:
- Reiniciar Nginx
Playbooks de Ansible
Condicionales (Conditionals)
Permiten ejecutar tareas sólo si se cumplen ciertas condiciones. Se definen con la clave when.
tasks:
- name: Instalar Apache en Debian
apt:
name: apache2
state: present
when: ansible_os_family == "Debian"

Bucles (Loops)
Los bucles permiten repetir una tarea con diferentes valores. Usar un Loop Simple
tasks:
- name: Crear múltiples usuarios
user:
name: "{{ item }}"
state: present
loop:
- alice
- bob
- charlie
Playbooks de Ansible
Registros (Registers)
Los registros almacenan el resultado de una tarea para usarlo más adelante en el playbook.

Definir un Registro
tasks:
- name: Verificar si un archivo existe
stat:
path: /etc/nginx/[Link]
register: nginx_config

Usar el Registro
Utiliza el registro en una tarea condicional:
- name: Crear archivo de configuración si no existe
copy:
src: /local/path/[Link]
dest: /etc/nginx/[Link]
when: not nginx_config.[Link]

La información que contiene la variable depende del módulo que se ejecute, por ejemplo command, devuelve .stdout
porque el resultado es la salida estándar del comando. Pero stat , genera un conjunto de atributos específicos como
exists, isdir, size, entre otros.
Inventarios dinámicos
El inventario dinámico en Ansible permite gestionar nodos en infraestructuras dinámicas, donde los sistemas cambian
frecuentemente, como en entornos de nube, contenedores o máquinas virtuales. A diferencia de los inventarios
estáticos, que son archivos de texto plano, los inventarios dinámicos se generan automáticamente en tiempo de
ejecución utilizando scripts o plugins.

plugin: [Link]
compose: yes
keyed_groups:
- key: labels
prefix: docker_

plugin: [Link].aws_ec2
regions:
- us-east-1
- us-west-1
keyed_groups:
- key: tags
prefix: aws_
filters:
instance-state-name: running

ansible-playbook -i inventory_aws.yml [Link]


Cloud-Init
Es una herramienta utilizada para inicializar y configurar sistemas durante su primer inicio en entornos de nube. Es
compatible con múltiples proveedores de nube y distribuciones de Linux. Cloud-init permite automatizar tareas como la
configuración de red, la creación de usuarios y la instalación de software al momento de aprovisionar máquinas
virtuales.

Es independiente de Ansible y puede ser útil para realizar las tareas necesarias para que Ansible pueda empezar a
funcionar.
Módulos en
Ansible
205> Configuration Management
Módulos en Ansible

Los módulos de Ansible son componentes esenciales que permiten a los usuarios realizar
tareas específicas en los nodos administrados (hosts).

Módulos importantes y su uso


Gestión de archivos y texto

file: Gestiona permisos, ficheros,


enlaces y directorios.
- name: Crear un directorio
file:
path: /tmp/directorio
state: directory
mode: '0755'
Gestión de archivos y texto

copy: Copia archivos desde el


controlador al nodo.
- name: Copiar un archivo
copy:
src: [Link]
dest: /tmp/[Link]

template: Genera archivos


basados en plantillas Jinja2.
- name: Generar archivo
template:
src: plantilla.j2
dest: /etc/[Link]
Gestión de archivos y texto

ini_file: Gestiona entradas en


archivos .ini.
- name: Añadir sección
ini_file:
path: /etc/app/[Link]
section: defaults
option: timeout
value: 30

lineinfile: Añade o reemplaza líneas


específicas en un archivo.
- name: Añadir línea a un archivo
lineinfile:
path: /etc/[Link]
line: 'net.ipv4.ip_forward=1'
Gestión de usuarios y grupos

user: Gestiona cuentas de usuario.


- name: Crear un usuario
user:
name: usuario1
state: present

group: Gestiona grupos de usuarios.


- name: Crear un grupo
group:
name: grupo1
state: present
Gestión de comandos y servicios

command: Ejecuta comandos en


el host. (Más seguro que shell).
- name: Ejecutar comando
command: /usr/bin/ls /etc

shell: Ejecuta comandos en un shell.


(Úsalo con precaución).
- name: Ejecutar comando en shell
shell: "echo 'Hola' > /tmp/[Link]"
Gestión de comandos y servicios

service: Gestiona servicios del sistema.


- name: Iniciar un servicio
service:
name: apache2
state: started

systemd: Gestiona servicios usando SystemD.


- name: Reiniciar servicio con systemd
systemd:
name: sshd
state: restarted
Gestión de paquetes y repositorios

apt: Instala o elimina paquetes


en sistemas Debian/Ubuntu.
- name: Instalar paquete
apt:
name: nginx
state: present

debconf: Preconfigura paquetes


Debian antes de instalarlos.
- name: Configurar preguntas de instalación
debconf:
name: postfix
question: postfix/mailname
value: [Link]
vtype: string
Gestión de paquetes y repositorios

yum: Instala o elimina paquetes en sistemas RedHat/CentOS.


- name: Instalar paquete
yum:
name: httpd
state: present
Otras tareas comunes

git: Gestiona repositorios Git.


- name: Clonar repositorio
git:
repo: [Link]
dest: /var/www/repo

cron: Gestiona tareas programadas


en el cron.
- name: Añadir tarea cron
cron:
name: "Ejecutar script"
minute: "0"
hour: "3"
job: "/usr/local/bin/[Link]"
Otras tareas comunes

debug: Muestra mensajes para depuración.


- name: Mostrar mensaje
debug:
msg: "La tarea se ejecutó correctamente"
ansible-doc

Ansible-doc es una herramienta de línea de comandos en Ansible que permite consultar


información detallada sobre módulos, plugins y configuraciones de Ansible directamente desde tu
terminal.

Es especialmente útil para aprender a usar módulos específicos o para explorar las capacidades de
Ansible sin tener que buscar en la documentación en línea.

La sintaxis básica es:

ansible-doc [opciones] <nombre_módulo>

ansible-doc -l muestra una lista de todos los módulos que puedes usar con Ansible, organizados
por tipo.

ansible-doc -s <nombre_módulo> muestra únicamente en los parámetros que admite ese módulo
Roles en Ansible
205> Configuration Management
¿Qué es un Role en Ansible?
Un rol es una forma estructurada y reutilizable de organizar código en Ansible. Permiten dividir
tareas complejas en componentes más manejables, simplificando la administración de
configuraciones. Los roles agrupan tareas, variables, plantillas, archivos y manejadores en una
estructura de directorios bien definida.

Ventajas de usar roles


● Reutilización: Los roles pueden aplicarse en múltiples entornos o proyectos.
● Organización: Separan lógicamente las configuraciones (tareas, variables, etc.).
● Mantenibilidad: Facilitan la actualización y depuración del código.
● Compatibilidad: Roles descargados de Ansible Galaxy ofrecen configuraciones
predefinidas.
¿Qué es un Role en Ansible?

Cuando se crea un rol, Ansible genera una


estructura predefinida de directorios y archivos.
Esta estructura permite organizar claramente todos
los componentes necesarios para el rol.

A continuación, se presenta la estructura típica:


Ansible-galaxy

Creación de un rol
Ansible proporciona el comando ansible-galaxy para inicializar roles con la estructura
adecuada:
ansible-galaxy init <nombre_del_rol>

Por ejemplo:
ansible-galaxy init apache

Esto generará la estructura mencionada anteriormente dentro de una carpeta llamada apache.
Usar roles en un playbook
Una vez creado el rol, puedes usarlo en un playbook. Por ejemplo:
---
- name: Configurar servidores web
hosts: web
roles:
- apache

Este playbook aplicará el rol apache en todos los hosts del grupo web.
Ansible-galaxy

Ansible Galaxy es un repositorio en línea donde puedes encontrar roles predefinidos creados
por la comunidad o proveedores oficiales.

Buscar roles en Ansible Galaxy


Visita [Link] y busca un rol por nombre, por ejemplo, nginx.

Instalar roles desde Ansible Galaxy


Usa el comando ansible-galaxy para instalar roles directamente en tu sistema:
ansible-galaxy install <autor>.rol

El rol se descargará y quedará disponible en la ruta predeterminada (generalmente


~/.ansible/roles/).
Ansible-galaxy
Especificar rutas de roles
Si deseas usar una ruta personalizada para los roles, defínela en el archivo de configuración
[Link]:
[defaults]
roles_path = ./roles

Gestionar dependencias entre roles


Puedes definir dependencias de un rol en el archivo meta/[Link].
Por ejemplo, si un rol depende de otro:
---
dependencies:
- role: common
- role: nginx

Cuando el rol principal se aplique, automáticamente se ejecutarán primero las dependencias.


Templates and
Variables
205> Configuration Management
Variables
Las variables en Ansible se utilizan para personalizar el comportamiento de los playbooks y
proporcionar valores dinámicos a las tareas. Se definen en diferentes lugares:

Inventarios: Definidas en playbooks:


Se definen variables por host Dentro del bloque vars o mediante set_fact.yaml
o grupo en archivos de inventario.
vars:
[web] my_var: "value"
server1 ansible_user=admin http_port=8080

Archivos YAML: Variables de la línea de comandos:


Se colocan en directorios Al ejecutar el [Link]
como group_vars o host_vars.yaml ansible-playbook [Link] -e "var1=value1"
# group_vars/[Link]
http_port: 8080
Facts
Los facts son datos recopilados automáticamente por Ansible sobre los nodos administrados.
Estos datos incluyen:
● Información del sistema operativo.
● Direcciones IP.
● Espacio en disco, entre otros.

Para acceder a los hechos, se utiliza el módulo setup:


ansible all -m setup

Puedes usar los hechos directamente en tus playbooks:


tasks:
- name: Mostrar el sistema operativo
debug:
msg: "El sistema operativo es {{ ansible_os_family }}"
Ansible Vault
Ansible Vault permite cifrar archivos o cadenas de texto confidenciales, como contraseñas,
claves API, o configuraciones sensibles.
Funciones principales
● Crear archivos cifrados:
ansible-vault create [Link]
Esto abrirá un editor de texto donde puedes agregar contenido.

● Cifrar archivos existentes:


ansible-vault encrypt [Link]

● Desencriptar archivos:
ansible-vault decrypt [Link]

● Editar un archivo cifrado:


ansible-vault edit [Link]
Ansible Vault
Uso en Playbooks:
Incluye archivos cifrados en tus playbooks como cualquier otro archivo YAML:
vars_files:
- [Link]

Para ejecutar un playbook que utiliza Ansible Vault, debes proporcionar la contraseña:
ansible-playbook [Link] --ask-vault-pass
Plantillas Jinja2
Las plantillas Jinja2 son archivos de texto que incluyen marcadores y expresiones dinámicas. Se
utilizan para generar archivos de configuración, scripts y otros documentos que varían según el
contexto.
Sintaxis de Jinja2
Variables: Se utilizan llaves dobles {{ variable }}.
ServerName {{ server_name }}

Condicionales:
{% if environment == 'production' %}
This is the production environment.
{% else %}
This is not production.
{% endif %}

Bucles:
{% for user in users %}
- {{ [Link] }} ({{ [Link] }})
{% endfor %}
Filtros en Jinja2
Filtros comunes:
● default: Proporciona un valor predeterminado.
{{ var_name | default('default_value') }}

● upper/lower: Convierte texto a mayúsculas/minúsculas.


{{ var_name | upper }}

● replace: Reemplaza una subcadena.


{{ var_name | replace('old', 'new') }}
Uso en Ansible de Jinja2
Crea archivos de plantillas en el directorio templates/ con extensión .j2.
Por ejemplo, config.j2:
server {
listen {{ http_port }};
server_name {{ server_name }};
}

Luego, usa el módulo template para generar el archivo de salida:


tasks:
- name: Generar archivo de configuración
template:
src: templates/config.j2
dest: /etc/nginx/sites-enabled/default

También podría gustarte