はじめに
Docker特権 は、この強力な仮想化プラットフォームの多くの便利な機能の1つです。特権モードでの作業を開始する前に、それがどのように機能するかを理解してください。
このチュートリアルでは、特権Dockerコンテナーとは何か、それらをいつ使用するか、それが適切なオプションであるかどうかを学習します。
Docker特権モードとは何ですか?
Docker特権モードは、ホストシステム上のすべてのデバイスにDockerコンテナーのroot機能を付与します。コンテナを特権モードで実行すると、そのホストマシンの機能が提供されます。たとえば、AppArmとSELinuxの構成を変更できるようにします。
ホストのカーネル機能とデバイスアクセスを使用して、特権コンテナ内にDockerプラットフォームの新しいインスタンスをインストールすることもできます。基本的に、このモードではDocker内でDockerを実行できます。
コンテナに特権があるかどうかを確認する方法
コンテナを特権モードで実行しているかどうかを確認するには、次のコマンドを使用します。
docker inspect --format='{{.HostConfig.Privileged}}' [container_id]
コンテナに特権がある場合、出力は true
で応答します 、下の画像のように。
一方、コンテナに特権がない場合、出力には false
というメッセージが表示されます。 。
Docker特権モードを実行する方法
--privileged
を追加して、コンテナーを特権モードで実行するようにDockerに指示します。 実行コマンドのオプション:
sudo docker run --privileged [image_name]
Docker特権の例
Ubuntuコンテナを特権モードで(インタラクティブに)実行するには、次を使用します:
sudo docker run -it --privileged ubuntu
コンテナがホストにアクセスできるかどうかをテストするために、一時ファイルシステム( tmpfs )の作成を試みることができます。 )そしてそれを / mntにマウントします :
mount -t tmpfs none /mnt
次に、ディスク容量の統計を一覧表示します(人間が読める形式 format)コマンドを使用して:
df -h
下の画像のように、新しく作成されたファイルシステムがリストに表示されます。
特権コンテナの実行が安全でない理由
Ubuntuがシステムをrootとして使用することを推奨しないのと同様に、Dockerも同様です。ホストのカーネルとハードウェアリソースを外部のサイバー攻撃にさらすことは、常にシステムに対する潜在的な脅威です。
このため、特権コンテナの使用はお勧めしません 実稼働環境で。
特権コンテナを介した違反の可能性
特権コンテナを持つことは、どの組織にとってもセキュリティリスクです。悪意のあるユーザーがシステムを制御する機会が生まれます。
システム上のすべてのものへのコンテナルートアクセスを許可すると、サイバー攻撃の機会が開かれます。サイバー攻撃者はコンテナからホストに接続し、確立されたインフラストラクチャと構成を危険にさらす可能性があります。
最も一般的なシナリオは、正当なユーザーが悪意のあるアクティビティに対して特定の特権を悪用した場合です。
Dockerコンテナの権限昇格を最小限に抑える方法
Dockerコンテナーの特権昇格を防ぐ最善の方法は、特権コンテナーをまったく使用しないことです。
ただし、rootユーザーで実行する必要があるアプリケーションを実行している場合は、悪意のあるアクティビティの可能性を最小限に抑える方法があります。これは、ユーザー名前空間の再マッピングによって行われます。 、その特定のコンテナのユーザーをDockerホスト上の特権の少ないユーザーに再マッピングします。基本的に、コンテナはユーザーをルートと見なしますが、ホストはそうではありません。
再マッピングには、コンテナー(名前空間)内で機能するUIDの範囲を0から65536までの通常のUIDとして割り当てることが含まれますが、ホストに対する特権はありません。 2つのファイルがユーザー構成を管理します– 1つはユーザーID範囲( / etc / subuid )用です )およびその他のグループID範囲( / etc / subgid 。
デフォルトでは、dockerは dockremapを使用します 再マッピングを行うためのユーザーとグループ。