ルートレスDockerとは何ですか?
通常、Dockerをインストールするときは、ホストシステムに対する完全なアクセス許可(root)が必要です。コンテナと(デーモン)Dockerサービスの両方がrootとして機能するため、これにより潜在的なセキュリティ問題が発生します。 Dockerのルートレスインストールでは、Dockerデーモンのみがrootとして実行され、コンテナーは通常のユーザーとして実行されます。
なぜそれが重要なのですか?コンテナで実行されているサービスが侵害された場合、攻撃者はシステムファイルにもアクセスする可能性があるためです。コンテナの実際の分離はありません。
オープンソースのPodmanプロジェクトは、主にルートなしでコンテナを実行するために作成されました。これにより、Dockerに同様の機能をサポートするよう圧力がかかり、コンテナーは通常のユーザーとして実行されますが、Dockerサービス(デーモン)はrootとして機能します。
このルートレスインストールはDocker自体から利用できるようになり、この機能のためだけにPodmanを使用する必要はありません。
この記事では、ルートアクセスなしでDockerをインストールする方法について説明します。ただし、これらの手順を示す前に、まずこのモードの欠点について説明しましょう。
Dockerをルートレスモードで実行することのデメリット
このモードの最大の欠点はネットワークであり、これらの問題はPodmanにも存在します。
デフォルトでは、Dockerはルートレスネットワークを使用します。
最大30Gbpsの速度で最速であり、IPv4とIPv6をサポートしているためです。
しかし、問題があります。
コンテナにはリクエストの外部IPがなく、すべてのリクエストは127.0.0.1から表示されます。
これは大きな問題です。特に、すべての要求が同じアドレスから発信されているように見えるため、分散型サービス拒否(DDOS)攻撃を制限する保護を設定する場合はそうです。
Slirp4netnsモードを使用すると、この問題が解決され、リクエストの元のアドレスが表示されます。しかし、2つの問題もあります。
- IPv6はサポートされていません。
- 速度ははるかに遅い(約7Gbps)。
ルートレスモードはスティッキービットを使用しません。 newuidmapが必要です およびnewgidmap 。
これが、newuidmapおよびnewgidmapパッケージが(uidmapパッケージを介して)インストールされ、65,536の子IDがあることを確認する必要がある理由です。
newuidmap 発信者がpidで示されるプロセスの所有者であることを確認します 。
id -u
1001
whoami
testuser
次に、ユーザーが65,536個のサブUIDを持っていることを確認します。
grep ^$(whoami): /etc/subuid
testuser:231072:65536
grep ^$(whoami): /etc/subgid
testuser:231072:65536
これらの数字はどういう意味ですか?最初の番号は使用が許可されている最初のIDであり、次の番号はIDがいくつあるかを示します。たとえば、231072で始まり、id 0は231072を意味し、id1000は241072を意味します。
dbus-user-sessionをインストールします およびfuse-overlayfs パッケージ。
Debianの場合、コマンドを使用してdbus-user-sessionをインストールします:
sudo apt install -y dbus-user-session
次に、fuse-overlayfsをインストールします:
sudo apt install -y fuse-overlayfs
カーネル5.11以降を使用することをお勧めします。
今、あなたは主要な部分に来ます。最初の部分は通常のDockerインストールであり、次にルートレス部分に進みます。
Ubuntuの手順を示します。
最初に既存のDockerパッケージをアンインストールします:
sudo apt remove docker docker-engine docker.io containerd runc
次に、UbuntuにDockerをインストールします:
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io
hello-worldイメージを実行して、DockerEngineが正しくインストールされていることを確認します。
sudo docker run hello-world
Dockerデーモンがすでに実行されていることを考慮して、最初に無効にします。
sudo systemctl disable --now docker.service docker.socket
次に、curlコマンドを使用して公式スクリプトをダウンロードしてdocker-ce-rootless-extrasパッケージをインストールします。
curl -fsSL https://get.docker.com/rootless | sh
画面上の提案に従うと、ルートレスDockerがインストールされます。
このインストール画面の最後に、 export =xxxという2つの内容が表示されます。
それらをコピーして最後の.bashrcファイルに貼り付けるか、ZSHを使用している場合は.zshrcファイルに貼り付けます。変更したrcファイルを入手します。
インストールが完了したら、daemondockerrootlessを実行します。
systemctl --user start docker
起動するたびにrootlessdockerを自動的に実行します:
systemctl --user enable docker
sudo loginctl enable-linger $(whoami)
楽しんでください。
作成者情報:Mead Najiは、Web開発者であり、昔ながらのLinux開発者です。