Re: NFSv4, Name (string) mapping vs. raw UID, idmapd and Kernels >= 3.3

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



J. Bruce Fields wrote:
> Adding Rick to the cc:
> 
> On Thu, Aug 23, 2012 at 11:21:29AM +0200, Norbert Aschendorff wrote:
> > I recently opened a thread on freebsd-stable about problems with the
> > mapping of UIDs to user strings (user@domain form) in NFSv4 packets
> > running newer kernels:
> > [http://www.mail-archive.com/freebsd-stable@xxxxxxxxxxx/index.html#122549]
> > In
> > [http://www.mail-archive.com/freebsd-stable@xxxxxxxxxxx/msg122571.html],
> > Rick says that the described issue may be related to the
> > NFSv4/NFSv4.1
> > RFCs which deny/allow sending "raw" numeric UIDs (1000 instead of
> > "user@domain").
> > The problem is that Linux kernels newer than 3.2 (the last working
> > kernel, on both Debian and Fedora; I've tested 3.3, 3.4 and 3.5)
> > send
> > these numeric UIDs/GIDs [1] which, as it's described in the
> > mentioned
> > email, may be convenient when mounting NFSv4 filesystems as root
> > filesystem (at a point where an idmapd/nfsuserd (on FreeBSD) isn't
> > already running) and numeric UIDs/GIDs are required (because of the
> > early stage)
> > Now it could be that Kernels newer than 3.2 (>= 3.3) support this
> > feature (which is said to appear in NFSv4.1) already - and FreeBSD
> > 9.0
> > does not (it shows 32767 as UID - due to that I discovered this
> > issue; a
> > Fedora 17/k3.5 system supports the numeric UIDs/GIDs without any
> > problems).
> 
> Yes, newer linux servers by default do return numeric ID's (unless
> kerberos is used).
> 
> > --> 1. Is this assumption correct? Or is it a bug as filed here:
> > [https://bugzilla.novell.com/show_bug.cgi?id=756897]
> 
> That's slightly different, as it concerns a *client* sending numeric
> id's to a server. The client should in that case be falling back on
> the
> old behavior, and if that's not working there's some other bug.
> 
> > --> 2. As Rick says finally in
> > [http://www.mail-archive.com/freebsd-stable@xxxxxxxxxxx/msg122572.html],
> > it would be cool if this behavior was tunable. Is it tunable via
> > options
> > in /etc/exports? Or in idmapd.conf? (The man pages don't describe
> > such
> > directives (at least at the first look)).
> 
> It's tunable via the nfsd module's "nfs4_disable_idmapping" parameter.
> So, for example,
> 
> echo "N" > /sys/module/nfsd/parameters/nfs4_disable_idmapping
> 
> should return the server to its old behavior.
> 
> "Y" was made the default because even the old rfc 3530 language
> allowed
> servers to return numeric ID's, so we assumed correct clients would
> need
> to be prepared for them.
> 
Well, way back when, I did have support for the numeric uid/gid strings
and I disabled that code because I thought (based on some discussion in
the working group), that it wasn't supposed to be allowed.

Reading RFC3530, I see that it is typically ambiguous, although it
seems to say that numeric uid/gids should only be allowed when no
name<->uid/gid# exists. Here's a couple of snippets from RFC3530 around
page 47:

   provides additional rationale.  It is expected that the client and
   server will have their own local representation of owner and
   owner_group that is used for local storage or presentation to the end
   user.  
   >> Therefore, it is expected that when these attributes are
   transferred between the client and server that the local
   representation is translated to a syntax of the form
   "user@dns_domain".  This will allow for a client and server that do
   not use the same local representation the ability to translate to a
   common syntax that can be interpreted by both.

The ">>" sentence seems to lean towards using the user@domain form whenever possible?

Then on the next page:

   To provide a greater degree of compatibility with previous versions
   of NFS (i.e., v2 and v3), which identified users and groups by 32-bit
   unsigned uid's and gid's, owner and group strings that consist of
   decimal numeric values with no leading zeros can be given a special
   interpretation by clients and servers which choose to provide such
   support.  
   ** The receiver may treat such a user or group string as
   representing the same user as would be represented by a v2/v3 uid or
   gid having the corresponding numeric value.  A server is not
   obligated to accept such a string, but may return an NFS4ERR_BADOWNER
   instead.  
   --> To avoid this mechanism being used to subvert user and
   group translation, so that a client might pass all of the owners and
   groups in numeric form, a server SHOULD return an NFS4ERR_BADOWNER
   error when there is a valid translation for the user or owner
   designated in this way.  In that case, the client must use the
   appropriate name@domain string and not the special form for
   compatibility.

The sentence at "**" says a receiver "may" recognize the numeric uid/gid#
string. This would suggest that a client isn't expected/required to do so,
as I read it. (This page seems to be very confusing w.r.t. what clients/servers
are expected/required to support.)
The sentence at "-->" is a SHOULD (not a MUST, I admit) that seems to
say a server should only allow numeric uid/gid# strings when there isn't
a name<->uid/gid# translation and should avoid allowing clients to just
use uid/gid# strings?

Anyhow, I do plan to re-enable support for numeric uid/gid# strings in
the FreeBSD NFSv4 client, but it won't be released until 9.2 at the
earliest. (I, personally, have no problem with numeric uid/gid# strings.
I disabled support for them because I had thought the working group
didn't want them supported.)

> It may be the server-side default was too aggressive and needs to be
> changed, but we'd also like to make sure that clients are fixed.
> 

I have no strong opinion on this. I am glad to see that there is a way
to switch the server to use user@dns_domain so that it will work with
the currently released FreeBSD NFSv4.0 client.

rick
> --b.
--
To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Filesystem Development]     [Linux USB Development]     [Linux Media Development]     [Video for Linux]     [Linux NILFS]     [Linux Audio Users]     [Yosemite Info]     [Linux SCSI]

  Powered by Linux