Chci spustit program bez přístupu k internetu, např.
unshare -n ping 127.0.0.1
.
Jako neprivilegovaný uživatel vrátí Operation not permitted
, jako privilegovaný uživatel vrátí požadované Network is unreachable
.
Existuje nějaký způsob, jak zajistit, aby to fungovalo i pro neprivilegovaného uživatele?
Přijatá odpověď:
V novějších verzích util-linux unshare
získal --map-root-user
volba. Citace z unshare(1)
verze 2.26.2:
-r, –map-root-user
Spusťte program až poté, co byly aktuální platné ID uživatele a skupiny namapovány na UID a GID superuživatele v nově vytvořeném jmenném prostoru uživatele. To umožňuje pohodlně získat schopnosti potřebné ke správě různých aspektů nově vytvořených jmenných prostorů (jako je konfigurace rozhraní v síťovém jmenném prostoru nebo připojení souborových systémů do jmenného prostoru připojení), i když jsou spuštěny bez oprávnění. Jako pouhá funkce pohodlí nepodporuje sofistikovanější případy použití, jako je mapování více rozsahů UID a GID. Tato volba znamená –setgroups=deny.
Na novějších systémech tedy můžete spustit:
unshare -n -r ping 127.0.0.1
A to povede k očekávanému Network is unreachable
.
Na systémech Debian můžete stále dostat Operation not permitted
chyba, pak musíte nejprve povolit neprivilegované uživatelské jmenné prostory spuštěním:
sudo sysctl -w kernel.unprivileged_userns_clone=1
Poznámka:pro širší rozsah případů použití je propracovanější bwrap --unshare-net
jak je stručně popsáno v jiné odpovědi.