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 deshabilitarlo, ¿notaré algún cambio en mi sistema?
Y en caso de que alguien decida utilizar espacios de nombres, ¿es suficiente compilar NAMESPACES=Y
en el núcleo o también necesita herramientas de espacio de usuario?
linux
linux-kernel
namespace
Martin Vegter
fuente
fuente
Respuestas:
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 solo proceso 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 creen 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 versiones recientes del kernel).
Los espacios de nombres virtualizan una característica a la vez. Algunos ejemplos de tipos de espacios de nombres son:
Desde Linux kernel 3.8, los usuarios sin privilegios pueden crear espacios de nombres de usuario. Esto permite a un usuario común hacer uso de funciones que están reservadas a la raíz (como cambiar las tablas de enrutamiento o configurar capacidades).
Los espacios de nombres dependen del núcleo para proporcionar aislamiento entre espacios de nombres. Es bastante complicado hacerlo 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á haciendo un kernel pequeño para un dispositivo incrustado. En un kernel de uso 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.
Todavía hay pocas aplicaciones que hacen uso de espacios de nombres. Aquí hay algunos:
Consulte la serie de artículos LWN de Michael Kerrisk para obtener más información.
fuente
El espacio de nombres del kernel de Linux es un concepto utilizado para aislar un grupo de procesos de otros con respecto al acceso a un recurso del sistema. Por ejemplo, dos espacios de nombres PID diferentes pueden contener procesos con PID idénticos pero una imagen de proceso completamente diferente. A menudo se usan en la virtualización a nivel del sistema operativo, en la que un solo núcleo ejecuta simultáneamente varios sistemas operativos; todos deben estar basados en Linux (porque comparten el núcleo, obviamente), pero pueden tener diferentes distribuciones y versiones. Ver por ejemplo LXC .
Puede notar que lo deshabilita, por ejemplo, en sistemas basados en systemd, ya que systemd puede usar espacios de nombres para su característica contenedor . Por lo tanto, mucho depende de qué distribución está utilizando y qué piensa hacer con el sistema.
Al igual que con casi todas las funciones del kernel, definitivamente necesita algún tipo de programas de espacio de usuario, incluso si habló con el kernel a través de archivos especiales (no estoy seguro de que pueda), generalmente es una mejor idea confiar en herramientas especializadas, ya que Ofrecer API amigable.
fuente
Para dar un ejemplo del uso del espacio de nombres, en sistemas habilitados con SELinux (MLS o Strict). El espacio de nombres se usa generalmente para crear directorios individuales
/tmp
o/home
para cada usuario. Esos directorios son visibles solo para: el usuario, los usuarios con la misma etiqueta, el kernel y los usuarios con acceso privilegiado. El/tmp
directorio de espacio de nombres se etiqueta por SELinux-MLS para que coincida con la etiqueta SELinux-MLS del usuario. En este escenario, el/tmp
directorio que ve el usuario realmente puede estar montado en otro lugar que no sea/tmp
(/var/user-tmp
). Sin embargo, el usuario solo ve/tmp
con los archivos que se crean debido a la actividad del usuario. el usuario nunca verá ningún archivo/tmp
que sea producto de otros usuarios.fuente