Quiero ejecutar un programa sin acceso a Internet, por ejemplo,
unshare -n ping 127.0.0.1
.
Como usuario sin privilegios, devuelve Operation not permitted
, como usuario privilegiado, devuelve el Network is unreachable
deseado .
¿Hay alguna forma de hacer que funcione también para el usuario sin privilegios?
Respuesta aceptada:
En versiones posteriores de util-linux, unshare
obtuvo el --map-root-user
opción. Citando de unshare(1)
versión 2.26.2:
-r, –mapa-usuario-raíz
Ejecute el programa solo después de que los ID de usuario y grupo efectivos actuales se hayan asignado al UID y GID de superusuario en el espacio de nombres de usuario recién creado. Esto hace posible obtener convenientemente las capacidades necesarias para administrar varios aspectos de los espacios de nombres recién creados (como configurar interfaces en el espacio de nombres de red o montar sistemas de archivos en el espacio de nombres de montaje) incluso cuando se ejecuta sin privilegios. Como característica de mera conveniencia, no admite casos de uso más sofisticados, como el mapeo de múltiples rangos de UID y GID. Esta opción implica –setgroups=deny.
Entonces, en los sistemas más nuevos, puede ejecutar:
unshare -n -r ping 127.0.0.1
Y esto producirá el esperado Network is unreachable
.
En los sistemas Debian, aún puede obtener un Operation not permitted
error, primero debe habilitar los espacios de nombres de usuario sin privilegios ejecutando:
sudo sysctl -w kernel.unprivileged_userns_clone=1
Nota:para una gama más amplia de casos de uso, el bwrap --unshare-net
más sofisticado puede ser considerado, como se describe brevemente en una respuesta diferente.