Voglio eseguire un programma senza alcun accesso a Internet, ad es.
unshare -n ping 127.0.0.1
.
In quanto utente non privilegiato, restituisce Operation not permitted
, come utente privilegiato, restituisce il Network is unreachable
desiderato .
C'è un modo per farlo funzionare anche per l'utente non privilegiato?
Risposta accettata:
Nelle versioni successive di util-linux, unshare
ottenuto il --map-root-user
opzione. Citando da unshare(1)
versione 2.26.2:
-r, –map-root-user
Eseguire il programma solo dopo che l'utente effettivo corrente e gli ID di gruppo sono stati mappati all'UID e al GID del superutente nello spazio dei nomi utente appena creato. Ciò rende possibile acquisire comodamente le capacità necessarie per gestire vari aspetti degli spazi dei nomi appena creati (come la configurazione delle interfacce nello spazio dei nomi di rete o il montaggio di filesystem nello spazio dei nomi di montaggio) anche quando vengono eseguiti senza privilegi. Come semplice funzionalità di praticità, non supporta casi d'uso più sofisticati, come la mappatura di più intervalli di UID e GID. Questa opzione implica –setgroups=deny.
Quindi, sui sistemi più recenti, puoi eseguire:
unshare -n -r ping 127.0.0.1
E questo produrrà il previsto Network is unreachable
.
Sui sistemi Debian potresti comunque ricevere un Operation not permitted
errore, quindi devi prima abilitare gli spazi dei nomi degli utenti senza privilegi eseguendo:
sudo sysctl -w kernel.unprivileged_userns_clone=1
Nota:per una gamma più ampia di casi d'uso, il più sofisticato bwrap --unshare-net
può essere considerato, come brevemente descritto in una risposta diversa.