gid_mapのエコーは失敗しましたが、uid_mapは成功しました。

gid_mapのエコーは失敗しましたが、uid_mapは成功しました。

uid_mapファイルとgid_mapファイルに書き込んで、ユーザーとグループIDを新しい名前空間にマップしたいと思います。

まもなくターミナル1私は仕事をします。

vaibhav@vaibhav:~$ unshare -U /bin/sh
$ id
uid=65534(nobody) gid=65534(nogroup) groups=65534(nogroup)
$ echo $$
2506

次に、新しい端末を開きます。NO2。はい

vaibhav@vaibhav:~$ echo '0 1000 1' > /proc/2506/
uid_map
vaibhav@vaibhav:~$ echo '0 1000 1' > /proc/2506/
gid_map
-bash: echo: write error: Operation not permitted

今確認してみるとターミナル1

$ id
uid=0(root) gid=65534(nogroup) groups=65534(nogroup)

私はuid_mapファイルとgid_mapファイルを一度だけ書くことができることを知っていますが、最初の書き込みでは失敗します。

gid_mapへの書き込みが失敗する理由を知りたいです。私はそれを使用していますLinux Mint 20.3

答え1

Linux 3.19以降、権限のないユーザーがユーザーグループをマップしようとしたときに特定の制限が追加されました。つまり、セカンダリグループを変更する権限を放棄する必要があります。これは通常、ユーザー削除するsomeuser:denygroupこれは、modeなどの所有権を持つファイルの拒否フィルタとして機能するグループに由来しますu=rw,g=,o=r

そのような制限がないと、ユーザーは直接電話できます。setgroups(2)セカンダリグループのリストを消去します。

この内容は次のように記録されます。user_namespaces(7):

「拒絶」と書いてください/proc/[pid]/setgroups古いファイルへの書き込みはユーザーの名前空間で/proc/[pid]/gid_map永久に無効になります。setgroups(2)/proc/[pid]/gid_map親ユーザーの名前空間でCAP_SETGID機能なしで書き込みを許可する

OPの状況は次のとおりです。

echo deny > /proc/2506/setgroups

サプリメントグループのコントロールを放棄し、完了を許可します。

echo '0 1000 1' > /proc/2506/gid_map

メモ:

  • ユーザーは自分のuid / gidを他のユーザーにのみマッピングでき、興味深い値は自分または。より多くの可能性のために、setuid-rootヘルパーを使用することができますnewuidmapそしてnewgidmap各ユーザーが割り当てた範囲を使用します。/etc/subuidそして/etc/subgid。これは、権限のあるヘルパーを使用して、ユーザー権限のないコンテナが実際に機能する方法の一部です。

  • セキュリティに関する注意事項に進む前に特権コマンドをnewgidmap作成したallow場合は、/proc/[pid]/setgroupsそのコマンドを有効にしてエスケープできます。拒否グループとにかく、「刑務所」。このコマンドは、ユーザーが権限のないコンテナーを実行できる環境でどこでも使用されます。

関連情報