1.8. ルートレスコンテナーに関する特別な考慮事項

root 以外のユーザーでコンテナーを実行する場合は、考慮事項が複数あります。

  • ホストコンテナーストレージへのパスは、root ユーザー (/var/lib/containers/storage) と root 以外のユーザー ($HOME/.local/share/containers/storage) との間では異なります。
  • ルートレスコンテナーを実行するユーザーには、ホストシステムでユーザー ID およびグループ ID の範囲として実行する特別な権限が付与されます。ただし、ホストのオペレーティングシステムに対する root 権限はありません。
  • etc/subuid/etc/subgid を手動で変更した場合、新しい変更を適用させるために podman system migrate コマンドを実行する必要があります。
  • ルートレスコンテナー環境を設定する必要がある場合は、ホームディレクトリーに設定ファイルを作成します ($HOME/.config/containers)。設定ファイルには、storage.conf (ストレージ設定用) および containers.conf (さまざまなコンテナー設定用) が含まれます。また、registries.conf ファイルを作成し、Podman を使用してイメージをプル、検索、または実行する時に利用可能なコンテナーレジストリーを識別することもできます。
  • root 権限なしで変更できないシステム機能もいくつかあります。たとえば、コンテナー内で SYS_TIME 機能を設定し、ネットワークタイムサービス (ntpd) を実行してシステムクロックを変更できません。root としてコンテナーを実行し、ルートレスコンテナー環境を省略して root ユーザーの環境を使用する必要があります。以下に例を示します。

    # podman run -d --cap-add SYS_TIME ntpd

    この例では、ntpd がコンテナー内だけでなく、システム全体の時間を調整できることに注意してください。

  • ルートレスコンテナーは、1024 未満のポート番号にアクセスできません。たとえば、ルートレスコンテナーの namespace 内では、コンテナーの httpd サービスからポート 80 を公開するサービスを開始しますが、この namespace の外部からはアクセスできません。

    $ podman run -d httpd

    ただし、そのポートをホストシステムに公開するには、コンテナーには root ユーザーのコンテナー環境を使用するルート権限が必要です。

    # podman run -d -p 80:80 httpd
  • ワークステーションの管理者は、ユーザーが 1024 未満のポートでサービスを公開できるようにしますが、セキュリティーへの影響を理解する必要があります。たとえば、一般ユーザーは、公式のポート 80 で Web サーバーを実行し、外部ユーザーに対して、管理者が設定したと見せかけることができます。これは、テスト用のワークステーションで問題ありませんが、ネットワークにアクセス可能な開発サーバーでは適切ではなく、実稼働サーバーでは実行しないでください。ユーザーがポート 80 にバインドできるようにするには、次のコマンドを実行します。

    # echo 80 > /proc/sys/net/ipv4/ip_unprivileged_port_start