
Tengo un problema con la instalación de mi ventana acoplable. Por algunas razones de seguridad, configuré mi "daemon.json" para que el espacio de nombres se cambie a otro usuario ( userns-remap
). Ahora tengo el problema de que si ejecuto un contenedor (con contexto de usuario cambiado ( USER containeruser
) e intento hacer ping a otro que está en la misma red de contenedores, aparece el siguiente error:
$ ping 172.16.0.3
PING 172.16.0.3 (172.16.0.3): 56 data bytes
ping: permission denied (are you root?)
Ya probé varias cosas con AppArmor, asignando más capacidades y demás. Pero nada ayudó a resolver ese problema.
La imagen en ejecución es un Linux alpino sin modificaciones.
¿Tienes una solución para mi problema?
Respuesta1
TL;DR
apk add iputils
Explicación
Alpine se basa encaja ocupadaque implementa los comandos habituales de Linux en un solo binario. Si observa el /bin
directorio en su imagen alpina base, verá que el ping
comando (como otros) es un enlace simbólico a/bin/busybox
Para ejecutarse como un usuario normal, ping
necesita elpoco suidcolocar. Podría verse tentado a configurar el bit suid en el enlace simbólico (es decir chmod u+s /bin/ping
, ). Pero eso en realidad lo establecería en el binario de Busybox y, por lo tanto, en todos los demás comandos registrados como un enlace simbólico, lo que sería una violación de seguridad.
Afortunadamente, existe un iputils
paquete en Alpine que contiene una versión alternativa de ping
. Si lo instala, reemplazará el enlace simbólico con un binario simple que tendrá los permisos necesarios para que todos lo ejecuten. Simplemente agregue el comando necesario anterior en una RUN
línea en su Dockerfile.
Respuesta2
Aunque no responde a la pregunta de OP, puede resultar útil para las personas que buscan el error en el título.
Puede ejecutar el siguiente comando para ingresar al shell como usuario raíz del contenedor acoplable.
docker exec -u 0 -it <container-name> <shell>
Dependiendo del shell presente en la imagen, shell
puede ser cualquiera de zsh
, bash
, sh
, ash
etc. Puede encontrarlo mediante el método de prueba y error.
Esto es especialmente útil si no tiene el archivo acoplable para modificarlo (por ejemplo, al recuperar la imagen de la ventana acoplable directamente desde el registro).