web-dev-qa-db-ja.com

権限のないユーザーとして「unshare -n [プログラム]」を実行することはできますか?

インターネットにアクセスせずにプログラムを実行したい。

unshare -n ping 127.0.0.1

非特権ユーザーとしてはOperation not permittedを返し、特権ユーザーとしては目的のNetwork is unreachableを返します。

非特権ユーザーでも同様に機能させる方法はありますか?

11
clinei

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_を生成します。

8
Amir

setuidにします(すでにrootが所有している場合):

Sudo chmod u+s "`which unshare`"

からnshare(1)

注unshareコマンドは、ターゲットプログラムを実行する前に、潜在的な特権を削除します。これにより、setuidで共有を解除できます。

2
PSkocik

setcapユーティリティを使用して、共有解除を設定できます。

Sudo setcap cap_sys_admin+ep /usr/bin/unshare

この後、unshare -n ping 127.0.0.1これ以上説明することはできません。これが良いアイデアかどうかはわかりませんが、機能し、whoamiはユーザー名としてrootを表示しません。

1
jue