Me pregunto qué significa exactamente la función "Soporte de espacios de nombres" en el kernel de Linux. Estoy usando el kernel 3.11.1 (el kernel estable más nuevo en este momento).
Si decido desactivarlo, ¿notaré algún cambio en mi sistema?
Y en caso de que alguien decida hacer uso de los espacios de nombres, ¿es suficiente compilar NAMESPACES=Y
? en el núcleo, o también necesita herramientas de espacio de usuario?
Respuesta aceptada:
En pocas palabras, los espacios de nombres proporcionan una forma de construir un sistema Linux virtual dentro de un sistema Linux más grande. Esto es diferente de ejecutar una máquina virtual que se ejecuta como un proceso sin privilegios:la máquina virtual aparece como un proceso único en el host, mientras que los procesos que se ejecutan dentro de un espacio de nombres todavía se ejecutan en el sistema host.
Un sistema virtual que se ejecuta dentro de un sistema más grande se denomina contenedor. La idea de un contenedor es que los procesos que se ejecutan dentro del contenedor crean que son los únicos procesos en el sistema. En particular, el usuario root dentro del contenedor no tiene privilegios de root fuera del contenedor (tenga en cuenta que esto solo es cierto en las versiones más recientes del kernel).
Los espacios de nombres virtualizan una característica a la vez. Algunos ejemplos de tipos de espacios de nombres son:
- Espacios de nombres de usuario: esto permite que los procesos se comporten como si se estuvieran ejecutando como usuarios diferentes dentro y fuera del espacio de nombres. En particular, los procesos que se ejecutan como UID 0 dentro del espacio de nombres tienen privilegios de superusuario solo con respecto a los procesos que se ejecutan en el mismo espacio de nombres.
Desde el kernel de Linux 3.8, los usuarios sin privilegios pueden crear espacios de nombres de usuario. Esto permite que un usuario común haga uso de funciones que están reservadas para root (como cambiar tablas de enrutamiento o configurar capacidades). - Espacio de nombres PID: los procesos dentro de un espacio de nombres PID no pueden matar o rastrear procesos fuera de ese espacio de nombres.
- Montar espacios de nombres: esto permite que los procesos tengan su propia vista del sistema de archivos. Esta vista puede ser una vista parcial, lo que permite ocultar algunas partes del sistema de archivos y recomponer partes para que los árboles de directorios aparezcan en diferentes lugares. Los espacios de nombres de montaje generalizan la función chroot tradicional de Unix, que permite que los procesos se restrinjan a un subárbol en particular.
- Espacios de nombres de red:permiten la separación de recursos de red (dispositivos de red) y, por lo tanto, mejoran el aislamiento de procesos.
Los espacios de nombres dependen del kernel para proporcionar aislamiento entre espacios de nombres. Esto es bastante complicado de hacer bien, por lo que aún puede haber errores de seguridad por ahí. El riesgo de errores de seguridad sería la razón principal para no habilitar la función. Otra razón para no habilitarlo sería cuando está creando un kernel pequeño para un dispositivo integrado. En un kernel de propósito general que instalaría en un servidor o estación de trabajo típico, los espacios de nombres deben estar habilitados, como cualquier otra función de kernel maduro.
Relacionado:Linux:¿podemos obtener información del compilador de un binario elfo?Todavía hay pocas aplicaciones que hacen uso de espacios de nombres. Aquí hay algunos:
- LXC está bien establecido. Se basa en cgroups para proporcionar contenedores.
- virt-sandbox es un proyecto de sandboxing más reciente.
- Las versiones recientes de Chromium también usan espacios de nombres para sandboxing cuando están disponibles.
- El marco uWSGI para aplicaciones en clúster utiliza espacios de nombres para mejorar el espacio aislado.
Consulte la serie de artículos de LWN de Michael Kerrisk para obtener más información.