Un programa basado en Chromium se interrumpe: «The SUID sandbox helper binary was found, but is not configured correctly»
Discord y otros programas basados en Electron o Chromium pueden detenerse justo al iniciarse con este mensaje:
FATAL:sandbox/linux/suid/client/setuid_sandbox_host.cc:166] The SUID sandbox helper binary was found, but is not configured correctly. Rather than run without sandboxing I'm aborting now. You need to make sure that /home/user/.config/discord/app-1.0.157/chrome-sandbox is owned by root and has mode 4755.Chromium coloca las páginas que renderiza dentro de un espacio aislado y admite dos formas de construirlo: un espacio de nombres de usuario o, si se le niega el espacio de nombres de usuario, el programa auxiliar setuid chrome-sandbox que se incluye con el programa. Cuando el guardián está activo, a todo programa que no esté en su lista se le niega el espacio de nombres, y Chromium recurre al programa auxiliar. Si el programa auxiliar se instaló sin el bit setuid, Chromium se cierra en lugar de continuar sin espacio aislado.
Por lo tanto, que un programa se vea afectado depende de su programa auxiliar. Arch instala el programa auxiliar como setuid para chromium, para cada paquete electron y para signal-desktop, y el brave-bin del AUR hace lo mismo, así que estos se inician como antes. Se ven afectados los programas que traen un Chromium propio con un programa auxiliar ordinario, algo habitual entre los paquetes -bin del AUR, y todo programa que se ejecuta desde el directorio personal. Discord es uno de ellos: el paquete discord del repositorio de Arch instala solo un lanzador, que descarga Discord en ~/.config/discord y lo inicia desde ahí.
Para confirmar que fue el guardián quien lo rechazó, consulte al propio guardián. sudo ditana-userns-guard --status enumera los programas que ha rechazado, primero el más reciente, cada uno con el usuario que lo ejecutó y la frecuencia; una línea como refused 3x uid 1000 Discord, 12 s ago señala al culpable. La versión 1.00 del guardián solo cuenta: en ella, ejecute el comando antes y después de iniciar el programa y, si denied aumentó, fue el guardián.
Para un programa del directorio personal, use, en cambio, su Flatpak:
sudo flatpak install flathub com.discordapp.Discordsudo pacman -Rns discordFlatpak construye su espacio aislado con bubblewrap, que está en la lista, y el propio espacio aislado de Discord se ejecuta después dentro de él. En este caso, no haga lo que pide el mensaje. Un archivo setuid root en el directorio personal otorga privilegios de root a un binario que descargó el propio actualizador del programa y que nadie verificó, y la siguiente actualización coloca uno nuevo junto a él.
Un programa basado en Chromium procedente de un paquete
Sección titulada «Un programa basado en Chromium procedente de un paquete»La mayoría de los programas basados en Chromium o Electron que provienen de un paquete se inician con normalidad, ya que su paquete instala el programa auxiliar del espacio aislado como setuid root, como hacen los paquetes chromium y electron de Arch. El mensaje solo aparece cuando un paquete instala el programa auxiliar sin ese bit, lo cual es poco frecuente y afecta sobre todo a paquetes -bin del AUR que traen un Electron propio. Los demás paquetes no se ven afectados: no tienen un programa auxiliar de ese tipo. La solución es darle el bit al programa auxiliar. Así, Chromium ya no necesita ningún espacio de nombres de usuario, y por eso esto es mejor que poner el programa en la lista del guardián. Esto enumera todos los programas auxiliares del sistema que carecen de él:
find /usr /opt -type f \( -name chrome-sandbox -o -name chrome_sandbox \) \( ! -user root -o ! -perm -4001 \)Activar el bit una sola vez no basta, porque la siguiente actualización del paquete vuelve a escribir el archivo tal como estaba. Un hook de pacman lo vuelve a activar después de cada actualización. Para cada ruta que mostró el comando, asigne esa ruta a helper y ejecute:
helper=/opt/example/chrome-sandboxsudo mkdir -p /etc/pacman.d/hookssudo tee "/etc/pacman.d/hooks/$(pacman -Qqo "$helper")-chrome-sandbox.hook" > /dev/null <<HOOK[Trigger]Type = PathOperation = InstallOperation = UpgradeTarget = ${helper#/}
[Action]Description = Making the Chromium sandbox helper in ${helper%/*} setuid root...When = PostTransactionExec = /usr/bin/chmod 4755 $helperHOOKsudo chmod 4755 "$helper"A diferencia de un programa auxiliar del directorio personal, este forma parte de un paquete que pacman instaló y verificó, y un programa auxiliar setuid es exactamente la forma en que Arch distribuye el propio Chromium.
Un programa auxiliar sin el bit es un defecto de empaquetado. El archivo existe únicamente para ser setuid root y sin él no puede hacer nada, y el propio programa del paquete lo confirma en el mensaje anterior. Tampoco es algo exclusivo de Ditana: el propio kernel linux-hardened de Arch desactiva de forma predeterminada los espacios de nombres de usuario sin privilegios, y la Arch Wiki indica que las aplicaciones basadas en Chromium necesitan entonces el bit setuid en chrome-sandbox. Informe del defecto, para que la siguiente actualización lo corrija para todos y el hook deje de ser necesario. pacman -Si <package> muestra el repositorio del que proviene; un paquete que aparece en pacman -Qm proviene, en cambio, del AUR:
- Repositorio de Arch: una incidencia en
https://gitlab.archlinux.org/archlinux/packaging/packages/<package>/-/issues. - AUR: un comentario en
https://aur.archlinux.org/packages/<package>. - Repositorio de Ditana: una incidencia en ditana-build. Ditana compila estos paquetes a partir de recetas del AUR y se encarga de trasladar el informe allí.
Es útil mencionar la solución: instalar el programa auxiliar con el modo 4755, como hacen los paquetes chromium y electron de Arch.
Esta traducción la hizo una máquina. Los lectores la mejoran en Weblate.