mirror of
https://github.com/linuxkit/linuxkit.git
synced 2025-07-19 17:26:28 +00:00
31 lines
1.1 KiB
Markdown
31 lines
1.1 KiB
Markdown
## shiftfs
|
|
|
|
Shiftfs is a virtual filesystem for mapping mountpoints across user namespaces.
|
|
The idea is that it would be useful for dockerds spawning containers: they can
|
|
keep filesystems on the host disk in terms of real root, but mount the
|
|
container roots via shiftfs, allowing containers to share a particular
|
|
filesystem with different uid maps, while not having to uidshift every file on
|
|
disk (and thus destroying some of the sharing properties).
|
|
|
|
The version included here is the v2 version of shiftfs, using the superblock's
|
|
user namespace instead of mountopts to figure out mappings. Thus, an extra step
|
|
of "marking" mounts is needed. For example:
|
|
|
|
# mkdir source
|
|
# touch source/foo # a root owned file
|
|
# mount -t shiftfs -o mark source source
|
|
# chmod 777 source
|
|
|
|
Now, let's make a user namespace:
|
|
|
|
# setuid 1000 unshare -rm
|
|
# cat /proc/self/uidmap
|
|
0 1000 1
|
|
# mkdir dest
|
|
# mount -t shiftfs source dest
|
|
# stat dest/foo | grep Uid
|
|
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
|
|
|
|
And thanks to the magic of shiftfs, the file is root owned in the user
|
|
namespace.
|