LinuCレベル3 セキュリティスペシャリスト 堅牢なコンテナ設計 問6
堅牢なコンテナ設計/Rootless モードRootlessモードのDockerを使うには、newuidmap・newgidmap コマンド(uidmapパッケージ等で提供)がインストールされている必要がある。これらのコマンドが必要とされる理由として適切なものはどれか。
当サイトのオリジナル問題(LinuCレベル3 セキュリティスペシャリストの出題範囲「堅牢なコンテナ設計」に対応。実際の試験問題ではありません)
- Aコンテナイメージのファイルの所有者を、ダウンロード時に利用者自身のUIDとGIDへ書き換えておく必要があるため
- B一般ユーザーのプロセスは自身のUID等しか対応付けられず、/etc/subuid 等の範囲の対応付けには特権が必要なため
- CRootlessモードの初回起動時に、/etc/subuid と /etc/subgid へ利用者用の範囲を自動的に追記する必要があるため
- Dコンテナの中のUID 0をホストのrootに対応付けて、コンテナ内で管理者の操作を行えるようにする必要があるため
正解:B
解説
Rootlessモードでは、ユーザー名前空間を作り、コンテナ内のUID・GIDをホスト上の別のIDに対応付けます。特権を持たないプロセスがユーザー名前空間の uid_map に書き込めるのは、自身のUIDを1つ対応付ける行だけです。コンテナ内で多数のUIDを使うには、/etc/subuid・/etc/subgid で利用者に割り当てられた範囲を対応付ける必要があり、この書き込みをsetuid(またはファイルケーパビリティ)付きの newuidmap・newgidmap が代わりに行います。これらは /etc/subuid 等を確認し、許可された範囲だけを書き込みます。
選択肢ごとの解説
- A誤り。イメージのファイルの所有者を書き換えるのではなく、ユーザー名前空間のUIDとGIDの対応付けを設定するためのコマンドです。
- B正しい。一般ユーザーが対応付けられるのは自身のIDだけなので、/etc/subuid・/etc/subgid で許可された範囲の対応付けを特権付きのこれらのコマンドが書き込みます。
- C誤り。newuidmap・newgidmap は /etc/subuid 等を読むだけで、範囲を追記しません。範囲の登録は useradd や管理者の編集で行います。
- D誤り。Rootlessモードでは、コンテナ内のUID 0は利用者自身のUIDに対応付けられ、ホストのrootにはなりません。