Núcleo (Kernel)
Gestión de Procesos
El núcleo es el componente central de un sistema operativo que actúa como intermediario entre el hardware y el software. En Linux, el núcleo es responsable de gestionar los recursos del sistema y proporcionar servicios esenciales a las aplicaciones. Una de las funciones más críticas del núcleo es la gestión de procesos. Un proceso es un programa en ejecución, y el núcleo se encarga de la creación de procesos, lo que implica asignar un identificador de proceso (PID) único y reservar espacio en la memoria para el proceso cuando un usuario o una aplicación inicia un programa. Mediante un planificador (scheduler) que decide qué procesos deben ejecutarse y en qué orden, utilizando algoritmos de planificación como Round Robin, FIFO o el algoritmo de planificación por prioridades para asignar tiempo de CPU a los procesos. Cuando ha terminado su tarea, el núcleo libera los recursos que utilizaba, como la memoria y el tiempo de CPU, en un proceso conocido como “recolección de procesos”. También permite la multitarea, lo que significa que múltiples procesos pueden ejecutarse simultáneamente. Para lograr esto, utiliza técnicas de conmutación de contexto (context switching) que permiten cambiar rápidamente entre procesos, dando la impresión de que se están ejecutando al mismo tiempo.

Gestión de Memoria
Se encarga de la asignación de memoria, donde el núcleo asigna un bloque para el uso de un proceso cuando se crea. Esto incluye la memoria para el código del programa, los datos y la pila. Cuando un proceso finaliza, el núcleo libera la memoria que había asignado. Para optimizar el uso de la memoria, el núcleo utiliza un sistema de paginación, dividiendo la memoria en páginas (generalmente de 4 KB) y moviendo páginas entre la memoria RAM y la unidad de almacenamiento (swap) según sea necesario. Esto permite que el sistema ejecute más procesos de los que la memoria física puede contener.


Gestión de Dispositivos
La gestión de dispositivos es otra función clave del núcleo, que se comunica con el hardware a través de controladores (drivers), como discos duros, impresoras y tarjetas de red, tiene un controlador que traduce las solicitudes del sistema operativo en comandos que el hardware puede entender. Estos controladores pueden ser parte del núcleo o cargarse como módulos en tiempo de ejecución. Los dispositivos pueden enviar interrupciones al núcleo para indicar que necesitan atención, como cuando un disco duro ha terminado de leer datos. El núcleo responde a estas interrupciones, deteniendo temporalmente el proceso actual y atendiendo la solicitud del dispositivo.

Sistema de Archivos
Es la forma en que organiza y gestiona los datos en dispositivos de almacenamiento. Utiliza una estructura jerárquica que comienza desde la raíz (/). Lo que permite una organización lógica de los datos. Es compatible con varios sistemas de archivos, como ext4, XFS, Btrfs y otros.
/home son los directorios personales de los usuarios, permitiendo que cada uno almacene sus archivos y configuraciones.
/var contiene archivos como registros del sistema (logs), archivos de correo y datos temporales, también algunas aplicaciones o servicios almacenan bases de datos en /var/lib.
/tmp almacena archivos temporales que pueden ser creados por aplicaciones y procesos.
/usr contiene aplicaciones y archivos de usuario, incluyendo /usr/bin (aplicaciones de usuario), /usr/lib (bibliotecas) y /usr/share (archivos compartidos).
/lib se encuentran las bibliotecas esenciales necesarias para ejecutar los binarios en /bin y /sbin.
/dev contiene archivos de dispositivo que representan el hardware en el sistema, unidad de almacenamiento, impresoras y terminales.
/boot contiene los archivos necesarios para el arranque del sistema, incluyendo el núcleo (kernel) y otros archivos de configuración como el GRUB.
/etc contiene archivos de configuración del sistema y de las aplicaciones, configuración de red y los usuarios del sistema.
/bin contiene los binarios esenciales (ejecutables) necesarios para el sistema (ls, cp, mv, entre otros).
/sbin es similar a /bin, pero para (root) y contiene binarios esenciales para la administración del sistema
/mnt es un punto de montaje temporal donde se pueden usar sistemas de archivos adicionales, como unidades de almacenamiento externos o unidades USB.
/opt se utiliza para instalar aplicaciones de software adicionales que no forman parte del sistema base, comúnmente utilizado para software de terceros.
/root es el directorio personal del superusuario (root).
/run contiene datos de ejecución de procesos y servicios que se generan durante el tiempo de ejecución del sistema, siendo temporal y borrándose al reiniciar el sistema.
/proc y /sys son sistemas de archivos virtuales que proporcionan información sobre los procesos en ejecución, el estado del sistema y la configuración del hardware, generando archivos dinámicamente por el núcleo y no ocupan espacio en disco.
Permisos de archivos
Tiene un conjunto de permisos que se aplican a tres categorías el propietario, que es el usuario que creó el archivo, el grupo, que es un grupo de usuarios que pueden tener permisos específicos sobre el archivo, y otros, que son todos los demás usuarios que no son el propietario ni pertenecen al grupo. Los tipos de permisos incluyen lectura (r), que permite leer el contenido del archivo o listar el contenido del directorio, escritura (w), que permite modificar el contenido del archivo o agregar/eliminar en un directorio, y ejecución (x), que permite ejecutar un archivo como un programa o acceder a un directorio. Se representan en forma de una cadena de 10 caracteres, donde el primer carácter indica el tipo de archivo ( - para archivos regulares, d para directorios, b archivo especial de bloque, manejan datos en bloques. c Archivo especial de caracteres, manejan datos en flujos de caracteres. l enlace simbolico, apunta a otro archivo o directorio. p tubo nombrado(named pipe), para la comunicación entre procesos. s socket. para la comunicación entre procesos en la misma máquina).
Los siguientes nueve caracteres se agrupan en tres conjuntos de tres, representando los permisos para el propietario, el grupo y otros. Por ejemplo, en la representación drwxr-xr-x, el primer carácter d indica que es un directorio, rwx muestra que el propietario tiene permisos de lectura, escritura y ejecución, r-x indica que el grupo tiene permisos de lectura y ejecución, y r-x muestra que otros usuarios solo tienen permisos de lectura y ejecución.


Tambien El bit SUID permite que un archivo se ejecute con los permisos del propietario. Esto es útil para programas que necesitan permisos elevados para realizar ciertas tareas.-rwsr-xr-x la “s” indica que el bit SUID está establecido. -rwxr-sr-x En este caso, “s” esta en la posición del grupo indica que el bit SGID (Set Group ID) está establecido.
El Sticky Bit se utiliza principalmente en directorios y permite que solo el propietario de un archivo dentro de ese directorio pueda eliminar o renombrar ese archivo, incluso si otros usuarios tienen permisos de escritura en el directorio. drwxrwxrwt la “t” Esto es útil en directorios compartidos, como /tmp, donde muchos usuarios pueden tener acceso.
Además estan los atributos que controlan el comportamiento de los archivos más allá de los permisos. Estos atributos se gestionan mediante los comandos lsattr y chattr. Algunos de los atributos comunes incluyen a, permite que solo se puedan agregar datos al archivo (append only), i, hace que el archivo sea inmutable, impide que se modifique, elimine o renombre, s, asegura que al eliminar el archivo, se sobrescriba con ceros, u, guarda el contenido del archivo cuando se elimina, permitiendo su recuperación, c, comprime automáticamente el archivo en el disco, e, indica que el archivo está utilizando extents para mapear bloques en el disco.


Usuarios
Las aplicaciones y los procesos que interactúan con los usuarios, está separado del núcleo (kernel) para proporcionar un entorno controlado. Uno de los componentes clave del usuario es shell, que actúa como una interfaz que permite interactuar con el sistema operativo a través de comandos. Interpretando las instrucciones del usuario y ejecutándolas. Existen varios tipos de shells, siendo Bash (Bourne Again SHell) el más común en muchas distribuciones de Linux, ofrece características como la expansión de comandos, que permite ejecutar comandos dentro de otros comandos, guarda un registro de los comandos ejecutados para reutilizarlos fácilmente y las variables de entorno, que permiten definir y utilizar variables que afectan el comportamiento del shell y de las aplicaciones. Otra shell popular es Zsh (Z Shell), que es más avanzado que Bash y cuenta con características adicionales como autocompletado mejorado, temas, personalización y globbing avanzado, que permite patrones más complejos para la expansión de nombres de archivos.

Las funciones del shell permite ejecutar comandos para realizar tareas como gestionar archivos, ejecutar programas, configurar el sistema y crear scripts de shell, entre otras.
Las aplicaciones, pueden ser de línea de comandos o gráficas, en línea de comandos se ejecutan por medio de la terminal, por ejmeplo ls, que lista los archivos y directorios, cp, que copia archivos y directorios de una ubicación a otra, mv, que mueve o renombra archivos y directorios, grep, que busca patrones en archivos de texto y editores de texto como (nano, vim, nvim), que permiten a los usuarios crear y modificar archivos de texto. En entorno gráficas tienen una interfaz de usuario (GUI) por ejemplo aplicaciones gráficas incluyen navegadores web como Firefox, Brave o Librewolf, editores de imágenes como GIMP o Krita, y suites de oficina como LibreOffice u OnlyOffice.

https://linuxcommandlibrary.com/commands
Las aplicaciones interactúan a través de llamadas al sistema (system calls) para realizar operaciones como leer y escribir archivos, crear procesos y comunicarse con dispositivos. Esto permite que las aplicaciones funcionen sin la necesidad de acceder directamente al hardware. Las bibliotecas son colecciones de funciones y rutinas que las aplicaciones pueden utilizar para realizar tareas comunes.

https://man7.org/linux/man-pages/man2/syscalls.2.html
Gestión de Paquetes
Permite a los usuarios instalar, actualizar y eliminar software de manera eficiente. Cada distribución puede utilizar diferentes sistemas de gestión de paquetes, que son herramientas diseñadas para manejar la instalación y mantenimiento de software.
Uno de los gestores de paquetes más comunes es APT (Advanced Package Tool), que se utiliza principalmente en distribuciones basadas en Debian, como Ubuntu y Linux Mint. Gestiona paquetes en formato .deb. En Kali Linux utiliza un modelo de rolling release, mientras que Debian utiliza repositorios estáticos organizados en secciones como main, contrib y non-free. Ubuntu, al estar basado en Debian, también utiliza repositorios estáticos, ofreciendo versiones LTS y regulares.
DNF (Dandified YUM), que se utilizan en distribuciones basadas en Red Hat, como CentOS, Fedora y RHEL. Gestiona los paquetes en formato .rpm.
Pacman es otro gestor de paquetes, utilizado en Arch Linux y sus derivados, como Manjaro. Pacman gestiona paquetes en formato .pkg.tar.zst. Utiliza mirrors para sus repositorios.
Por último, Zypper es el gestor de paquetes utilizado en openSUSE. Este gestor también maneja paquetes en formato .rpm.

Interfaz Gráfica de Usuario (GUI)
Los entornos de escritorio proporcionan la interfaz gráfica a través de la cual los usuarios interactúan con el sistema operativo. Entre los entornos de escritorio más populares se encuentra GNOME, conocido por su diseño limpio y moderno. Ofrece una interfaz simple y fácil de usar, lo hace ideal para “principiantes“. Soporta extensiones que permiten personalizar el entorno.
Otro entorno destacado es KDE Plasma, que es altamente personalizable y en sus características. Su interfaz tradicional similar a Windows, facilita la transición para nuevos usuarios. Ofrece una amplia gama de opciones de personalización, desde el aspecto visual hasta la funcionalidad, e incluye aplicaciones integradas como Dolphin (gestor de archivos) y Konsole (terminal).
Para aquellos que buscan un entorno más ligero, XFCE es una excelente opción. Este entorno de escritorio es rápido y eficiente, ideal para las pc más antiguas o con recursos limitados. Presenta una interfaz sencilla que prioriza la velocidad y el rendimiento, aunque todo se puede personalizar. Consumiendo menos recursos en comparación con GNOME y KDE, lo hace adecuado para hardware más antiguo.
Por último, Cinnamon es un entorno de escritorio derivado de GNOME, desarrollado por el equipo de Linux Mint. Combina la familiaridad de GNOME 2 con características modernas, ofreciendo una interfaz intuitiva y fácil de usar, ideal para usuarios que prefieren un entorno clásico. Cinnamon también proporciona opciones de personalización y una buena selección de aplicaciones.

Servicios y Demonios
Demonios
Un demonio (daemon) es un programa que se ejecuta en segundo plano y no está directamente controlado por el usuario. Estos procesos suelen iniciar automáticamente al arrancar el sistema y continúan ejecutándose hasta que se apagan o se reinician.
Incluye la gestión de recursos del sistema, como la impresión a través de CUPS, la administración de la red mediante NetworkManager, o la programación de tareas con cron. Muchos demonios están diseñados para escuchar solicitudes de otros programas o servicios, por ejemplo, un servidor web como Apache o Nginx actúa como un demonio que escucha las solicitudes HTTP de los navegadores.
Algunos ejemplos de demonios comunes incluyen sshd, que es el demonio del servidor SSH que permite conexiones remotas seguras, httpd, que son demonios de servidores web que gestionan las solicitudes HTTP, cron, que ejecuta tareas programadas, y systemd, que, aunque es un sistema de inicio, también actúa como un gestor de demonios, controlando su inicio y supervisión.
Gestión de Servicios
El sistema más utilizado para esta gestión en muchas distribuciones es systemd. Es un sistema de inicio y gestor de servicios, una de sus características más destacadas es el uso de “unidades”, que son configuraciones que permiten gestionar diferentes tipos de servicios, montajes, socket y más. Cada unidad tiene un archivo de configuración que define su comportamiento, lo que facilita la personalización y el control de los servicios. Su capacidad para iniciar servicios de manera paralela, acelera el proceso de arranque del sistema, permitiendo que múltiples servicios se inicien simultáneamente en lugar de uno tras otro. Supervisa los servicios en ejecución, lo que significa que puede reiniciarlos automáticamente si detecta que han fallado, garantizando así una mayor estabilidad y disponibilidad del sistema. Tambien captura mensajes de log (journald) de los servicios y del propio sistema, lo que facilita la depuración y el monitoreo, estos registros sirven para diagnosticar problemas y obtener información sobre el estado de los servicios en ejecución.

Seguridad en Linux
Limpieza de Paquetes Innecesarios
Eliminar Paquetes Huérfanos
Muchos paquetes se instalan como dependencias, pero al desinstalar el software principal, estas dependencias quedan huérfanas.
sudo pacman -Rns $(pacman -Qdtq)
Limpiar caché de paquetes
Eliminar todas las versiones antiguas
sudo pacman -Sc
Eliminar toda la caché
sudo pacman -Scc
Limpiar caché de versiones antiguas de paquetes
Mantener solo las versiones más recientes
sudo paccache -r
Configuración del Firewall
sudo pacman -S ufw
Habilitar y Activar UFW
sudo systemctl enable ufw
sudo systemctl start ufw
Reglas
sudo ufw default deny incoming
Permitir todo el tráfico saliente por defecto:
sudo ufw default allow outgoing
Habilitar SELinux o AppArmor
SELinux
Para activar SELinux en modo enforcing
sudo setenforce 1
AppArmor
sudo pacman -S apparmor
sudo systemctl enable apparmor
sudo systemctl start apparmor
Implementar Fail2Ban
sudo pacman -S fail2ban
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
Configurar Autenticación de Dos Factores (2FA)
sudo pacman -S pam_google_authenticator
Configura /etc/pam.d/ segun el 2FA
Usar un Kernel Endurecido
sudo pacman -S linux-hardened
Habilitar y Configurar auditd
sudo pacman -S audit
sudo systemctl enable auditd
sudo systemctl start auditd
Configurar SSH para Seguridad Adicional
Editar el archivo de configuración de SSH (/etc/ssh/sshd_config) para deshabilitar acceso root
PermitRootLogin no
Deshabilitar autenticación por contraseña
PasswordAuthentication no
Configurar un puerto no estándar
Port 2200 # O cualquier puerto de tu elección
Cifrar el Disco Duro
Utiliza LUKS (Linux Unified Key Setup) para cifrar el disco durante la instalación de Arch Linux.
Hacer copias de seguridad regulares utilizando herramientas como rsync, Bacula.
Configuración de Red
Deshabilitar Redireccionamientos ICMP
sudo sysctl -w net.ipv4.conf.all.send_redirects=0
sudo sysctl -w net.ipv4.conf.default.send_redirects=0
Deshabilitar Reenvío de IP
sudo sysctl -w net.ipv4.ip_forward=0
Ignorar Peticiones de Eco ICMP
sudo sysctl -w net.ipv4.icmp_echo_ignore_broadcast=1
sudo sysctl -w net.ipv4.icmp_ignore_bogus_error_responses=1
Habilitar Filtro de Ruta Inversa
sudo sysctl -w net.ipv4.conf.all.rp_filter=1
sudo sysctl -w net.ipv4.conf.default.rp_filter=1
Habilitar TCP SYN Cookies
sudo sysctl -w net.ipv4.tcp_syncookies=1
Actualizar Rutas de IP
sudo sysctl -w net.ipv4.route.flush=1
Deshabilita la respuesta a solicitudes de “ping” ICMP y la exposición de información del sistema
sudo sysctl -w net.ipv4.icmp_echo_ignore_all=1
sudo sysctl -w kernel.dmesg_restrict=1
You must be logged in to post a comment.