インターネットにアクセスせずにプログラムを実行したい。例:
unshare -n ping 127.0.0.1
。
非特権ユーザーとして、Operation not permitted
を返します 、特権ユーザーとして、目的のNetwork is unreachable
を返します 。
特権のないユーザーにも機能させる方法はありますか?
承認された回答:
util-linuxの新しいバージョンでは、unshare
--map-root-user
を取得しました オプション。 unshare(1)
からの引用 バージョン2.26.2:
-r、–map-root-user
プログラムは、現在有効なユーザーIDとグループIDが、新しく作成されたユーザー名前空間のスーパーユーザーUIDとGIDにマップされた後でのみ実行してください。これにより、非特権で実行している場合でも、新しく作成された名前空間のさまざまな側面(ネットワーク名前空間でのインターフェイスの構成やマウント名前空間でのファイルシステムのマウントなど)を管理するために必要な機能を簡単に利用できます。単なる便利な機能として、複数の範囲のUIDやGIDのマッピングなど、より高度なユースケースはサポートされていません。このオプションは、–setgroups=denyを意味します。
したがって、新しいシステムでは、次を実行できます。
unshare -n -r ping 127.0.0.1
そして、これにより、期待されるNetwork is unreachable
が生成されます。 。
Debianシステムでは、Operation not permitted
が発生する可能性があります エラーが発生した場合は、最初に次のコマンドを実行して、非特権ユーザーの名前空間を有効にする必要があります。
sudo sysctl -w kernel.unprivileged_userns_clone=1
注:より幅広いユースケースでは、より洗練されたbwrap --unshare-net
別の回答で簡単に説明されているように、考慮される場合があります。