Thread (82 messages) 82 messages, 7 authors, 2021-01-20

Re: [PATCH v5 00/42] idmapped mounts

From: Christian Brauner <hidden>
Date: 2021-01-14 17:56:03
Also in: linux-ext4, linux-fsdevel, linux-integrity, linux-security-module, linux-xfs, selinux

On Thu, Jan 14, 2021 at 09:12:41AM -0800, Darrick J. Wong wrote:
On Tue, Jan 12, 2021 at 11:00:42PM +0100, Christian Brauner wrote:
quoted
Hey everyone,

The only major change is the inclusion of hch's patch to port XFS to
support idmapped mounts. Thanks to Christoph for doing that work.
Yay :)
quoted
(For a full list of major changes between versions see the end of this
 cover letter.
 Please also note the large xfstests testsuite in patch 42 that has been
 kept as part of this series. It verifies correct vfs behavior with and
 without idmapped mounts including covering newer vfs features such as
 io_uring.
 I currently still plan to target the v5.12 merge window.)

With this patchset we make it possible to attach idmappings to mounts,
i.e. simply put different bind mounts can expose the same file or
directory with different ownership.
Shifting of ownership on a per-mount basis handles a wide range of
long standing use-cases. Here are just a few:
- Shifting of a subset of ownership-less filesystems (vfat) for use by
  multiple users, effectively allowing for DAC on such devices
  (systemd, Android, ...)
- Allow remapping uid/gid on external filesystems or paths (USB sticks,
  network filesystem, ...) to match the local system's user and groups.
  (David Howells intends to port AFS as a first candidate.)
- Shifting of a container rootfs or base image without having to mangle
  every file (runc, Docker, containerd, k8s, LXD, systemd ...)
- Sharing of data between host or privileged containers with
  unprivileged containers (runC, Docker, containerd, k8s, LXD, ...)
- Data sharing between multiple user namespaces with incompatible maps
  (LXD, k8s, ...)
That sounds neat.  AFAICT, the VFS passes the filesystem a mount userns
structure, which is then carried down the call stack to whatever
functions actually care about mapping kernel [ug]ids to their ondisk
versions?
Yes. This requires not too many changes to the actual filesystems as you
can see from the xfs conversion that Christoph has done.
Does quota still work after this patchset is applied?  There isn't any
mention of that in the cover letter and I don't see a code patch, so
does that mean everything just works?  I'm particularly curious about
The most interesting quota codepaths I audited are dquot_transfer that
transfers quota from one inode to another one during setattr. That
happens via a struct iattr which will already contain correctly
translated ia_uid and ia_gid values according to the mount the caller is
coming from. I'll take another close look at that now and add tests for
that if I can find some in xfstests.
whether there can exist processes with CAP_SYS_ADMIN and an idmapped
mount?  Syscalls like bulkstat and quotactl present file [ug]ids to
Yes, that should be possible.
programs, but afaict there won't be any translating going on?
quotactl operates on the superblock. So the caller would need a mapping
in the user namespace of the superblock. That doesn't need to change.
But we could in the future extend this to be on a per-mount basis if
this was a desired use-case. I don't think it needs to happen right now
though.
(To be fair, bulkstat is an xfs-only thing, but quota control isn't.)
I'm certain we'll find more things to cover after the first version has
landed. :)
We for sure won't cover it all in the first iteration.
I'll start skimming the patchset...
Thanks!
Christian
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help