開発中にDocker "エンジン"をsudo
実行し続ける必要がありますか?それはあなたがすることですか?ドッカーを運営していますsudo -i
か?それとも、sudoにタイマーを設定しますか?キー/パスマネージャを有効にするのと同じように、より便利に機能する安全な方法はありますか?
背景
DockerのWebサイトに「デスクトップ」をインストールするように求められた(エンジンもありますが、「エンジン」URLエンドポイントもデスクトップに接続されています)、Linuxでエンジンを使用することを検討するいくつかの状況に直面しました。
答え1
1. ホストで root として docker を使用するのとは異なり
Docker Desktopは以下で実行されるため、より安全です。仮想デバイス。つまり、docker-desktopアクセス権を持つ破損したユーザーは、ホストシステム全体ではなく、dockerコンテナとdockerエンジンにのみ損傷を与える可能性があります。
したがって、ホストシステムでrootとして実行されるdockerデーモンは、常にこのセキュリティ上の脆弱性に対して脆弱です。それがまさにそれです。
少なくともVirtualMachineコンテナを持たないホストでルートデーモンとして実行すると、常にルートターミナルに接続されます。
docker run -it --rm --privileged --pid=host ubuntu:latest nsenter -at 1
2. 仮想マシンの Docker エンジン(デスクトップなし)
バインドマウント操作の意味を理解する必要がありますが、仮想マシンで直接dockerを実行するのを妨げるものはありません。
3. ルートではなくドッカー
他のオプションは、root以外のユーザーとしてdockerを実行することです。これは、docker自体がシステムへのアクセス権がはるかに少ないことを意味しますが、docker内で実行できる操作に制限が追加されます。ねえ:https://docs.docker.com/engine/security/rootless/
- 次のストレージドライバのみがサポートされています。
- overlay2(カーネル5.11以降またはUbuntuスタイルのカーネルを実行している場合のみ)
- fusion-overlayfs(カーネル4.18以降を実行し、fusion-overlayfsがインストールされている場合のみ)
- btrfs (カーネル 4.18 以降で実行する場合、または user_subvol_rm_allowed マウントオプションを使用して ~/.local/share/docker をマウントする場合のみ) -vfs
- Cgroup は、cgroup v2 および systemd で実行する場合にのみサポートされます。リソースの制限を参照してください。
- 次の機能はサポートされていません。
- 鎧を適用
- 検問所
- オーバーレイネットワーク
- SCTPポート露出
- ping コマンドを使用するには、ping パケットのルーティングをご覧ください。
- 特権TCP / UDPポート(< 1024)を公開するには、特権ポートの公開を参照してください。
- docker Inspectに表示されるIPAddressは、RootlessKitのネットワーク名前空間内で名前が付けられています。つまり、ネットワーク名前空間を入力しないと、ホスト(IPアドレス)からその名前空間にアクセスできなくなります。
- ホストネットワーク(docker run --net = host)もRootlessKitで内部的に名前が付けられています。
- NFSのDocker「データルート」マウントはサポートされていません。この制限は、ルートレスモードに限定されません。
4.パスワードで保護された専用Dockerユーザーを作成する
アクセスできる専用ユーザーの作成
sudo -iu docker-admin-user