LinuCレベル3 セキュリティスペシャリスト 堅牢なコンテナ設計 問5
堅牢なコンテナ設計/コンテナのアクセス制御と権限制御Dockerで、80番ポートで待ち受けるWebサーバーのコンテナを起動する。コンテナが持つLinuxケーパビリティを CAP_NET_BIND_SERVICE だけにしたい。docker run に指定するオプションとして適切なものはどれか。
当サイトのオリジナル問題(LinuCレベル3 セキュリティスペシャリストの出題範囲「堅牢なコンテナ設計」に対応。実際の試験問題ではありません)
- A--cap-add=NET_BIND_SERVICE
- B--cap-drop=NET_BIND_SERVICE --cap-add=ALL
- C--security-opt no-new-privileges --cap-add=NET_BIND_SERVICE
- D--cap-drop=ALL --cap-add=NET_BIND_SERVICE
正解:D
解説
Dockerのコンテナは、既定でCHOWN、SETUID、NET_RAWなど、一部のケーパビリティを持った状態で起動します。--cap-add は既定の集合に追加するだけなので、必要なものだけにするには --cap-drop=ALL で既定の集合をすべて外してから、--cap-add で必要なものを加えます。これは最小権限の原則に沿った設定で、侵害されたときにコンテナ内のプロセスができることを減らせます。no-new-privileges はsetuidプログラム等による権限の上昇を防ぐ設定で、ケーパビリティの集合を絞る働きはありません。
選択肢ごとの解説
- A誤り。--cap-add は既定のケーパビリティに追加するだけなので、CHOWNやSETUIDなど既定のケーパビリティも残ります。
- B誤り。--cap-add=ALL ですべてのケーパビリティを加えることになり、目的とは逆に権限が大きく広がります。
- C誤り。no-new-privileges は実行時の権限の上昇を防ぐ設定で、既定のケーパビリティを外す働きはありません。
- D正しい。--cap-drop=ALL で既定のケーパビリティをすべて外し、--cap-add で NET_BIND_SERVICE だけを加えています。