All of lore.kernel.org
 help / color / mirror / Atom feed
From: Scott Mayhew <smayhew@redhat.com>
To: Chuck Lever III <chuck.lever@oracle.com>
Cc: Linux NFS Mailing List <linux-nfs@vger.kernel.org>
Subject: Re: NFSv3 and xprtsec policies
Date: Thu, 2 May 2024 13:37:42 -0400	[thread overview]
Message-ID: <ZjPPZmBZJZVmBuA6@aion> (raw)
In-Reply-To: <100A1A35-2B53-46CA-A448-F82A95CA1EFA@oracle.com>

On Thu, 02 May 2024, Chuck Lever III wrote:

> 
> 
> > On May 2, 2024, at 11:54 AM, Scott Mayhew <smayhew@redhat.com> wrote:
> > 
> > Red Hat QE identified an "interesting" issue with NFSv3 and TLS, in that an
> > NFSv3 client can mount with "xprtsec=none" a filesystem exported with
> > "xprtsec=tls:mtls" (in the sense that the client gets the filehandle and adds a
> > mount to its mount table - it can't actually access the mount).
> > 
> > Here's an example using machines from the recent Bakeathon.
> > 
> > Mounting a server with TLS enabled:
> > 
> > # mount -o v4.2,sec=sys,xprtsec=tls oracle-102.chuck.lever.oracle.com.nfsv4.dev:/export/tls /mnt
> > # umount /mnt
> > 
> > Trying to mount without "xprtsec=tls" shows that the filesystem is not exported with "xprtsec=none":
> > 
> > # mount -o v4.2,sec=sys oracle-102.chuck.lever.oracle.com.nfsv4.dev:/export/tls /mnt
> > mount.nfs: Operation not permitted for oracle-102.chuck.lever.oracle.com.nfsv4.dev:/export/tls on /mnt
> > 
> > Yet a v3 mount without "xprtsec=tls" works:
> > 
> > # mount -o v3,sec=sys oracle-102.chuck.lever.oracle.com.nfsv4.dev:/export/tls /mnt
> > # umount /mnt
> > 
> > and a mount with no explicit version and without "xprtsec=tls" falls back to
> > v3 and also "works":
> > 
> > # mount -o sec=sys oracle-102.chuck.lever.oracle.com.nfsv4.dev:/export/tls /mnt
> > # grep ora /proc/mounts
> > oracle-102.chuck.lever.oracle.com.nfsv4.dev:/export/tls /mnt nfs
> > +rw,relatime,vers=3,rsize=524288,wsize=524288,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=100.64.0.49,mountvers=3,mountport=20048,mountproto=udp,local_lock=none,addr=100.64.0.49 0 0
> > 
> > Even though the filesystem is mounted, the client can't do anything with it:
> > 
> > # ls /mnt
> > ls: cannot open directory '/mnt': Permission denied
> > 
> > When krb5 is used with NFSv3, the server returns a list of pseudoflavors in
> > mountres3_ok (https://datatracker.ietf.org/doc/html/rfc1813#section-5.2.1).
> > The client compares that list with its own list of auth flavors parsed from the
> > mount request and returns -EACCES if no match is found (see
> > nfs_verify_authflavors()).
> > 
> > Perhaps we should be doing something similar with xprtsec policies?
> 
> The problem might be in how you've set up the exports. With NFSv3,
> the parent export needs the "crossmnt" export option in order for
> NFSv3 to behave like NFSv4 in this regard, although I could have
> missed something.

I was mounting your server though :)
> 
> 
> > Should
> > there be an errata to RFC 9289 and a request from IANA for assigned numbers for
> > pseudo-flavors corresponding to xprtsec policies?
> 
> No. Transport-layer security is not an RPC security flavor or
> pseudo-flavor. These two things are not related.
> 
> (And in fact, I proposed something like this for NFSv4 SECINFO,
> but it was rejected).

I thought it might be a stretch to try to use mountres3.auth_flavors for
this, but since RFC 9289 does refer to AUTH_TLS as an authentication
flavor and https://www.iana.org/assignments/rpc-authentication-numbers/rpc-authentication-numbers.xhtml
also lists TLS under the Flavor Name column I thought it might make
sense to treat xprtsec policies as if they were pseudo-flavors even
though they're not, if only to give the client a way to determine that
the mount should fail.

> 
> 
> > If not, this behavior should at least be documented in the man pages.
> 
> "crossmnt", and it's kin "nohide", are explained in exports(5).

rpc.mountd doesn't do any access checking based on xprtsec policies on
the export (or krb5 pseudo-flavors, for that matter), so I don't see how
"crossmount" or "nohide" would have any effect here.

-Scott
> 
> 
> --
> Chuck Lever
> 
> 


  reply	other threads:[~2024-05-02 17:37 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-05-02 15:54 NFSv3 and xprtsec policies Scott Mayhew
2024-05-02 16:15 ` Chuck Lever III
2024-05-02 17:37   ` Scott Mayhew [this message]
2024-05-02 17:51     ` Chuck Lever III
2024-05-02 18:51       ` Scott Mayhew
2024-05-02 19:25         ` Jeffrey Layton
2024-05-03 18:44         ` Chuck Lever
2024-05-03 20:53           ` Scott Mayhew
2024-05-03 22:31           ` Rick Macklem
2024-05-06 16:47             ` Scott Mayhew
2024-05-06 22:41               ` Rick Macklem

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=ZjPPZmBZJZVmBuA6@aion \
    --to=smayhew@redhat.com \
    --cc=chuck.lever@oracle.com \
    --cc=linux-nfs@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.