LinuCレベル3 セキュリティスペシャリスト 堅牢なコンテナ設計 問4
堅牢なコンテナ設計/Rootless モードRootlessモードのDockerをsystemdのユーザーサービスとして運用する際の説明として、正しいものをすべて選べ。
当サイトのオリジナル問題(LinuCレベル3 セキュリティスペシャリストの出題範囲「堅牢なコンテナ設計」に対応。実際の試験問題ではありません)
- Adockerdは一般ユーザーの権限で動くため、既定で1024未満のポートもそのままホストに公開できる
- Bデーモンは systemctl --user start docker のように、ユーザー単位のsystemdで起動・管理する
- Csystemctl --user enable docker を実行するだけで、ログアウト後もデーモンが動き続ける
- Dデーモンのソケットは $XDG_RUNTIME_DIR/docker.sock に置かれ、DOCKER_HOST でそこを指す
正解:B、D
解説
RootlessモードのDockerデーモンは、systemdのユーザーインスタンスが管理するユーザーサービスとして動かし、systemctl --user で起動・停止・自動起動の設定を行います。ソケットは /var/run/docker.sock ではなく $XDG_RUNTIME_DIR(通常は /run/user/<UID>)配下に作られるため、クライアントは DOCKER_HOST=unix://$XDG_RUNTIME_DIR/docker.sock で接続します。ユーザーのsystemdインスタンスは既定ではログアウトとともに終了するので、常時稼働させるには loginctl enable-linger でリンガリングを有効にします。また特権ポートの公開には、rootlesskitへのCAP_NET_BIND_SERVICEの付与や net.ipv4.ip_unprivileged_port_start の変更が必要です。
選択肢ごとの解説
- A誤り。一般ユーザーの権限では1024未満のポートを既定で公開できません。rootlesskitにCAP_NET_BIND_SERVICEを付与するか、net.ipv4.ip_unprivileged_port_start を下げる必要があります。
- B正しい。Rootlessモードのデーモンはユーザーサービスとして動かし、systemctl --user で管理します。
- C誤り。enableはユーザーのログイン時に起動させる設定です。ログアウト後も動かし続けるには、loginctl enable-linger でリンガリングを有効にする必要があります。
- D正しい。ソケットはユーザーごとの $XDG_RUNTIME_DIR 配下に作られるため、DOCKER_HOST でそのパスを指定して接続します。