I am sponsoring the following fast-track for Lisa Week.  It introduces
a new reserved uid and gid for purposes of improved ACL manipulation
when an id is not mappable by the client or server.  Requested binding
is patch/micro.  Timeout is 1/6/2010.

Template Version: @(#)sac_nextcase 1.68 02/23/09 SMI
This information is Copyright 2009 Sun Microsystems
1. Introduction
    1.1. Project/Component Working Name:
         Reserved uid/gid for distinguishing unmappable users/groups in NFSv4 
ACLs
    1.2. Name of Document Author/Supplier:
         Author:  Lisa Week
    1.3  Date of This Document:
        21 December, 2009

4. Technical Description

When Access Control Lists (ACLs) are sent over the wire in NFSv4 the
users and groups in the Access Control Entries (ACEs) are in the form
of UTF-8 strings. nfsmapid(1M) is responsible for translating or mapping
these strings into valid users and groups on the client and server.

If there are entries in the ACL that cannot be mapped to valid users
or groups we run into the two type of problems:

Case 1: Upon doing a get ACL operation, the server may send the client
        an ACL with a user or group that the client does not know
        about.

Case 2: Upon doing a set ACL operation, the client may
        send the server an ACL with a user or group that the server
        does not know about.

Currently, the NFSv4 implementation will fail the operations in both
Case 1 and 2.  Case 2 remains valid (i.e. it is appropriate to fail
the set ACL operation), but Case 1 has proven to be confusing to users
as it causes simple operations such as "ls -l" and "ls -l[V|v]" to
fail with "Permission denied".


Proposed Solution:
------------------

This case proposes a new reserved uid and gid in the vendor range
(0-99) that the NFSv4 client and server will use to designate that an
unmappable user or group has been detected in the ACE of an ACL.  This
reserved uid and gid will be installed in /etc/passwd (also
/etc/shadow) and /etc/group, respectively.

The /etc/passwd entry will be as follows:
unknown:x:96:96:Unknown Remote UID:/:

The /etc/shadow entry will be as follows:
unknown:NP:::::::

The /etc/group entry will be as follows:
unknown::96:

The client will map users or groups in an ACL that are unmappable to
this newly reserved uid/gid.  This reserved uid/gid will not be allowed
to be set in an ACL from the Solaris NFSv4 client.

Example:

For this example, we will assume we have the following ACL set on a
file at the server:

(nfs-server:/export):37 % ls -lV aclfile
-rw-r--r--+  1 lisagab     staff           0 Nov 25 16:47 aclfile
          user:junkuser:rwx-----------:-------:deny
                 owner@:--x-----------:-------:deny
                 owner@:rw-p---A-W-Co-:-------:allow
                 group@:-wxp----------:-------:deny
                 group@:r-------------:-------:allow
              everyone@:-wxp---A-W-Co-:-------:deny
              everyone@:r-----a-R-c--s:-------:allow

(Note: "junkuser" is a user that is not mappable to a valid user on
the NFSv4 client.)

Behavior before the fix:
-------------------------------

The end user on the NFSv4 client saw a simple "ls -lV" failing:
(old-nfs-client:/mnt):6 % df /mnt
Filesystem            kbytes    used   avail capacity  Mounted on
nfs-server:/export   57621265      23 57621242     1%    /mnt
(old-nfs-client:/mnt):11 % ls -lV aclfile
ls: can't read ACL on aclfile: Permission denied
-rw-r--r--   1 lisagab  staff          0 Dec 16 17:31 aclfile

Behavior after the fix:
----------------------------

The end user on the NFSv4 client will see:

(new-nfs-client:/mnt):21 % ls -lV aclfile
-rw-r--r--+  1 lisagab     staff           0 Nov 25 16:47 aclfile
           user:unknown:rwx-----------:-------:deny
                 owner@:--x-----------:-------:deny
                 owner@:rw-p---A-W-Co-:-------:allow
                 group@:-wxp----------:-------:deny
                 group@:r-------------:-------:allow
              everyone@:-wxp---A-W-Co-:-------:deny
              everyone@:r-----a-R-c--s:-------:allow

If an end user tries to do a read, modify, write ACL operation on the
NFSv4 client on an ACL with an unmappable user/group they will see:

(new-nfs-client:/mnt):22 % chmod A+user:lisagab:rwx:allow aclfile
chmod: ERROR: Failed to set ACL: Permission denied

If a user tries to do a NON-read,modify,write ACL operation on the
NFSv4 client, everything works as expected (because the unknown user
is not in the ACL):

(new-nfs-client:/mnt):26 % chmod A=user:lisagab:rwx:allow aclfile
(new-nfs-client:/mnt):27 % ls -lV
total 4 ----------+ 1 lisagab staff 0 Nov 25 16:47 aclfile
user:lisagab:rwx-----------:-------:allow

Alternative solutions considered:
--------------------------------------------

1. Repurposing "nobody4" user rather than reserving a new user:

The "nobody4" user is the anonymous user account that is the SunOS 4.X
software version of the "nobody" account.  As a reminder, the "nobody"
account secures NFS resources.  When a user is logged in as root on an
NFS client and attempts to access a remote file resource, the UID
number changes from 0 to the UID of nobody (60001).

There are no major technical problems behind reusing nobody4, the main
problems revolve around documentation and the current user base's
understanding of what this user/group is for.  There would be a large
amount of documentation updates needed in order to repurpose nobody4
from the SunOS 4.X anonymous account to the new "Unknown Remote UID".
Of course, we also have to update documentation for adding a new
user/group, but there is no risk assumed.  Risk is introduced when we
consider all of the external documentation sites that have information
about nobody4 documented.  We do not control these sites and expect
that we will introduce customer confusion if we repurpose.

A good example is: there are external documentation sites out there
that advise users to get rid of the "nobody4" account as it is
unneeded.  How can we make sure that we change this practice?  It
seems like it may be close to impossible.

E.g.
http://www.accs.com/p_and_p/SolSec/clean.html
http://www.mail-archive.com/focus-sun at securityfocus.com/msg00067.html
http://www.gotroot.com/tiki-index.php?page=Solaris+Hardening+Guide

2. Reusing "noaccess" user/ group rather than reserving a new user/group:

The "noaccess" user/group is an account assigned to a user/group or a
process that needs access to a system through some application without
actually logging into the system.

Reusing this account would introduce the side effect that users cannot
set ACLs with the noaccess user or group in ACLs over NFS.  They would
still be able to do this on local file systems, but not on NFS.  This
leaves NFS at a disadvantage and since the noaccess user/group already
has well defined semantics, it is deemed not suitable for this
purpose.


Man page changes:
--------------------------

The new reserved user and group will be documented in the appropriate
man pages and system administration guides.  Documentation addendum is
as shown below:

To documentation associated with the default passwd file contents:

User Name     User ID     Description
unknown         96        Account reserved for unmappable users in NFSv4 ACLs

Those documentation with the default group file contents

User Name     Group ID     Description
unknown         96         Account reserved for unmappable groups in NFSv4 ACLs

6. Resources and Schedule
    6.4. Steering Committee requested information
        6.4.1. Consolidation C-team Name:
                ON
    6.5. ARC review type: FastTrack
    6.6. ARC Exposure: open

Reply via email to