ルートレスコンテナ: UID

更新


名前空間ごとのリソース利用

ホストからはコンテナで実行したプロセスも見える

User名前空間

ホスト側で見るプロセスのUIDはどうなるか?

以降、GIDでも同様の仕組み。

ユーザ名とUID


ルートレスコンテナとUID

/etc/subuid (ホスト)

ホストユーザ:UID開始番号:UID総数

ユーザ1:100000:65536
ユーザ2:165536:65536

上記ユーザ1が実行したルートレスコンテナ(--userあり)のプロセスの、ホストにおけるUIDは、100000から165535の範囲になる。

/proc/PID/uid_map (コンテナ)

コンテナ側UID ホスト側UID開始番号 UID総数

# 例
image=docker.io/library/alpine:3
# 一般ユーザで実行
podman run --rm $image cat /proc/self/uid_map
0       1000          1
1     100000      65536

podman top コンテナ名 huser,user,hgroup,group


podman run --user コンテナ一般ユーザ

ホストユーザ例 alice

grep $USER /etc/passwd /etc/subuid
/etc/passwd:alice:x:1002:1002:alice:/home/alice:/bin/bash

/etc/subuid:alice:231072:65536

コンテナユーザ例 guest

image=docker.io/library/alpine:3
podman run --rm -it $image \
  grep guest /etc/passwd
guest:x:405:100:guest:/dev/null:/sbin/nologin

ルートレス実行

# aliceが実行
container=temp
podman run --rm -dit --name $container --user guest \
  $image  sleep 999

コンテナ内でpsコマンド

podman exec $container ps -o pid,user,group,args
PID   USER     GROUP    COMMAND
    1 guest    users    sleep 999

/proc/1/uid_map/proc/1/gid_map

podman exec $container \
  cat /proc/1/uid_map  /proc/1/gid_map
0       1002          1
1     231072      65536

0       1002          1
1     231072      65536

podman top

podman top $container huser,user,hgroup,group
HUSER    USER    HGROUP   GROUP
231476   guest   231171   users

ホストでpsコマンド

ps -A -o pid,user,group,args | grep sleep
  30471 231476   231171   sleep 999