ユーザー「myuser」、uid/gid「1001」、ファイル「/etc/subuid」、「/etc/subgid」に次の内容が含まれているとします。
myuser:100000:65536
この設定を使用して、「myuser」ユーザーが「100000」が所有するファイルにアクセスできますか?
答え1
うん、の助けを借りてsetuid ルート便利newuidmap
そしてnewgidmap
仕事/etc/subuid
そして/etc/subgid
。
同様のツールポッドキャスト、ドッカーまたは、LXCにはすべて次のものが必要です。setuid ルートインストールされたユーティリティは、通常のユーザーとして、root none/passwordモードで動作します。これらのツールがないと、このタスクを案内するのに十分な権限がありません。
長い説明はすべてあります。ユーザーネームスペースこれらの機能の使用方法については、このマンページをお読みください。つまり、ユーザーの名前空間が作成されたら(権限のない操作を使用して)、特定の擬似ファイルを/proc/<PID>/{uid,gid}_map
一度だけ作成してマッピングを設定できます。正しい(ホスト)権限が必要です。代替UID/ジドその後、許可された範囲を/etc/sub{uid,gid}
ユーザーの名前空間にマップできます。
ユーザー私のユーザー特別なコマンドの助けを借りずにこれらの擬似ファイルを独自に作成できますが、次のようになります。
自分だけが所有できる(ホストUID10011001枚)UIDユーザーネームスペース(有用な明確な選択はそれ自体またはゼロです)根)。それにもかかわらず、新しいプロセスは当分の間、新しく作成されたユーザーの名前空間にマップされないため、この操作は他のプロセスで実行する必要があります。マップされていないUIDオーバーフローに翻訳されます。UID(基本的に65534別名誰も) 「解決する」まで、独自の
/proc/<PID>/uid_map
ファイルに書き込めません。でも根影響を与える可能性があるため、この名前空間で根どのホストですか?UID1001、これは役に立たない。システムコール(およびそれを使用するコマンド)は、特権の昇格を許可しないように設計されています。失敗することに加えて、マッピングを変更しようとするとEPERM
失敗する可能性があります。EINVAL
UID(例:ホストUID10011001枚)UID。グループの場合も同様ですが、最初に使用能力を失う必要があるという追加の制限があります。
setgroups
書くことができる前に/proc/<PID>/gid_map
(これは書くことができなくなることを避けるためです)削除する自分がグループで脱出するこのグループの一部として追加されたファイルの制限)。
だからUID100000は間違いなく到達できません。setuid ルートツールはい必須の。
ここでの目標は、一般ユーザーをマッピングすることです。私のユーザーそしてUID1001(newuidmap
子ID以外のマッピングにも許可されています)根ユーザー(UID0)と返品少なくともホストをマップします。UIDユーザーネームスペース内の100000:これを使用して(ユーザーネームスペース内)相互に変更できます。根必要なとき。ここでもう一度追加100000を... 100000にマップします。私も同じことをします。ジド、/etc/subgid
の鏡であると仮定します/etc/subuid
。
以下は、最初のホストユーザーがどのようにnewuidmap
使用して実行するかについての実際の例です。newgidmap
私のユーザー。上記のように、これには2つのプロセスが必要なので、2つの端末に2つのシェルがあります。これらの人々の行動setuid ルートecho
コマンドは、(ホスト)で実行される適切に作成された(またはなど)コマンドで置き換えることができます。printf
根ユーザー。
1学期:
$ unshare --user sh
$ id -u; id -un ; id -g; id -gn; echo pid:$$
65534
nobody
65534
nogroup
pid:13273
term2(以前の再利用PIDコマンドの値):
$ newuidmap 13273 0 1001 1 100000 100000 1
$ newgidmap 13273 0 1001 1 100000 100000 1
term1を再度(exec sh
シェルに「解決済み」および「アップグレード済み」状態が表示されるようにするため):
$ id -u; id -un ; id -g; id -gn
0
root
0
root
$ exec sh
#
# touch mytest
# chown 100000:100000 mytest
term2(ここに表示される内容は次のとおりです。1学期、選択したマッピングの値は同じです。):
$ ls -l mytest
-rw-r--r--. 1 100000 100000 0 Apr 21 18:00 mytest
$ touch mytest
touch: cannot touch 'mytest': Permission denied
1学期:
# chown 100001:100001 mytest
chown: changing ownership of 'mytest': Invalid argument
# chown root:root mytest
2学期:
$ ls -l mytest
-rw-r--r--. 1 myuser myuser 0 Apr 21 18:00 mytest
すべてのサブプロセス1学期今制御するUID100000(ファイルシステムタスクを含む)
/etc/subuid
より多くのアイテムが影響を受けたり、より簡単に影響を受ける可能性があるため、より広い範囲またはよりスマートなマッピングを使用できます(たとえば、次の100000をマッピング)。私のユーザー代わりに、単に実行をnewuidmap 13273 0 1001 1 1001 100000 1
許可します。su myuser
1学期、致命的ではないエラーにもかかわらず成功する必要があります)。たとえば、これは、関連していない問題のために起動を拒否するユーザーLXCインスタンスへのアクセス/構造/バックアップ(ネットワーキングなどの他の機能ではなくファイルシステムレベルでのみ)を許可します。