サブユーザーIDを使用してファイルシステム権限を付与できますか?

サブユーザーIDを使用してファイルシステム権限を付与できますか?

ユーザー「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失敗する可能性があります。EINVALUID(例:ホスト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 myuser1学期、致命的ではないエラーにもかかわらず成功する必要があります)。たとえば、これは、関連していない問題のために起動を拒否するユーザーLXCインスタンスへのアクセス/構造/バックアップ(ネットワーキングなどの他の機能ではなくファイルシステムレベルでのみ)を許可します。

おすすめ記事