Habilitar espacios de nombres de usuario en el núcleo de Debian

28

Estoy tratando de descubrir cómo habilitar la capacidad de espacios de nombres de usuario en mi kernel (creo que CAP_SYS_USER_NS). Estoy usando Debian Stretch, kernel 4.6.0-1-amd64.

Supongo que hay una manera de activar los espacios de nombres de usuario y recompilar el núcleo. Después de algunas horas de búsqueda, puedo encontrar una publicación de esto en Ubuntu ( https://blog.tutum.co/2013/12/14/enabling-the-user-namespace-in-ubuntu-13-10-saucy/ ) pero no Debian (el problema puede ser que estoy en el camino equivocado y mis búsquedas están fuera de la base).

Mi juego final es habilitarlos para mantenerme al día con Docker y Google sandboxing que aparentemente requieren que los espacios de nombres de usuario estén habilitados en el kernel (por ejemplo, mis contenedores Chrome ya no funcionan).

Senrabdet
fuente
1
Ver también la misma pregunta: unix.stackexchange.com/q/303213/4319
imz - Ivan Zakharyaschev

Respuestas:

38

En Debian, el usuario está compilado pero está deshabilitado de forma predeterminada. Hay un parche específico de Debian en el kernel que agrega esta perilla sysctl: kernel.unprivileged_userns_clone

Por lo tanto, debe agregar una nueva entrada /etc/sysctl.dy establecerla en 1

Manualmente eso sería: echo 1 > /proc/sys/kernel/unprivileged_userns_clone(solo para habilitarlo hasta que se reinicie)

para una solución permanente:

echo 'kernel.unprivileged_userns_clone=1' > /etc/sysctl.d/00-local-userns.conf
service procps restart

Es posible que haya un parámetro de opción de arranque equivalente, simplemente no sé

AB
fuente
1
Esto todavía funciona en Stretch, kernel 4.9.0-1-amd64 #1 SMP Debian 4.9.6-3 (2017-01-28) x86_64 GNU/Linux.
Reid
1
¿Hay alguna razón por la cual está deshabilitado por defecto en Debian?
Melroy
2
Históricamente, la seguridad del espacio de nombres de usuario era incierta. por ejemplo: lwn.net/Articles/673597 . Si un usuario, como root dentro de su propio espacio de nombres puede engañar al kernel para que permita una operación en el host real, hay escalada de privilegios. Los espacios de nombres habituales que no son de usuario requieren permiso explícito de root (por lo tanto, administrador) y ejecutan lo que el administrador eligió: eso es un riesgo conocido. Un mecanismo posterior se agregó en el núcleo de vainilla: user.max_user_namespaces. Cuando se establece en 0, los espacios de nombres de usuario están deshabilitados. El parche de Debian (en realidad de Ubuntu) todavía está presente, incluso si es probablemente obsoleto. Tal vez por razones de compatibilidad
AB
1
El núcleo 4.18.3 aún no se ha lanzado en Debian, por lo que su núcleo no es el núcleo de una prueba de Debian. Puede ignorar este parámetro por completo (hasta que instale un núcleo real de Debian). También mire mi comentario anterior sobre user.max_user_namespaces
AB
3
O simplemente: sudo sysctl -w kernel.unprivileged_userns_clone=1.
Skippy le Grand Gourou