Ich möchte ein Programm ohne Internetzugang ausführen, z. B.
unshare -n ping 127.0.0.1
.
Als nicht privilegierter Benutzer wird Operation not permitted
zurückgegeben , als privilegierter Benutzer gibt es den gewünschten Network is unreachable
zurück .
Gibt es eine Möglichkeit, es auch für den nicht privilegierten Benutzer zum Laufen zu bringen?
Akzeptierte Antwort:
In späteren Versionen von util-linux, unshare
hat den --map-root-user
erhalten Möglichkeit. Zitat von unshare(1)
Version 2.26.2:
-r, –map-root-user
Führen Sie das Programm erst aus, nachdem die aktuellen effektiven Benutzer- und Gruppen-IDs der Superuser-UID und -GID im neu erstellten Benutzernamensraum zugeordnet wurden. Dadurch ist es möglich, auf bequeme Weise Funktionen zu erlangen, die zum Verwalten verschiedener Aspekte der neu erstellten Namensräume erforderlich sind (z. B. das Konfigurieren von Schnittstellen im Netzwerk-Namensraum oder das Mounten von Dateisystemen im Mount-Namensraum), selbst wenn sie unprivilegiert ausgeführt werden. Als reine Komfortfunktion unterstützt es keine anspruchsvolleren Anwendungsfälle, wie z. B. das Zuordnen mehrerer Bereiche von UIDs und GIDs. Diese Option impliziert –setgroups=deny.
Auf neueren Systemen können Sie also Folgendes ausführen:
unshare -n -r ping 127.0.0.1
Und dies ergibt das erwartete Network is unreachable
.
Auf Debian-Systemen erhalten Sie möglicherweise immer noch eine Operation not permitted
Fehler, dann müssen Sie zuerst unprivilegierte Benutzernamensräume aktivieren, indem Sie Folgendes ausführen:
sudo sysctl -w kernel.unprivileged_userns_clone=1
Hinweis:Für eine breitere Palette von Anwendungsfällen ist das anspruchsvollere bwrap --unshare-net
berücksichtigt werden, wie in einer anderen Antwort kurz beschrieben.