Dock Stay
非特権ユーザーで動かす - rootless の使い方・オプション・サンプル

非特権ユーザーで動かす - rootless

コンテナランタイムとコンテナ内プロセスを非特権ユーザーで動かす方式。万一コンテナから脱出されてもホスト側で root を奪われない構成にできる。Podman はデフォルト、Docker もオプションで対応。

概念図

rootless diagram

構文

bash
dockerd-rootless-setuptool.sh install
podman run --rm alpine id

実例

Docker を rootless モードでインストール

bash
dockerd-rootless-setuptool.sh install

ユーザー単位で Docker デーモンを起動

bash
systemctl --user start docker

Podman はインストール直後から rootless で動く

bash
podman run --rm -it alpine sh

概要

従来の Docker はデーモンを root で動かし、Docker ソケットにアクセスできるユーザーは実質 root 相当の権限を得ていました。

Rootless モードではデーモン自体を一般ユーザーの UID で起動し、user namespace を使ってコンテナ内 root をホスト側の一般 UID にマッピングします。

これにより、コンテナ内でのファイル作成・権限昇格・bind mount などがすべて起動ユーザーの権限内に収まり、コンテナ脱出時のホスト影響が大幅に小さくなります。

Podman はこの方式を最初から前提に設計されており、Docker も 20.10 以降で正式サポートされています。

典型的な用途

  • 開発者マシンでの日常利用(手元で root 権限を振り回したくない)
  • 共有サーバー / HPC 環境で、複数ユーザーが互いに干渉せずコンテナを使う
  • CI ランナーで信頼境界を 1 段増やす
  • セキュリティ要件が厳しい組織での Docker 利用(監査対応)
  • 教育環境・研究環境で root を配らずにコンテナを体験させる

コマンド例

# Docker を rootless で有効化
dockerd-rootless-setuptool.sh install
export DOCKER_HOST=unix:///run/user/$(id -u)/docker.sock
docker info | grep -i rootless

# Podman は追加設定なしで動く
podman run --rm -it alpine id
# uid=0(root) gid=0(root) ← 見かけ上 root だが、ホストから見ると一般 UID

# ホスト側で実際の UID を確認
ps -eo uid,cmd | grep containerd

ベストプラクティス

  • 新規導入のサーバーは最初から rootless(または Podman)で始め、root デーモン前提のスクリプトを書かない
  • 1024 番未満のポートを使う場合は sysctl net.ipv4.ip_unprivileged_port_start=80setcap cap_net_bind_service で対処する
  • subuid / subgid を十分な範囲(65536 × ユーザー数以上)確保して user namespace の UID 不足を防ぐ
  • ルートフル Docker と併用する場合は CLI の向き先(DOCKER_HOST)を明示し、誤って特権側に push しない
  • cgroup v2 を有効にしたディストリビューション(Ubuntu 22.04+、RHEL 9+)を選ぶとリソース制限がフルに使える

注意点

  • OverlayFS のネイティブ利用がカーネル 5.11 以前では制限され、fuse-overlayfs にフォールバックして IO が遅くなる場合がある
  • ping がデフォルトで使えない(net.ipv4.ping_group_range の調整が必要)
  • AppArmor / SELinux と組み合わせる場合、プロファイルがルートレス前提で書かれていないと起動失敗が起きる
  • --privileged--network=host はルートレス環境では事実上使えない・機能が限られる
  • systemd サービスとして動かす場合は loginctl enable-linger <user> を忘れるとログアウト時にデーモンが止まる

関連トピック