Re: mount_service: possible implementation changes

Skye Soss <[email protected]> Thu, 09 Jul 2026 11:57:48 -0500
Newsgroups dev.linux.lists.fuse-devel
Message-ID <[email protected]>
 > On Mon, Jul 06, 2026 at 05:26:18PM -0500, Skye Soss wrote: 
 > > ...
 > > Ie. The fuservicemount binary would be a non-setuid binary, and simply 
 > > communicate with a socket in /run that is backed by a privileged 
 > > socket-activated service. Upon activation, the service would use the 
 > > peer credentials to enforce limits such as `mount_max`, and configure 
 > > `/dev/fuse`. Finally, it would spawn the sandboxed systemd unit to run 
 > > the filesystem, using `--scope` to transfer the file descriptors to 
 > > the new process, or using socket activation with a socket file that 
 > > only root can read and write to. 
 >  
 > How do you get the socket-activated part of fuservicemount to call 
 > move_mount() (mounting) and openat() (resource acquisition) in the same 
 > mount namespace as the directly-invoked part of fuservicemount?  A 
 > socket service has no idea what namespace(s) are in use by the client; 
 > its entire relationship with the client is limited to whatever is shared 
 > through the socket.

A privileged service can enter the mount namespace of its peer by obtaining
the pid via SO_PEERPIDFD, and passing /proc/$pid/ns/mnt to setns().

SO_PEERPIDFD is Linux kernel 6.5+, but the commit message alludes to a
portable alternative if we need to support older kernels
(ba47545c756b55f4b114c45fea7d52dd1577e181).

 > > The advantage of this approach over the current design is 
 > > compatibility with containers with the no_new_privileges security 
 > > feature enabled. That disables privilege-elevation through execve (ie. 
 > > setuid and setcaps binaries), but the use of systemd socket activation 
 > > would still work. 
 >  
 > Yes, though this adds more moving parts to the machinery.

I'm not sure it does because the `fuservicemount` binary would no longer be
security-sensitive. Ie. it would remove all of the `drop_privs`/`restore_privs`
calls that litter the mount_service file, as there will now only be one
privilege transfer boundary.

 > I am, of course, curious to read any patches you have implementing this. 

Thanks for the interest! I'll try to write something up next week.