¿Cómo puedo forzar a los progtwigs chroot a usar un dispositivo ethernet virtual?

En primer lugar, esto no es por razones de security o para su uso en un entorno de producción. Es porque quiero perder el time con diferentes sistemas de administración de configuration en una estación de trabajo de relativamente baja especificación, sin usar máquinas virtuales (time y resources) o LXC (requisitos de versión y complejidad innecesaria). Los Chroots son relativamente inseguros, pero también son rápidos e indoloros de configurar.

De todos modos: dado un entorno chroot y una interfaz de ethernet virtual (eth0: 1 o similar), ¿cómo puedo asegurarme de que los progtwigs en el chroot siempre usen la interfaz virtual?

Tenga en count que no necesito un verdadero aislamiento de networking, donde la interfaz real no se puede ver dentro del chroot. Solo quiero que los progtwigs chroot respondan a una dirección IP diferente a la del host (u otros chroots), por lo que puedo usar las configuraciones de server / cliente correctamente, por ejemplo, Puppet.

El host ejecuta Debian Wheezy x64.

Tal vez me estoy acercando a esto de la manera incorrecta. Lo que quiero es tener varios chroots y poder acceder a cada uno por nombre de host desde el sistema host. ¿Es eso posible?

Chroot no es de ayuda aquí. Solo afecta los nombres de los files, no las funciones de networking y otras.

Las versiones modernas de Linux ofrecen una forma de virtualizar ciertos aspectos del entorno por partes, a través de espacios de nombres . Además de la virtualización tradicional de nombres de file a través de chroot (para que un process chroot no vea files fuera del chroot), puede virtualizar identificadores de process (por lo que un process dentro de un espacio de nombres PID no podrá señalar o rastrear processs fuera del namespace), usuarios (para que el usuario 1234 dentro del espacio de nombres de usuario sea independiente del usuario 1234 fuera del espacio de nombres), etc. De interés para usted son espacios de nombres de networking , en los que los processs tienen sus propias interfaces de networking, direcciones IP, routing, etc.

Recomiendo leer la excelente serie de artículos LWN de Michael Kerrisk , al less la introducción y el artículo sobre espacios de nombres de networking .

Los espacios de nombres de networking han existido desde kernel 2.6.29 (con una implementación parcial disponible en versiones anteriores), por lo que están disponibles en todas las distribuciones contemporáneas además de RHEL5 / CentOS5. Comenzando con kernel 3.8, puede incluso combinar un espacio de nombres de networking con un espacio de nombres de usuario y realizar la configuration de networking dentro del espacio de nombres, sin tener permissions de raíz fuera del espacio de nombres; con kernels anteriores como el 3.2 en wheezy, necesita acceso de raíz en el sistema host para crear el espacio de nombres de usuario en primer lugar. Las herramientas de Userland han sido más lentas en llegar que las características del kernel, por lo que muchos sistemas actuales no tienen todas las herramientas para hacer un uso completo de las características del kernel. Debian wheezy viene con unshare , que es suficiente para crear ese espacio de nombres, pero carece de la envoltura del shell nsenter alnetworkingedor de setns para actuar dentro de un espacio de nombres del host ( entró inestable en julio ).

Consulte Comando para ejecutar un process secundario "fuera de línea" (sin networking externa) en Linux para get un ejemplo simple de creación de un espacio de nombres de networking. El blog de Scott Lowe tiene un tutorial más detallado.

Respuesta: por lo que puedo decir de Google bastante extenso, la falta de espacio de nombres de networking en chroot de hecho lo hace imposible. No puede asignar un entorno chroot a su propia IP, su propio nombre de host o FQDN, ni nada por el estilo, de ninguna manera.

Chroot es útil para proteger progtwigs únicos o daemons. Para crear cualquier tipo de sistema de testing aislado, parece ser en gran parte inútil.