Definition

podman allows you to enter another USER and MNT namespace without starting a container, to see what’s going on without going beyond the normal process (by the way, this is just a convenient add-on to the regular unshare command)

Preparation

Let’s check the behavior in another USER namespace:

# See UID mapping
podman unshare cat /proc/self/uid_map

# Will show nobody
podman unshare ls -ld /

# Checi the USER/MNT namespace booth on the host and in an isolated namespace
ls -l /proc/self/ns/user /proc/self/ns/mnt
podman unshare ls -l /proc/self/ns/user /proc/self/ns/mnt

Let’s check the behavior in another MNT namespace:

echo hello > /tmp/testfile
mount --bind /tmp/testfile /etc/shadow
mount: /etc/shadow: must be superuser to use mount.

podman unshare bash -c "mount -o bind /tmp/testfile /etc/shadow; cat /etc/shadow"
hello

Practice

Now let’s move on to viewing the contents of the image using podman mount

In general, the command for viewing looks like this: podman mount <URL/Image> (you can use the image name or path to it for podman pull)

However podman mount requires either elevated privileges or running in an isolated USER namespace, and here the podman unshare command comes to the rescue, which creates a dedicated USER and MNT namespace

In addition, you will need the podman image mount command, which mounts the FS from the image to the host FS and displays the full path to it on the host

Let’s try:

# Enter another namespace
podman unshare

# Write path to a variable
mnt=$(podman image mount <URL/image>)

# Now we can view image filesystem without running
ls $mnt/var/
cat $mnt/etc/shadow

# To exit
podman image unmount <URL/image>
exit