プロセスをrootとして実行することとすべてのLinux機能を使用することの違い

プロセスをrootとして実行することとすべてのLinux機能を使用することの違い

privileged:true仕様に設定すると、kubernetesポッドで完全に実行されるDockerコンテナがあります。ただし、すべてのLinux機能を提供して同じDockerコンテナを実行すると失敗します。どちらの場合も、プロセスの機能ビットマスクは次のように同じです。

SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000010000
SigIgn: 0000000000000004
SigCgt: 0000000000014002
CapInh: 0000003fffffffff
CapPrm: 0000003fffffffff
CapEff: 0000003fffffffff
CapBnd: 0000003fffffffff
CapAmb: 0000000000000000

それでは、2つの間に違いがありますか?プロセスをrootとして実行する そして すべての機能を使用したプロセスの実行

修正する:@ctrl-alt-delorが指摘したように、設定は、コンテナがホスト上privilege:trueのすべてのデバイスにアクセスできるだけでなく、ホストのコンテナ外で実行されるプロセスと同じホストアクセス権を持つことを意味します。

ベストアンサー1

私はあなたが何が起こっているのか見逃していると思います。

権限はルートではありません。。デフォルトでは、コンテナはrootとして実行されますが、機能がほとんどなく、権限もありません。

あなたの質問に対する回答(タイトル):非常に少し、ユーザー名のみがあるため、ファイルはユーザーとして作成されます。ただし、ユーザーには自分のユーザー名を変更する権利があります。 (不必要にroot権限を確認する一部のバグがあるソフトウェアは除く)

権限が何であるかを調べるには、マニュアルを確認する必要があります。 (わかりません。権限と同じではなく、root機能と同じではないこともわかります。)

デフォルトでは、Dockerコンテナは「権限がありません」。たとえば、DockerデーモンはDockerコンテナ内で実行できません。これは、デフォルトではコンテナはどのデバイスにもアクセスできませんが、「権限のある」コンテナはすべてのデバイスにアクセスできるためです(cgroupsデバイスのマニュアルを参照)。

オペレーターが docker run --privileged を実行すると、Docker はホスト上のすべてのデバイスへのアクセスを有効にし、AppArmor または SELinux でいくつかの構成を設定し、コンテナーがホスト上のコンテナー外で実行されるプロセスとほぼ同じホストアクセスを許可するようにします. 。 --privileged を使用した実行の詳細については、Docker ブログをご覧ください。

特定のデバイスへのアクセスを制限するには、--device フラグを使用できます。コンテナ内でアクセスできる1つ以上のデバイスを指定できます。

ホストの個々のファイル/ディレクトリをマッピングすることもできます-v

おすすめ記事