LinuCレベル3 セキュリティスペシャリスト 堅牢なコンテナ設計 問1
堅牢なコンテナ設計/コンテナのアクセス制御と権限制御docker run に --privileged を付けて起動したコンテナの説明として適切なものはどれか。
当サイトのオリジナル問題(LinuCレベル3 セキュリティスペシャリストの出題範囲「堅牢なコンテナ設計」に対応。実際の試験問題ではありません)
- Aコンテナ内のプロセスがホストのrootと同じUIDで動作するようになるが、ケーパビリティの既定値は変わらない
- Bホストのネットワーク名前空間を共有するようになるが、デバイスやケーパビリティに対する制限は通常どおりである
- C読み取り専用のルートファイルシステムで起動され、書き込みはtmpfsやボリュームに限定されるようになる
- D全ケーパビリティとホストの全デバイスへのアクセスが与えられ、既定のseccompやAppArmorの制限も外れる
正解:D
解説
--privilegedは、コンテナにホストとほぼ同等の権限を与えるオプションです。すべてのLinuxケーパビリティが有効になり、ホストのすべてのデバイスにアクセスでき、既定のseccompプロファイルやAppArmorプロファイル、SELinuxのプロセスラベルによる制限も無効になります。コンテナからホストを乗っ取られる危険が大きいため、必要な権限だけを --cap-add や --device で個別に与えるのが基本です。ホストのネットワークを共有するのは --network host、読み取り専用のルートファイルシステムは --read-only の役割です。
選択肢ごとの解説
- A誤り。--privilegedはUIDの対応付けを変えるオプションではありません。全ケーパビリティが有効になるなど、ケーパビリティの既定値も大きく変わります。
- B誤り。ホストのネットワーク名前空間を共有するのは --network host です。--privilegedはデバイスやケーパビリティの制限を外します。
- C誤り。ルートファイルシステムを読み取り専用にするのは --read-only です。--privilegedはむしろ制限を緩めるオプションです。
- D正しい。全ケーパビリティとホストの全デバイスが与えられ、既定のseccomp・AppArmor・SELinuxによる制限も外れるため、非常に危険です。