私は走るunshare -r touch file
。しかしunshare -r chown nobody file
それは私に与えられましたInvalid argument
。なぜ?
ベストアンサー1
新しいユーザーネームスペースを作成した後にタスクを「完了」するには、UIDとGIDのマッピングを一度に完了する必要があります。
初期ユーザー(権限がない場合)はこのマッピングを実行できますが、自分を新しいユーザーの名前空間にのみマッピングできます。一つUIDと一つGIDは権限なしでマッピングできます。
この制限がある場合、この単一ユーザーマッピングに興味がある候補である新しいユーザー名前空間には2人のユーザーしかいません。他の関連する名前空間(ネットワークやマウントなど)に関連する権限を含む権限を取得するためのルートまたはユーザーの名前空間自体(通常は複数のレイヤーを含む):初期(john) - > userns1(root) - > userns2(再) john)).したがって、通常はルートが選択されます(この-r
オプションが実行するアクションです)。
root権限では、一部の権限はプロセス、ファイルのUIDの変更、または影響に関連しています。ただし、この新しいユーザー名前空間では、選択したUID(ルートの場合は0)を除く他のすべてのUIDはマップされません。それらは次のようにマッピングされます。(オーバーフローしたUID)誰もいない(65534)とそれを変更または変更しようとすると、EINVAL(無効なパラメータ)が発生します。これは、初期ユーザーの名前空間で、権限のないユーザーが同じ操作を実行した結果である操作不能(EPERM)とは異なります。しかし、全体的な目標は同じです。つまり、ユーザーネームスペースを使用してなりすましを試みることで、ホスト(初期ネームスペース...)への権限やアクセスを取得する方法はありません。
権限のないユーザーが作成した名前空間で複数のUIDを使用する必要がある場合は、次のものを使用する必要があります。特権助ける人。これらのヘルパーはどこにもあり、権限のないユーザーと一緒に使用する場合のコンテナ技術(Docker、LXC...)の前提条件です。newuidmap
(そしてその仲間たちnewgidmap
)。このツールはsetuid-root(少なくともCAP_SETUIDが必要ですが他のものも必要です)であり、/etc/subuid
ユーザー自身に加えて、/内のすべてのユーザー項目の完全なマッピング範囲を新しいユーザー名前空間に付与できます。/etc/subgid
詳細はこのQ/Aで確認できます。サブユーザーIDを使用してファイルシステム権限を付与できますか?