LinuCレベル3 セキュリティスペシャリスト 堅牢なコンテナ設計 問13
堅牢なコンテナ設計/コンテナのアクセス制御と権限制御Dockerコンテナを docker run で起動する際、--cap-add や --cap-drop を何も指定しなかった場合のLinuxケーパビリティに関する説明として適切なものはどれか。
当サイトのオリジナル問題(LinuCレベル3 セキュリティスペシャリストの出題範囲「堅牢なコンテナ設計」に対応。実際の試験問題ではありません)
- A既定ではホストのrootが持つすべてのケーパビリティ(CAP_SYS_ADMIN、CAP_NET_ADMIN等を含む)が付与され、--cap-drop で明示的に削減する必要がある
- B既定ではCHOWN、NET_BIND_SERVICE、SETUID等の限られたケーパビリティだけが付与され、CAP_SYS_ADMINやCAP_NET_ADMINは含まれない
- C既定ではケーパビリティは一切付与されないため、80番ポートの待ち受けやファイル所有者の変更などの基本的な操作にも --cap-add で個別に追加する必要がある
- D既定のケーパビリティはカーネルバージョンに合わせて自動で調整される仕組みで、新しいカーネルほど利用できるケーパビリティが増えてコンテナに付与される
正解:B
解説
Dockerは既定で約14個のケーパビリティ(CHOWN、DAC_OVERRIDE、FOWNER、FSETID、KILL、MKNOD、NET_BIND_SERVICE、NET_RAW、SETFCAP、SETGID、SETPCAP、SETUID、SYS_CHROOT、AUDIT_WRITE)をコンテナに付与します。CAP_SYS_ADMINやCAP_NET_ADMINなどの強力なケーパビリティは含まれません。これにより、コンテナ内のプロセスが通常のサーバー操作を行いつつ、ホストのカーネルやネットワーク設定を変更するような特権操作は制限されます。
選択肢ごとの解説
- A誤り。すべてのケーパビリティが付与されるのは --privileged を指定した場合の動作です。既定では限定されたケーパビリティだけが付与されます。
- B正しい。Dockerは既定で約14個のケーパビリティを付与しますが、CAP_SYS_ADMINやCAP_NET_ADMINなどホストに影響を及ぼす強力なケーパビリティは含まれていません。
- C誤り。一切付与されない状態は --cap-drop=ALL を指定した場合の動作です。既定ではコンテナの基本的な操作に必要なケーパビリティが付与されます。
- D誤り。既定のケーパビリティはDockerが定めた固定のリストであり、カーネルバージョンに応じて自動調整されるものではありません。