「共有解除」を使って「chown」できない

「共有解除」を使って「chown」できない

私は走る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を使用してファイルシステム権限を付与できますか?

答え2

ルートのみが所有権を他のユーザーに変更できます。あなたはunshare -rルートになりますが、自分の名前空間でのみ可能です。

~$ unshare -r touch /tmp/foo
~$ unshare -r ls -l  /tmp/foo
-rw-r--r-- 1 root root 0 27. Jul 14:20 /tmp/foo
~$  ls -l  /tmp/foo
-rw-r--r-- 1 user user 0 27. Jul 14:20 /tmp/foo

名前空間のファイルシステムが「実際の」名前空間のファイルシステムを改ざんできるため、chownこれは回避されます。

関連情報