FamilyWild: cómo compartir un servidor X entre hosts con un solo cambio de bytes

Fuentes: Sharing an X Server Across Hosts with FamilyWild

Cuando una aplicación X11 se ejecuta dentro de un contenedor, un chroot o una sesión SSH con un .Xauthority montado por bind, el servidor suele rechazar la conexión con un críptico "Authorization required, but no authorization protocol specified", aunque el archivo esté presente y sea legible. El motivo está en cómo X11 asocia cada cookie de autenticación: cada entrada del fichero está indexada por una familia y un nombre de host, de modo que el cliente solo presenta la cookie cuya clave coincide con la máquina donde cree estar ejecutándose. Si el cliente corre en otro host, contenedor o resuelve un nombre distinto, la cookie, aunque válida, nunca se ofrece.

La solución propuesta es usar la familia comodín FamilyWild (0xffff), que hace que la cookie sea aceptada desde cualquier hostname. En la práctica basta con volcar las entradas con xauth nlist, sustituir el campo de familia de cuatro dígitos hexadecimales por ffff mediante sed y reconstruir el archivo con xauth nmerge. El autor demuestra con volcados hexadecimales que el cambio afecta únicamente a los dos primeros bytes del registro binario, que pasan de 0100 (FamilyLocal) a ffff, dejando intactos la dirección, el número de display, el nombre de autenticación y la cookie. El archivo resultante se monta vía bind-mount o se copia con scp al entorno del cliente, se apunta la variable XAUTHORITY hacia él y la conexión queda aceptada.

El texto también advierte de los riesgos de la receta habitual xhost +: desactiva por completo el control de acceso basado en host y permite a cualquier cliente local leer ventanas, capturar pulsaciones o inyectar entrada sintética. La técnica de FamilyWild mantiene la puerta cerrada —el cliente sigue necesitando presentar el secreto— y solo elimina la restricción de hostname. Como precaución, se recomienda no dejar el archivo a la vista en máquinas compartidas y mantener sus permisos en 0600. El autor enmarca este truco dentro de un flujo mayor para reenviar X a contenedores LXC sin privilegios.