LinuCレベル3 セキュリティスペシャリスト 堅牢なコンテナ設計 問9
堅牢なコンテナ設計/コンテナのアクセス制御と権限制御docker run のオプションによるコンテナの権限制御に関する説明として、正しいものをすべて選べ。
当サイトのオリジナル問題(LinuCレベル3 セキュリティスペシャリストの出題範囲「堅牢なコンテナ設計」に対応。実際の試験問題ではありません)
- A--security-opt no-new-privileges を付けると、コンテナ内でrootとして動くプロセスからもすべてのケーパビリティが外される
- B--read-only を付けるとコンテナのルートファイルシステムが読み取り専用になり、書き込みが必要な場所は --tmpfs やボリュームで用意する
- C-v /srv/data:/data:ro でマウントしても、コンテナ内のrootは mount -o remount,rw /data で既定の状態のまま書き込み可能に戻せる
- D--pids-limit 200 を付けるとコンテナ内で同時に存在できるプロセス数が制限され、fork爆弾などでホストの資源を使い尽くされにくくなる
正解:B、D
解説
--read-only はコンテナのルートファイルシステムを読み取り専用でマウントし、侵入者による実行ファイルの改ざんやツールの設置を難しくします。一時ファイルなど書き込みが必要な場所は --tmpfs /tmp やボリュームで個別に用意します。--pids-limit はcgroupのpidsコントローラを使ってコンテナ内のプロセス数に上限を設け、fork爆弾などによる資源の枯渇を防ぎます。no-new-privileges は、execve でsetuidプログラムなどを実行したときに新たな特権を得させない設定で、既に持っているケーパビリティを外すものではありません。既定のコンテナは CAP_SYS_ADMIN を持たず、seccompやAppArmorでもmountが制限されるため、読み取り専用のバインドマウントを再マウントで書き込み可能に戻すことはできません。
選択肢ごとの解説
- A誤り。no-new-privileges は、setuidプログラムやファイルケーパビリティで新たな特権を得られなくするもので、既に持っているケーパビリティは外しません。外すには --cap-drop を使います。
- B正しい。--read-only でルートファイルシステムが読み取り専用になり、書き込みが必要な場所は --tmpfs やボリュームで個別に用意します。
- C誤り。既定のコンテナは CAP_SYS_ADMIN を持たず、seccompやAppArmorでもmountが制限されるため、コンテナ内のrootでも再マウントで書き込み可能には戻せません。
- D正しい。--pids-limit はpidsコントローラでコンテナ内のプロセス数に上限を設け、fork爆弾などによる資源の枯渇を防ぎます。