MAC (Mandatory Access Control)
Definición: MAC, o Control de Acceso Obligatorio (Mandatory Access Control), es un modelo de control de acceso utilizado en sistemas operativos y aplicaciones para restringir el acceso a recursos (como archivos, procesos, dispositivos y redes) según reglas predefinidas e inmutables impuestas por un administrador de sistemas o políticas de seguridad centralizadas. A diferencia de otros modelos, como DAC (Discretionary Access Control), en MAC el acceso no es determinado por el propietario del recurso, sino por una autoridad central que define y aplica las políticas de seguridad, las cuales los usuarios no pueden modificar.
Características principales:
- Políticas centralizadas e inmutables: Las reglas de acceso en MAC son establecidas por un administrador o un sistema de seguridad (como SELinux o AppArmor), y los usuarios no tienen la capacidad de cambiarlas. Esto asegura un control estricto y consistente, ideal para entornos de alta seguridad.
- Jerarquía de seguridad: MAC a menudo utiliza niveles o categorías de seguridad (por ejemplo, confidencial, secreto, público) y etiquetas para clasificar recursos y usuarios. El acceso se concede solo si las etiquetas del usuario y el recurso coinciden con las políticas definidas.
- Aplicaciones típicas: Es común en sistemas críticos, como servidores gubernamentales, militares o empresariales, donde la seguridad es prioritaria. También se utiliza en distribuciones Linux como Debian (con AppArmor) y Rocky Linux (con SELinux).
- Restricciones estrictas: MAC limita no solo quién puede acceder a un recurso, sino también qué acciones (lectura, escritura, ejecución) pueden realizarse, basándose en las políticas predefinidas.
- Diferencia con DAC (Discretionary Access Control): En DAC, el propietario de un recurso tiene la libertad de decidir quién puede acceder y qué permisos otorgar, generalmente mediante permisos de lectura, escritura y ejecución (por ejemplo, usando chmod en Linux). En cambio, MAC elimina esta discreción, imponiendo un control obligatorio y centralizado que prioriza la seguridad sobre la flexibilidad, lo que lo hace más adecuado para entornos regulados o sensibles.
- Ventajas de MAC: Proporciona un alto nivel de seguridad y protección contra accesos no autorizados o configuraciones erróneas por parte de usuarios. Es ideal para entornos multiusuario o críticos donde la integridad y confidencialidad de los datos son prioritarias.
- Limitaciones de MAC: Puede ser complejo de configurar y administrar. Reduce la flexibilidad para los usuarios, ya que no pueden modificar las políticas de acceso, lo que podría ser inconveniente en entornos menos estrictos.
AppArmor
AppArmor es un módulo de seguridad de Linux que implementa un sistema de control de acceso obligatorio (MAC) basado en políticas. Permite restringir el acceso de aplicaciones y procesos al sistema operativo mediante perfiles predefinidos, limitando las operaciones y recursos (como archivos, redes, capacidades del kernel y dispositivos) que un programa puede realizar, independientemente de los privilegios del usuario que lo ejecuta.
Características principales:
- Políticas basadas en perfiles: AppArmor utiliza perfiles configurables para especificar qué recursos y operaciones están permitidos o denegados para cada aplicación o proceso. Estos perfiles se basan en nombres de ruta (pathnames) para definir permisos, lo que facilita su configuración en comparación con otros sistemas como SELinux.
- Restricciones independientemente de privilegios: A diferencia de los controles tradicionales basados en permisos de usuario (como DAC), AppArmor impone restricciones incluso si un usuario o proceso tiene privilegios elevados (por ejemplo, root), lo que lo hace ideal para proteger sistemas críticos.
- Desarrollo e integración: Originalmente desarrollado por SUSE Linux, AppArmor es ahora parte del kernel Linux y está ampliamente utilizado en distribuciones como Debian, Ubuntu y, en menor medida, Rocky Linux (donde SELinux es más común). Es una alternativa ligera y fácil de usar frente a SELinux, especialmente para usuarios novatos.
Objetivos y funciones:
- Limitación de acceso: AppArmor restringe las aplicaciones a solo los recursos necesarios para su funcionamiento, previniendo accesos no autorizados a archivos, dispositivos o redes que no deberían utilizar. Esto reduce la superficie de ataque en el sistema.
- Prevención de escalamiento de privilegios: Si una aplicación o proceso es comprometido (por ejemplo, mediante un exploit), AppArmor puede evitar que un atacante acceda a otras partes del sistema, limitando el daño potencial y protegiendo recursos críticos.
- Facilidad de configuración: Comparado con SELinux, AppArmor es más sencillo de implementar y administrar, ya que utiliza nombres de ruta en lugar de etiquetas o contextos de seguridad, lo que lo hace más intuitivo para usuarios sin experiencia avanzada en seguridad.
Ventajas:
- Es más ligero y menos complejo que SELinux, lo que lo hace ideal para distribuciones como Debian en entornos personales o educativos.
- Permite una configuración granular sin requerir un conocimiento profundo de sistemas de seguridad, lo que facilita su uso en proyectos con reglas estrictas, como limitar accesos a servicios como SSH o gestionar recursos en LVM.
- Ofrece protección en tiempo real contra amenazas, como malware o exploits, al restringir operaciones no autorizadas.
Limitaciones:
- Su dependencia en nombres de ruta puede ser una desventaja si los archivos cambian de ubicación o si se requiere una gestión más dinámica, como en sistemas empresariales complejos.
- No es tan flexible ni tan avanzado como SELinux en términos de control granular basado en etiquetas y contextos, lo que lo limita en entornos muy críticos o regulados.
¿Qué es una partición?
Una partición es una división lógica de un disco duro o unidad de almacenamiento (como SSDs o discos externos) que permite segmentar el espacio físico en unidades independientes, cada una con su propio sistema de archivos y propósito. Estas particiones se comportan como discos separados dentro del mismo dispositivo físico, lo que facilita la organización, administración y uso de los datos.
Las particiones se utilizan para:
- Organizar mejor los datos, separando, por ejemplo, el sistema operativo, los archivos de usuario y los datos de aplicaciones.
- Facilitar la administración del espacio de almacenamiento, asignando tamaños específicos a cada sección según las necesidades.
- Mejorar la seguridad, cifrando o restringiendo el acceso a ciertas particiones.
- Soportar múltiples sistemas operativos en un solo disco, cada uno instalado en su propia partición.
Tipos de particiones
Existen diferentes tipos de particiones, cada una con un propósito específico y compatibilidad según la tabla de particiones utilizada (MBR o GPT).
Primaria: Son particiones básicas que pueden alojar un sistema operativo o datos. En discos con la tabla MBR (Master Boot Record), se pueden crear hasta 4 particiones primarias por disco.
Extendida: Es una partición especial que actúa como contenedor para particiones lógicas, permitiendo superar el límite de 4 particiones primarias en discos MBR. No puede almacenar datos directamente, solo sirve como un "recipiente" para particiones lógicas.
Lógica: Se crean dentro de una partición extendida y permiten dividir el espacio restante en más unidades independientes. Son útiles para organizar datos o sistemas adicionales en discos MBR.
EFI (UEFI System Partition): Es una partición especial utilizada en sistemas con la tabla GPT (GUID Partition Table) y UEFI (Unified Extensible Firmware Interface) para almacenar el gestor de arranque (bootloader) y otros datos necesarios para el arranque seguro.
LVM (Logical Volume Manager)
LVM, o Logical Volume Manager, es un sistema de gestión de almacenamiento en Linux que permite crear volúmenes lógicos flexibles y dinámicos en lugar de depender exclusivamente de particiones físicas tradicionales. LVM abstrae el almacenamiento físico (discos duros, SSDs, o particiones) en una estructura jerárquica que facilita la administración, el redimensionamiento y la organización del espacio de almacenamiento, siendo ideal para entornos como servidores o máquinas virtuales.
Características principales:
- Redimensionamiento dinámico: LVM permite aumentar o disminuir el tamaño de los volúmenes lógicos sin necesidad de reiniciar el sistema, siempre que haya espacio disponible en el grupo de volúmenes (VG). Esto es especialmente útil para adaptarse a las necesidades cambiantes de almacenamiento en tiempo real, como en el proyecto donde se requiere flexibilidad para particiones cifradas.
- Snapshots: LVM soporta la creación de instantáneas (snapshots) de los volúmenes lógicos, permitiendo copias de seguridad puntuales del sistema sin interrumpir los servicios en ejecución. Estas instantáneas son útiles para pruebas, restauraciones o recuperación de datos en caso de fallos.
- Agregación de discos: Permite combinar múltiples discos físicos o particiones en un único grupo de volúmenes lógicos, ofreciendo un almacenamiento unificado y escalable. Esto facilita la gestión de recursos en máquinas virtuales con discos asignados dinámicamente, como en VirtualBox o UTM.
-
Aislamiento y organización: LVM permite crear múltiples volúmenes lógicos independientes dentro de un mismo grupo de volúmenes, lo que facilita la segregación de datos (por ejemplo,
/
,/home
,/var
,/swap
) y mejora la seguridad al limitar el acceso entre ellos.
Componentes clave de LVM:
-
PV (Physical Volume - Volumen Físico): Representa el almacenamiento físico subyacente, como discos duros, SSDs o particiones (por ejemplo,
/dev/sda5
). Es el bloque básico que se inicializa para ser gestionado por LVM. - VG (Volume Group - Grupo de Volúmenes): Es un conjunto de uno o más volúmenes físicos combinados en una unidad lógica. Actúa como un "contenedor" que agrupa los PVs para crear volúmenes lógicos.
- LV (Logical Volume - Volumen Lógico): Es la unidad de almacenamiento final que se monta y utiliza como si fuera una partición tradicional. Los LVs se crean dentro de un VG y pueden redimensionarse o cifrarse.
Ventajas:
- Flexibilidad para gestionar el almacenamiento dinámicamente, para crear particiones cifradas (como con LUKS) y ajustar su tamaño según las necesidades.
- Mayor control sobre la organización del almacenamiento, permitiendo separar recursos críticos (como
/boot
, que no debe cifrarse, de/
o/home
, que sí deben estar cifrados). - Compatibilidad con herramientas de seguridad, como el cifrado con LUKS.
Nomenclatura de los discos en Linux
En Linux, los discos de almacenamiento (como discos duros, SSDs, o discos virtuales en máquinas virtuales) se identifican como dispositivos de bloque, que son archivos especiales ubicados en el directorio /dev
. Estos dispositivos siguen una convención estándar de nomenclatura que permite identificar de forma única los discos físicos y sus particiones, facilitando su gestión en sistemas operativos como Debian o Rocky Linux.
La nomenclatura más común para discos en Linux es /dev/sdxn
, donde:
-
/dev/
: Es el directorio raíz donde se almacenan los dispositivos especiales en el sistema, accesibles como archivos. - sd: Es el prefijo que identifica discos basados en SCSI (Small Computer System Interface) o SATA, comúnmente usado para discos físicos o virtuales (por ejemplo, discos en VirtualBox o UTM).
- hd (para discos IDE, aunque obsoletos en sistemas modernos).
- nvme (para discos NVMe en sistemas modernos con SSDs de alta velocidad).
-
x
: Es una letra que identifica el disco físico o virtual, comenzando desde a para el primer disco (/dev/sda
), b para el segundo (/dev/sdb
), y así sucesivamente. -
n
: Es un número que representa la partición dentro de un disco específico, comenzando desde 1 (por ejemplo,/dev/sda1
para la primera partición del primer disco,/dev/sda2
para la segunda,/dev/sdb1
para la primera partición del segundo disco, etc.).
En máquinas virtuales, VirtualBox o UTM pueden asignar discos virtuales (como archivos .vdi o .qcow2) que se presentan como /dev/sda
, /dev/sdb
, etc., siguiendo la misma convención.
Estructura jerárquica del sistema de archivos en Linux
En Linux, todo el sistema de archivos se organiza en una estructura jerárquica con el directorio raíz (/
) como punto de partida. Discos, particiones y dispositivos se montan bajo este directorio, formando un árbol de directorios que facilita la organización, administración y acceso a los datos. Esta estructura es estándar en distribuciones como Debian y Rocky Linux, es crucial para gestionar correctamente las particiones cifradas con LVM, como /boot, /, /home, y /swap.
-
/
(Directorio raíz): Es el directorio principal y punto de partida de toda la jerarquía del sistema de archivos. Contiene subdirectorios esenciales y sirve como base para montar discos, particiones y dispositivos. -
/home
: Almacena los archivos personales, configuraciones y datos de los usuarios (por ejemplo, /home/usuario). Es un directorio crítico que, en el proyecto, debe estar en una partición o volumen lógico separado y cifrado para mejorar la seguridad. -
/var
: Contiene datos variables que cambian dinámicamente durante la operación normal del sistema, como archivos de registro (logs), cachés, correos temporales, y datos de aplicaciones. Subdirectorios importantes incluyen: -
/var/log
: Almacena registros del sistema (por ejemplo,/var/log/syslog
,/var/log/auth.log
), esenciales para detectar problemas de seguridad o errores. -
/var/cache
: Almacena cachés de aplicaciones. -
/var/tmp
: Almacena datos temporales más persistentes que/tmp
. -
/etc
: Almacena archivos de configuración del sistema y de aplicaciones (por ejemplo,/etc/ssh/sshd_config
para SSH,/etc/apparmor.d
para AppArmor). -
/bin
: Contiene binarios esenciales del sistema necesarios para el funcionamiento básico, accesibles para todos los usuarios (por ejemplo, ls, cat, cp). Estos ejecutables son críticos para arrancar y mantener el sistema. -
/sbin
: Almacena binarios y comandos administrativos esenciales, principalmente para el superusuario (root), como fdisk, cryptsetup, o lvm. -
/dev
: Contiene archivos de dispositivos que representan discos duros, unidades de CD/DVD, interfaces de red, y otros dispositivos físicos o virtuales (por ejemplo,/dev/sda
,/dev/sda1
). -
/mnt
: Es un punto de montaje temporal para sistemas de archivos externos o discos adicionales, usado por administradores para montar manualmente dispositivos. -
/media
: Similar a/mnt
, pero gestionado automáticamente por el sistema para montar dispositivos removibles, como USB o CD-ROM. -
/swap
: Representa el espacio de intercambio (swap), que actúa como una extensión de la memoria RAM. Cuando la memoria física se llena, el sistema puede mover datos no utilizados temporalmente al swap para liberar espacio en la RAM, mejorando el rendimiento en máquinas virtuales con recursos limitados,/swap
debe estar en un volumen lógico y puede cifrarse opcionalmente. -
/boot
: Contiene archivos necesarios para el arranque del sistema, como el kernel (por ejemplo,/boot/vmlinuz
), el cargador de arranque GRUB (por ejemplo,/boot/grub
), e imágenes iniciales./boot
debe ser una partición o volumen no cifrado (como/dev/sda1
), ya que los cargadores de arranque no pueden leer particiones cifradas. -
/tmp
: Almacena archivos temporales creados por el sistema operativo y aplicaciones. Estos archivos suelen tener una vida corta y pueden eliminarse al reiniciar el sistema o después de un período de inactividad. Es útil para operaciones transitorias, pero no debe usarse para datos permanentes. -
/srv
: Está diseñado para almacenar datos relacionados con servicios específicos ofrecidos por el sistema, como servidores web, FTP o bases de datos. Los datos se organizan en subdirectorios basados en el servicio (por ejemplo,/srv/www
para un servidor web,/srv/ftp
para un servidor FTP).
Importancia y mantenimiento:
Es fundamental revisar regularmente los registros en /var/log
(por ejemplo, /var/log/syslog
, /var/log/auth.log
) para detectar problemas de seguridad, errores del sistema o actividades sospechosas. Esto es para garantizar que las políticas de seguridad (como SSH, firewall, y AppArmor/SELinux) funcionen correctamente.
Encriptación de una partición
La encriptación de particiones es una técnica de seguridad utilizada para proteger los datos almacenados en discos duros, SSDs u otros dispositivos de almacenamiento mediante el cifrado del sistema de archivos o de las particiones específicas. Este proceso transforma los datos en un formato ilegible (cifrado) que solo puede ser descifrado con una clave o contraseña válida, garantizando la confidencialidad y seguridad de la información.
Propósito y beneficios:
- Confidencialidad de los datos: La encriptación asegura que los datos almacenados en una partición no puedan ser leídos o manipulados por personas no autorizadas, incluso si el dispositivo físico es robado o perdido.
- Seguridad física: Protege contra accesos no autorizados en caso de robo, pérdida o acceso físico al disco, como en entornos virtuales o servidores.
-
Cumplimiento de leyes de protección de datos: Ayuda a cumplir con regulaciones como el GDPR (Reglamento General de Protección de Datos) o normativas locales, asegurando que los datos sensibles (por ejemplo, en
/home
o/
) estén protegidos. - Prevención de accesos no autorizados: Impide que atacantes o usuarios malintencionados accedan a los datos sin la clave o contraseña, reduciendo riesgos en sistemas críticos.
Métodos de encriptación en Linux:
En distribuciones como Debian y Rocky Linux, la encriptación de particiones se implementa generalmente con herramientas como LUKS (Linux Unified Key Setup), que es un estándar para cifrar discos y particiones en Linux.
El proceso típico incluye:
- Crear un volumen físico (PV) o partición (por ejemplo,
/dev/sda5
). - Cifrarlo con
cryptsetup luksFormat /dev/sda5
, estableciendo una contraseña o clave. - Abrir el volumen cifrado con
cryptsetup luksOpen /dev/sda5 sda5_crypt
para mapearlo como un dispositivo cifrado. - Usar LVM para crear volúmenes lógicos (LVs) sobre el dispositivo cifrado, como root para
/
o home para/home
, que luego se montan en la jerarquía del sistema de archivos.
Top comments (0)