Subject: RE: new ACL text

From: "Noveck, Dave" <[email-masked]>
Date: Sun, 4 Aug 2002 04:41:18 -0700

I agree that we need to provide some guidance on this
issue.  I would hope that this could be in the spec, but
if we can't do that for some reason, we have to explain
somewhere how these are intended to interact.  Mode
bits may be deprecated, but stat and chmod aren't going
away anytime soon.

I've had some discussion with Mike Eisler on this issue
within the context of Netapp's ACL implementation.  The
other implementors of ACL's have also had to address this.
We'd already been planning to have discussions of some ACL
issues at the bakeoff.  We should definitely add this 
issue to the discussion.  I'd like to start by seeing whether
this has been addressed in the same way by those who have
(or are planning) ACL implementations, and then try to
come up with a general understanding of how this should 
work.

Oh yeah, and communicate that general understanding, and have
further discussions of the issue as necessary.

-----Original Message-----
From: Benny Halevy [mailto:[email-masked]]
Sent: Saturday, August 03, 2002 10:15 PM
To: Mike Kupfer
Cc: [email-masked]
Subject: Re: new ACL text

Mike,

As I read it, the text is still not clear about the
issue of having both ACLs and file mode (Unix style
permissions).  Currently the only reference I could
find to this subject is in Section 5.5 saying
&#34;Unix-style permission bits for this object
(deprecated in favor of ACLs)&#34;.  The issue was
discussed recently in 
a thread called &#34;Interaction between mode bits and
acls&#34; (see
http://playground.sun.com/pub/nfsv4/nfsv4-wg-archive/2002/0157.html)
yet I believe it deserves some elaboration.

If the interaction between conflicting ACE's and mode
bits is undefined and left open to the server then the
spec should say so.  Recommended guidelines could be
useful too :-)

When an ACL is defined for a file, what should be the
result of local stat()/chmod() or GETATTR/SETATTR when
the file is exported also in NFSv[23]?  The
interesting cases are:
ACL is defined for the file and -
a. The file has no mode attribute.
b. The file has a mode attribute.

Thanks,

Benny

--- Mike Kupfer &lt;[email-masked]&gt;
wrote:
&gt; Here's a new draft of the ACL text.  It includes
the
&gt; formatting
&gt; changes from the latest I-D, and it incorporates
the
&gt; feedback I got
&gt; from Dave Noveck.  Change bars are relative to
the
&gt; text I sent out on
&gt; 16 July and do not include the formatting
changes.
&gt; 
&gt; mike
&gt; 
&gt; 5.9.  Access Control Lists
&gt; 
&gt;    The NFS ACL attribute is an array of access
&gt; control entries (ACE).
&gt;    There are various access control entry types,
as
&gt; defined in Section
&gt;    5.9.1.  The server is able to communicate
which
&gt; ACE types are
&gt;    supported by returning the appropriate value
&gt; within the aclsupport
&gt;    attribute.  	Each ACE covers one or more
&gt; operations on a file or
&gt;    directory as described in 5.9.2.  It may also
&gt; contain one or more
&gt;    flags that modify the symantics of the ACE as
&gt; defiend in Section
&gt;    5.9.3.
&gt; 
&gt;    The NFS ACE attribute is defined as follows:
&gt; 
&gt;    typedef uint32_t        acetype4;
&gt;    typedef uint32_t        aceflag4;
&gt;    typedef uint32_t        acemask4;
&gt; 
&gt;    struct nfsace4 {
&gt;            acetype4        type;
&gt;            aceflag4        flag;
&gt;            acemask4        access_mask;
&gt;            utf8string      who;
&gt;    };
&gt; 
&gt;    To determine if a request succeeds, each
nfsace4
&gt; entry is processed	    |
&gt;    in order by the server.  Only ACEs which have
a
&gt; &#34;who&#34; that matches
&gt;    the requester are considered.  Each ACE is
&gt; processed until all of
&gt;    the bits of the requester's access have been
&gt; ALLOWED.  Once a bit
&gt;    (see below) has been ALLOWED by an
&gt; ACCESS_ALLOWED_ACE, it is no
&gt;    longer considered in the processing of later
&gt; ACEs. If an
&gt;    ACCESS_DENIED_ACE is encountered where the
&gt; requester's mode still
&gt;    has unALLOWED bits in common with the
&gt; &#34;access_mask&#34; of the ACE, the
&gt;    request is denied.
&gt; 
&gt;    The NFS ACL model is quite rich.  Some server
&gt; platforms may provide	    |
&gt;    access control functionality that goes beyond
the
&gt; Unix-style mode
&gt;    attribute, but which is not as rich as the NFS
&gt; ACL model.  So that
&gt;    users can take advantage of this more limited
&gt; functionality, the
&gt;    server may indicate that it supports ACLs as
long
&gt; as it follows the	    |
&gt;    guidelines for mapping between its ACL model
and
&gt; the NFS ACL model.
&gt; 
&gt;    The situation is complicated by the fact that
a
&gt; server may have
&gt;    multiple modules that enforce ACLs.  For
example,
&gt; the enforcement
&gt;    for NFS access may be handled different from
the
&gt; enforcement for	    |
&gt;    local access, and both may be different from
the
&gt; enforcement for	    |
&gt;    access through other protocols such as SMB. 
So
&gt; it may be useful
&gt;    for a server to accept an ACL even if not all
of
&gt; its modules are
&gt;    able to support it.
&gt; 
&gt;    The guiding principle in all cases is that the
&gt; server must not	    |
&gt;    accept ACLs that appear to make the file more
&gt; secure than it really
&gt;    is.
&gt; 
&gt; 5.9.1.  ACE type
&gt; 
&gt;    Type         Description
&gt;   
&gt;
_____________________________________________________
&gt;    ALLOW
&gt;                 Explicitly grants the access
defined
&gt; in
&gt;                 acemask4 to the file or
directory.
&gt; 
&gt;    DENY
&gt;                 Explicitly denies the access
defined
&gt; in
&gt;                 acemask4 to the file or
directory.
&gt; 
&gt;    AUDIT
&gt;                 LOG (system dependent) any access
&gt;                 attempt to a file or directory
which
&gt;                 uses any of the access methods
&gt; specified
&gt;                 in acemask4.
&gt; 
&gt;    ALARM
&gt;                 Generate a system ALARM (system
&gt;                 dependent) when any access
attempt
&gt; is
&gt;                 made to a file or directory for
the
&gt;                 access methods specified in
&gt; acemask4.
&gt; 
&gt;    A server need not support all of the above ACE
&gt; types.  The bitmask
&gt;    constants used to represent the above
definitions
&gt; within the
&gt;    aclsupport attribute are as follows:
&gt; 
&gt;    const ACL4_SUPPORT_ALLOW_ACL    = 0x00000001;
&gt;    const ACL4_SUPPORT_DENY_ACL     = 0x00000002;
&gt;    const ACL4_SUPPORT_AUDIT_ACL    = 0x00000004;
&gt;    const ACL4_SUPPORT_ALARM_ACL    = 0x00000008;
&gt; 
&gt;    The semantics of the &#34;type&#34; field
follow the
&gt; descriptions provided
&gt;    above.
&gt; 
&gt;    The constants used for the type field
(acetype4)
&gt; are as follows:
&gt; 
&gt;    const ACE4_ACCESS_ALLOWED_ACE_TYPE      =
&gt; 0x00000000;
&gt;    const ACE4_ACCESS_DENIED_ACE_TYPE       =
&gt; 0x00000001;
&gt;    const ACE4_SYSTEM_AUDIT_ACE_TYPE        =
&gt; 0x00000002;
&gt;    const ACE4_SYSTEM_ALARM_ACE_TYPE        =
&gt; 0x00000003;
&gt; 
&gt;    Clients should not attempt to set an ACE
unless
&gt; the server claims
&gt;    support for that ACE type.  If the server
&gt; receives a request to set
&gt;    an ACE that it cannot store, it must reject
the
&gt; request with
&gt;    NFS4ERR_ATTRNOTSUPP.							    |
&gt; 
&gt;    If the server receives a request to set an ACE
&gt; that it can store
&gt;    but cannot enforce, the server SHOULD reject
the
&gt; request.		    |
&gt; 
&gt;    Example: suppose a server can enforce NFS ACLs
&gt; for NFS access but
&gt;    cannot enforce ACLs for local access.  If
&gt; arbitrary processes can
&gt;    run on the server, then the server SHOULD NOT
&gt; indicate ACL support.	    |
&gt;    On the other hand, if only trusted
administrative
&gt; programs run
&gt;    locally, then the server may indicate ACL
&gt; support.			    |
&gt; 
&gt; 
&gt; 5.9.2.  ACE Access Mask
&gt; 
&gt;    The access_mask field contains values based on
&gt; the following:
&gt; 
&gt;    Access                 Description
&gt;   
&gt;
_______________________________________________________________
&gt;    READ_DATA
&gt;                           Permission to read the
&gt; data of the file
&gt;    LIST_DIRECTORY
&gt;                           Permission to list the
&gt; contents of a
&gt;                           directory
&gt;    WRITE_DATA
&gt;                           Permission to modify
the
&gt; file's data
&gt;    ADD_FILE
&gt;                           Permission to add a new
&gt; file to a
&gt;                           directory
&gt;    APPEND_DATA
&gt;                           Permission to append
data
&gt; to a file
&gt;    ADD_SUBDIRECTORY
&gt;                           Permission to create a
&gt; subdirectory 
=== message truncated ===

__________________________________________________
Do You Yahoo!?
Yahoo! Health - Feel better, live better
http://health.yahoo.com