ホストのユーザー名前空間の共有

ホストのユーザー名前空間を共有する例外を減らし、実際の UID マッピングを確認してください。

説明

ユーザー名前空間は、コンテナー内とホストのユーザーの対応付けを管理します。ホストの名前空間を直接共有すると、権限境界が弱くなる場合があります。

Docker デーモンが userns-remap を使う場合、userns_mode: host はそのコンテナーの再マッピングを無効にします。ホストの ID と直接対応することで、コンテナー侵害時の影響が広がるおそれがあります。

想定される影響

  • コンテナーとホストのユーザー間の権限境界が弱くなる場合があります。
  • 権限に関する脆弱性がホストへ及ぼす影響が大きくなるおそれがあります。
  • ユーザー権限の追跡や分離ポリシーの管理が難しくなる場合があります。

対処方法

  • 不要な userns_mode: host を削除し、デーモンの userns-remap 設定と実際の UID/GID マッピングを確認してください。項目の省略だけでは再マッピングは有効になりません。
  • 権限の問題にはユーザー再マッピングや rootless 実行も検討し、バインドマウントの所有権と互換性をテストしてください。
  • 名前空間の例外はデバッグ環境と本番環境で分けて管理してください。

例

二つの例はコンテナー単位の host 例外の有無を比較します。イメージとホストのユーザー名前空間設定を合わせて確認してください。

変更前

yaml
services:
  service1:
    image: service1:3.4
    userns_mode: host

変更後

yaml
services:
  service1:
    image: service1:3.4

補足:

  • 変更前: デーモンが userns-remap を使っていても、このコンテナーでは再マッピングを無効にします。
  • 変更後: host 例外を削除し、デーモン設定に従います。実際にユーザー再マッピングを使うには、デーモン側の設定が必要です。

参考資料