kernel: soporte de espacios de nombres

15

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=Yen el núcleo o también necesita herramientas de espacio de usuario?

Martin Vegter
fuente
55
Los espacios de nombres se explican bastante bien aquí: lwn.net/Articles/531114 (no es una respuesta, porque realmente no estoy respondiendo sus preguntas, lo estoy señalando a un montón de texto)
derobert

Respuestas:

21

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:

  • 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 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).
  • Espacios de nombres PID : los procesos dentro de un espacio de nombres PID no pueden eliminar ni 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, permitiendo que algunas partes del sistema de archivos se oculten y que las partes se recompongan para que los árboles de directorios aparezcan en diferentes lugares. Los espacios de nombres de montaje generalizan la característica tradicional chroot de Unix , que permite que los procesos se restrinjan a un subárbol particular.
  • Espacios de nombres de red : permiten la separación de los recursos de red (dispositivos de red) y, por lo tanto, mejoran el aislamiento de los procesos.

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:

  • 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 cromo también utilizan espacios de nombres para sandboxing donde esté disponible.
  • El marco uWSGI para aplicaciones en clúster utiliza espacios de nombres para mejorar el espacio aislado.

Consulte la serie de artículos LWN de Michael Kerrisk para obtener más información.

Gilles 'SO- deja de ser malvado'
fuente
6

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.

Peterph
fuente
1

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 /tmpo /homepara 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 /tmpdirectorio de espacio de nombres se etiqueta por SELinux-MLS para que coincida con la etiqueta SELinux-MLS del usuario. En este escenario, el /tmpdirectorio que ve el usuario realmente puede estar montado en otro lugar que no sea /tmp( /var/user-tmp). Sin embargo, el usuario solo ve /tmpcon los archivos que se crean debido a la actividad del usuario. el usuario nunca verá ningún archivo /tmpque sea producto de otros usuarios.

guestUserX
fuente