Cómo comprobar si un espacio de nombres del kernel está activo en Linux

LinuxLinuxBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio, aprenderás cómo comprobar si los espacios de nombres del kernel (kernel namespaces) están activos en Linux. Exploraremos diferentes métodos para identificar y verificar la presencia de espacios de nombres, que son cruciales para el aislamiento de procesos y la contenerización.

Comenzarás utilizando el comando lsns para listar los diversos espacios de nombres en tu sistema, comprendiendo sus tipos y los procesos asociados. A continuación, examinarás los enlaces de espacios de nombres dentro del directorio /proc/self/ns para ver cómo los procesos están vinculados a espacios de nombres específicos. Finalmente, verificarás específicamente los espacios de nombres de red (network namespaces) utilizando el comando ip netns, una herramienta común para gestionar el aislamiento de red.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/SystemInformationandMonitoringGroup(["System Information and Monitoring"]) linux(("Linux")) -.-> linux/RemoteAccessandNetworkingGroup(["Remote Access and Networking"]) linux(("Linux")) -.-> linux/PackagesandSoftwaresGroup(["Packages and Softwares"]) linux(("Linux")) -.-> linux/BasicSystemCommandsGroup(["Basic System Commands"]) linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux/BasicSystemCommandsGroup -.-> linux/read("Input Reading") linux/BasicFileOperationsGroup -.-> linux/ls("Content Listing") linux/SystemInformationandMonitoringGroup -.-> linux/ps("Process Displaying") linux/RemoteAccessandNetworkingGroup -.-> linux/ip("IP Managing") linux/PackagesandSoftwaresGroup -.-> linux/apt("Package Handling") subgraph Lab Skills linux/read -.-> lab-558722{{"Cómo comprobar si un espacio de nombres del kernel está activo en Linux"}} linux/ls -.-> lab-558722{{"Cómo comprobar si un espacio de nombres del kernel está activo en Linux"}} linux/ps -.-> lab-558722{{"Cómo comprobar si un espacio de nombres del kernel está activo en Linux"}} linux/ip -.-> lab-558722{{"Cómo comprobar si un espacio de nombres del kernel está activo en Linux"}} linux/apt -.-> lab-558722{{"Cómo comprobar si un espacio de nombres del kernel está activo en Linux"}} end

Listar espacios de nombres con lsns

En este paso, aprenderás cómo listar los espacios de nombres (namespaces) presentes en tu sistema utilizando el comando lsns. Los espacios de nombres son un concepto fundamental en Linux que proporcionan aislamiento para varios recursos del sistema, como procesos, interfaces de red, puntos de montaje, etc. Este aislamiento es clave para tecnologías como los contenedores.

El comando lsns es parte del paquete util-linux y se utiliza para listar información sobre los espacios de nombres en tu sistema.

Primero, asegúrate de que el paquete util-linux esté instalado. Aunque generalmente está presente, es una buena práctica comprobarlo. Podemos usar apt para esto.

Abre tu terminal si no está abierta. Puedes encontrar el icono de Xfce Terminal en el lado izquierdo de tu escritorio.

Ahora, escribe el siguiente comando para actualizar la lista de paquetes:

sudo apt update

Presiona Enter. Puedes ver una salida similar a esta:

Hit:1 http://archive.ubuntu.com/ubuntu jammy InRelease
Get:2 http://archive.ubuntu.com/ubuntu jammy-updates InRelease [119 kB]
...
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
...

A continuación, instalemos util-linux. Escribe el siguiente comando y presiona Enter:

sudo apt install util-linux

Puedes ver una salida que indique que el paquete ya está instalado, lo cual está bien. Si se instala, verás barras de progreso y una confirmación.

Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
util-linux is already the newest version (x.xx.x-xu).
0 upgraded, 0 newly installed, 0 to remove and xx not upgraded.

Ahora que estamos seguros de que lsns está disponible, usémoslo para listar los espacios de nombres. Escribe el siguiente comando y presiona Enter:

lsns

Verás una salida similar a esta, que muestra diferentes tipos de espacios de nombres y los procesos asociados a ellos:

        NS TYPE   NPROCS   PID PPID       CMD
4026531835 cgroup      1     1    0     /sbin/init
4026531836 pid         1     1    0     /sbin/init
4026531837 user        1     1    0     /sbin/init
4026531838 uts         1     1    0     /sbin/init
4026531839 ipc         1     1    0     /sbin/init
4026531840 mnt         1     1    0     /sbin/init
4026531841 net         1     1    0     /sbin/init
4026532720 cgroup     10   700  699 /usr/lib/xfce4/xfconf/xfconfd
4026532721 pid        10   700  699 /usr/lib/xfce4/xfconf/xfconfd
4026532722 user       10   700  699 /usr/lib/xfce4/xfconf/xfconfd
4026532723 uts        10   700  699 /usr/lib/xfce4/xfconf/xfconfd
4026532724 ipc        10   700  699 /usr/lib/xfce4/xfconf/xfconfd
4026532725 mnt        10   700  699 /usr/lib/xfce4/xfconf/xfconfd
4026532726 net        10   700  699 /usr/lib/xfce4/xfconf/xfconfd
...

La salida muestra columnas como NS (Identificador de espacio de nombres), TYPE (Tipo de espacio de nombres, por ejemplo, cgroup, pid, user, uts, ipc, mnt, net), NPROCS (Número de procesos en el espacio de nombres), PID (Identificador de proceso), PPID (Identificador del proceso padre) y CMD (Comando).

Este comando te da una visión general de los espacios de nombres activos en tu sistema y los procesos que se ejecutan dentro de ellos.

Haz clic en Continuar para pasar al siguiente paso.

Verificar enlaces de espacios de nombres en /proc/self/ns

En el paso anterior, utilizaste lsns para ver una lista de espacios de nombres (namespaces) en el sistema. Ahora, exploremos cómo un proceso en ejecución se relaciona con estos espacios de nombres.

Cada proceso en Linux tiene un directorio especial en /proc/<pid>/ns/ que contiene enlaces simbólicos a los espacios de nombres a los que pertenece. El directorio /proc/self/ es un enlace simbólico al directorio /proc/<pid>/ del proceso en ejecución actualmente (en este caso, tu sesión de terminal).

Listemos el contenido del directorio /proc/self/ns/ para ver los enlaces de espacios de nombres para tu proceso de terminal actual.

Escribe el siguiente comando en tu terminal y presiona Enter:

ls -l /proc/self/ns/

Verás una salida similar a esta:

total 0
lrwxrwxrwx 1 labex labex 0 Jul 24 09:00 cgroup -> "cgroup:[4026532720]"
lrwxrwxrwx 1 labex labex 0 Jul 24 09:00 ipc -> "ipc:[4026532724]"
lrwxrwxrwx 1 labex labex 0 Jul 24 09:00 mnt -> "mnt:[4026532725]"
lrwxrwxrwx 1 labex labex 0 Jul 24 09:00 net -> "net:[4026532726]"
lrwxrwxrwx 1 labex labex 0 Jul 24 09:00 pid -> "pid:[4026532721]"
lrwxrwxrwx 1 labex labex 0 Jul 24 09:00 user -> "user:[4026532722]"
lrwxrwxrwx 1 labex labex 0 Jul 24 09:00 uts -> "uts:[4026532723]"

Cada línea representa un tipo diferente de espacio de nombres (cgroup, ipc, mnt, net, pid, user, uts) y es un enlace simbólico (->) que apunta al archivo real del espacio de nombres en la representación interna del kernel. El número entre corchetes (por ejemplo, [4026532720]) es el ID único de ese espacio de nombres específico, que viste en la salida del comando lsns en el paso anterior.

Esto te muestra que tu proceso de terminal actual es parte de varios espacios de nombres diferentes, lo que le proporciona su propia vista aislada de ciertos recursos del sistema.

Comprender /proc/<pid>/ns/ es crucial para depurar e inspeccionar la configuración de espacios de nombres de procesos en ejecución, especialmente en entornos contenerizados.

Haz clic en Continuar para continuar.

Verificar espacios de nombres de red con ip netns

En los pasos anteriores, aprendiste sobre los espacios de nombres (namespaces) en general y cómo ver los enlaces de espacios de nombres para un proceso. Ahora, centrémonos específicamente en los espacios de nombres de red y cómo administrarlos utilizando el comando ip.

Los espacios de nombres de red proporcionan una pila de red separada para los procesos, incluyendo interfaces de red, direcciones IP, tablas de enrutamiento y reglas de firewall. Esto es fundamental para aislar el tráfico de red, como se utiliza en contenedores y redes virtuales.

El comando ip es una herramienta poderosa para la configuración de red en Linux. El subcomando ip netns se utiliza específicamente para administrar los espacios de nombres de red.

Para listar los espacios de nombres de red actualmente configurados, utiliza la opción list con ip netns.

Escribe el siguiente comando en tu terminal y presiona Enter:

ip netns list

En un entorno típico de LabEx, que a menudo es un contenedor, es posible que inicialmente no veas listados ningún espacio de nombres de red creado explícitamente por este comando. La salida podría estar vacía:

Esto se debe a que el espacio de nombres de red principal en el que se está ejecutando tu terminal es el predeterminado, y ip netns list normalmente muestra los espacios de nombres que se han creado y registrado explícitamente.

Sin embargo, todavía puedes ver el espacio de nombres de red al que pertenece tu proceso actual examinando el enlace simbólico /proc/self/ns/net, como hiciste en el paso anterior. El comando ip netns es más para administrar los espacios de nombres de red nombrados que podrías crear con fines de aislamiento específicos.

Si bien no crearemos nuevos espacios de nombres de red en este laboratorio introductorio, es importante entender que ip netns list es el comando para verlos para futuros aprendizajes sobre aislamiento de red.

Ahora has explorado los espacios de nombres utilizando lsns, examinado los enlaces de espacios de nombres específicos del proceso en /proc y aprendido el comando para listar los espacios de nombres de red.

Haz clic en Continuar para completar el laboratorio.

Resumen

En este laboratorio, aprendimos cómo verificar los espacios de nombres activos del kernel en Linux. Comenzamos utilizando el comando lsns para listar los diversos espacios de nombres presentes en el sistema, comprendiendo que los espacios de nombres (namespaces) proporcionan aislamiento para los recursos del sistema y son fundamentales para las tecnologías de contenedores. Aseguramos que el paquete util-linux, que contiene lsns, estuviera instalado utilizando apt.

Después de listar los espacios de nombres con lsns, los pasos posteriores, que no se detallaron completamente en el contenido proporcionado, implicarían verificar los enlaces de espacios de nombres dentro del directorio /proc/self/ns y verificar específicamente los espacios de nombres de red utilizando el comando ip netns. Estos métodos ofrecen formas alternativas de inspeccionar y confirmar la presencia y el estado de diferentes tipos de espacios de nombres del kernel.