Skip to content

Commit cfcf4eb

Browse files
committed
Map the host UID into the container
Assuming a host UID of 1000, the UID mapping inside the user namespace created by rootless podman for the toolbox container was: 0 1000 1 1 100000 65536 ... which was the same as seen from the host: 0 1000 1 1 100000 65536 Therefore, when running with an UID of 1000 inside the container, it got mapped to UID 100999 on the host. That means, for example, files created by the user inside the container end up looking funny from the host. This is addressed by creating another user namespace that's a child of the initial user namespace created by rootless podman. Assuming a host UID of 1000, the UID mapping inside this child namespace is: 1000 0 1 0 1 1000 1001 1001 64536 ... which when seen from the host is: 1000 1000 1 0 100000 1000 1001 101000 64536 This means that UID 1000 inside the child namespace is mapped to the same UID 1000 on the host via the intermediate namespace created by rootless podman. UIDs 0 to 999 inside the child namespace are mapped to UIDs 100000 to 100999 in the host. This change requires this runc pull request to work: opencontainers/runc#1862 As suggested by Giuseppe Scrivano.
1 parent a878a1f commit cfcf4eb

File tree

1 file changed

+6
-0
lines changed

1 file changed

+6
-0
lines changed

fedora-toolbox

+6
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,9 @@ create()
8888
fi
8989
fi
9090

91+
max_uid_count=65536
92+
max_minus_uid=$((max_uid_count-UID))
93+
uid_plus_one=$((UID+1))
9194
if ! podman create \
9295
--hostname toolbox \
9396
--interactive \
@@ -96,6 +99,9 @@ create()
9699
--privileged \
97100
--security-opt label=disable \
98101
--tty \
102+
--uidmap $UID:0:1 \
103+
--uidmap 0:1:$UID \
104+
--uidmap $uid_plus_one:$uid_plus_one:$max_minus_uid \
99105
--volume $HOME:$HOME \
100106
--volume $XDG_RUNTIME_DIR:$XDG_RUNTIME_DIR \
101107
$toolbox_image \

0 commit comments

Comments
 (0)