Aislar una aplicación gráfica como un navegador web o un cliente de mensajería basado en Electron en un contenedor LXC es una forma eficaz de añadir una capa extra de seguridad al escritorio Linux. Si el navegador queda comprometido, el resto del sistema y el directorio personal del usuario quedan expuestos, de modo que ejecutar la aplicación dentro de un contenedor reduce el radio de impacto de un hipotético ataque.
Este artículo describe, paso a paso, cómo configurar un contenedor LXC no privilegiado en Arch Linux (con extrapolación sencilla a otras distribuciones) para ejecutar aplicaciones X11 sin renunciar al sonido ni a la aceleración gráfica. Se parte de la instalación de los paquetes lxc y lxcfs y de la activación del bridge de red lxcbr0 mediante la unidad systemd lxc-net.service. A continuación se crea un fichero de configuración en /etc/lxc con los parámetros de red y un mapa de UID/GID que traslada los identificadores del contenedor a un rango inexistente en el anfitrión (100000–165535). Esta técnica, conocida como contenedor unprivileged, garantiza que un proceso que escape del contenedor carezca de permisos reales sobre el sistema anfitrión.
La guía cubre también la creación del contenedor a partir de la imagen debian:trixie con lxc-create, la instalación de Firefox ESR y la creación de un usuario dedicado. Uno de los puntos más delicados es la integración con X11: hay que regenerar el fichero .Xauthority sustituyendo el campo familia por el comodín FamilyWild (ffff) para que la cookie sea válida desde dentro del contenedor, ajustar permisos (chmod 644 o cambio de propietario al UID mapeado) y montar el socket /tmp/.X11-unix en modo lectura. Para el audio, se aprovecha la compatibilidad de PipeWire con PulseAudio: se publica un socket dedicado (unix:/tmp/pulse-socket-0) y se bind-mounta en el contenedor. Por último, se indica cómo pasar la GPU al contenedor mediante /dev/dri para habilitar la aceleración de vídeo.
