Does setuid=on work on ZFS datasets, or is the man page for zfs misleading?

Stilez Stilezy stilezy at gmail.com
Fri Apr 6 13:12:42 UTC 2018


Thanks Andriy,

Please read in the manual what ZFS setuid property means.
By the way, it's on by default, so you would typically turn it off if you
don't
want suid binaries.  And, of course, suiddir != setuid and ZFS does not
support
it, afaict.
TLDR: yes, setuid works; no, it's not suiddir.


I did look up the ZFS setuid property in the man pages. If there are there
pages I missed, can you point me to them (and sorry for not finding them!)


*[man zfs]:*
     setuid=on | off
       Controls whether the set-UID bit is respected for the file system.

       [Does not say anything else, seems perfectly clear]


*[man chmod]* - where it's documented what the set-UID bit does when set on
a file system:

    4000 (the setuid bit).
      Directories with this bit set will force all files and sub-
      directories created in them to be owned by the directory
      owner and not by the uid of the creating process, if the
      underlying file system supports this feature...

      [Does **not** say that mount -o suiddir is/isn't required, or
is/isn't a "blocker".
       Just says "see suiddir mounting option". But zfs man page has
already said
       the bit **will** be respected. It's a bit conflicting.]


Like I said, the man pages seem a bit conflicted. *[man zfs]* definitely
says it provides an option for the setuid bit to be respected for the file
system - it doesn't say "for files only" or any other limitation. It just
says that setuid will be "respected for the file system" if the flag is
enabled on the dataset.  *[man chmod]* describes what happens if setuid is
"respected on a file system". It's clear that this will force+inherit
directory ownership "if the underlying file system supports this feature".
As [man zfs] already says set_UID will be "respected", set-UID is clearly
supported by ZFS.

As you can see, I did read the man pages carefully. That's why I asked help
to understand if it was documentation, implementation, or invocation, which
was the issue.
If the zfs setuid property *doesn't* mean the same as normal enabling of
the setuid bit functionality, then the [man zfs] page is misleading. If it
works only for files but not for directories, it's also misleading.  So I
hope you can see, I'm not asking because of failure to read the man pages.
I really did read, and followed them carefully, before asking.

So your answer was helpful (thank you!), even if I don't understand what
info I didn't read in the man pages. I have 2 quick points arising:


   1. I gather from your reply that even with this flag set, set-UID for
   ZFS based directories' ownership/inheritance is not "respected for the file
   system" - or not fully respected in the sense normally understood as in
   [man chmod]?  If that's the case then [man zfs] is incorrect - please can
   you confirm exactly what is this flag's functionality, since it's unclear?

   2. Returning to the original issue, is there any way one can
   automatically force owner+owner inheritance, for data in a zfs dataset?


Thank you for your help, even if not the ideal answer.
I hope these last couple of points are easy to clear up, and not annoying :)

Stilez



On 6 April 2018 at 13:31, Andriy Gapon <avg at freebsd.org> wrote:


> On 05/04/2018 18:53, Stilez Stilezy wrote:
> > I'm trying to use the setuid property in ZFS.
> >
> > The man pages are a bit conflicted but overall man zfs seems most
> specific
> > and implies the property is valid (man zfs says use setuid=on and it'll
> > work, man mount says use -o suiddir but won't work except on UFS).
>
> Please read in the manual what ZFS setuid property means.
> By the way, it's on by default, so you would typically turn it off if you
> don't
> want suid binaries.  And, of course, suiddir != setuid and ZFS does not
> support
> it, afaict.
>
> TLDR: yes, setuid works; no, it's not suiddir.
>
> --
> Andriy Gapon
>
>


More information about the freebsd-fs mailing list