Je veux exécuter un programme sans accès à Internet, par exemple
unshare -n ping 127.0.0.1
.
En tant qu'utilisateur non privilégié, il renvoie Operation not permitted
, en tant qu'utilisateur privilégié, il renvoie le Network is unreachable
souhaité .
Existe-t-il un moyen de le faire fonctionner également pour l'utilisateur non privilégié ?
Réponse acceptée :
Dans les versions ultérieures d'util-linux, unshare
a obtenu le --map-root-user
option. Citant unshare(1)
version 2.26.2 :
-r, –map-root-user
Exécutez le programme uniquement après que les ID d'utilisateur et de groupe effectifs actuels ont été mappés sur l'UID et le GID de superutilisateur dans l'espace de noms d'utilisateur nouvellement créé. Cela permet d'acquérir facilement les capacités nécessaires pour gérer divers aspects des espaces de noms nouvellement créés (tels que la configuration d'interfaces dans l'espace de noms réseau ou le montage de systèmes de fichiers dans l'espace de noms de montage), même lorsqu'ils sont exécutés sans privilège. En tant que simple fonctionnalité pratique, il ne prend pas en charge les cas d'utilisation plus sophistiqués, tels que le mappage de plusieurs plages d'UID et de GID. Cette option implique –setgroups=deny.
Ainsi, sur les systèmes plus récents, vous pouvez exécuter :
unshare -n -r ping 127.0.0.1
Et cela donnera le Network is unreachable
attendu .
Sur les systèmes Debian, vous pouvez toujours obtenir une Operation not permitted
erreur, vous devez d'abord activer les espaces de noms d'utilisateurs non privilégiés en exécutant :
sudo sysctl -w kernel.unprivileged_userns_clone=1
Remarque :pour un plus large éventail de cas d'utilisation, le plus sophistiqué bwrap --unshare-net
peut être envisagé, comme décrit brièvement dans une autre réponse.