<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
<!ENTITY rfc2119 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml'>
<!ENTITY rfc2307 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.2307.xml'>
<!ENTITY rfc3530 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.3530.xml'>
<!ENTITY rfc4120 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.4120.xml'>
<!ENTITY rfc5280 PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.5280.xml'>
<!ENTITY rfc5661  PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml/reference.RFC.5661.xml'>
<!ENTITY fedfsreqts  PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml3/reference.I-D.ietf-nfsv4-federated-fs-reqts.xml'>
<!ENTITY rpcsecgss3  PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml3/reference.I-D.williams-rpcsecgssv3.xml'>
<!ENTITY gssnamexts  PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml3/reference.I-D.ietf-kitten-gssapi-naming-exts.xml'>
<!ENTITY pku2u  PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml3/reference.I-D.draft-zhu-pku2u-09.xml'>
<!ENTITY krb5generalpac  PUBLIC '' 'http://xml.resource.org/public/rfc/bibxml3/reference.I-D.draft-sorce-krbwg-general-pac-01.xml'>
]>

<?rfc toc="yes" ?>
<?rfc tocindent="no" ?>
<?rfc symrefs="yes" ?>

<rfc category="std" ipr="trust200902" docName="draft-adamson-nfsv4-multi-domain-federated-fs-reqs-00">

    <front>
	<title>NFSv4 Multi-Domain FedFS Requirements</title>

	<author initials='W.A.' surname="Adamson" fullname='William A. (Andy) Adamson'>
	    <organization>NetApp</organization>
	    <address>
		<email>andros@netapp.com </email>
	    </address>
	</author>

	<author initials='N.' surname="Williams" fullname='Nicolas Williams'>
	    <organization>Cryptonector</organization>
	    <address>
		<email>nico@cryptonector.com</email>
	    </address>
	</author>
	<date/>
	<area>Internet </area>
	<workgroup>NFSv4 Working Group</workgroup>

	<abstract>
	    <t> This document describes constraints to the NFSv4.0 and
	        NFSv4.1 protocols as well as the use of multi-domain
	    	capable file systems, name resolution services, and security services 
		to fully enable a multi-domain NFSv4 federated file system.
	    </t>
	</abstract>
    </front>

    <middle>

	<section title="Requirements notation">
            <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL",
		"SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY",
		and "OPTIONAL" in this document are to be interpreted as
		described in <xref target="RFC2119"/>.
            </t>
	</section>


	<section title="Introduction">

             <t>The <xref target="RFC3530">NFSv4.0</xref> and
		<xref target="RFC5661">NFSv4.1</xref>
                (NFSv4) protocols enable the construction of a distributed file system
		which can join NFSv4 servers from multiple administrative domains,
                each potentially using separate
		name resolution services and separate security services,
		into a common multi-domain name space.
            </t>

	    <t> The Federated File System (FedFS)
		<xref target="I-D.ietf-nfsv4-federated-fs-reqts"></xref>
	        describes requirements
		and adminstrative tools to construct a uniform server-based
		namespace that is capable of spanning a whole enterprise
		and that is easy to manage.
	    </t>

            <t> A multi-domain capable filesystem uses 
	        local ID forms that can represent
	        identities from both local and remote domains.
	        A multi-domain NFSv4 FedFS joins
	        multiple NFSv4 administrative domains each consisting of
		NFSv4 servers that export multi-domain capable filesystems,
		and that employ separate name resolution services and
		separate security services into a uniform server-based
		name space capable of spanning multiple enterprises.
            </t>

	    <t> This document describes constraints to the NFSv4.0 and
	        NFSv4.1 protocols as well as the use of multi-domain
	    	capable file systems, name resolution services, and security services 
		to fully enable a multi-domain NFSv4 federated file system.
            </t>

	</section>  <!--Introduction --> 

	<section title="Background">

	    <t> NFSv4 deals with two kinds of identities: authentication
		identities (referred to here as "principals") and
		authorization identities ("users" and "groups" of
		users).  NFSv4 supports multiple authentication methods,
		each authenticating an "initiator principal" (typically
		representing a user) to an "acceptor principals" (always
		corresponding to the server).  NFSv4 does not prescribe
		how to represent authorization identities on file
		systems.  All file access decisions constitute
		"authorization" and are made by servers using
		information about principals (such as username,
		group memberships, and so on) and file metadata related
		to authorization, such as a file's access control list
		(ACL).
            </t>

	    <t>NFSv4 servers therefore must perform two kinds of
		mappings:
            </t>

                <t>
		    <list style="numbers">

		        <t> Between the authentication identity and
		            the authorization context (a principal's user ID, group
	    	            memberships, etcetera)
                        </t>

		        <t> Between the on-the-wire authorization identity
		            representation and the on-disk authorization identity
		            representation.
                        </t>

                    </list>
                </t>

	    <t>
	        Many aspects of these mappings are entirely implementation
		specific, but some require multi-domain capable name resolution
		and security services. In order to inter operate in a multi-domain
                NFSv4 FedFS servers must use such services in compatible ways.
	    </t>

	</section>  <!--Background --> 

	<section title="Multi-domain Constraints to the NFSv4 Protocol">

	    <section title="Name@dns_domain Constraints">

	        <t> NFSv4 uses a syntax of the form "name@dns_domain" as the
		    on wire representation of the "who" field of an NFSv4 
		    access control entry (ACE)
		    for users and groups.  This design provides a level of
		    indirection that allows a client and server with different
		    internal representations of authorization identity to
    		    inter operate even when referring to authorization
		    identities from different administrative domains.
                </t>

	        <t> Multi-domain capable sites need to meet the following
		    requirements in order to ensure that clients
		    and servers can map name@dns_domain to internal
		    representations reliably:
                </t>

                <t>
		    <list style="symbols">

	    		<t> The dns_domain portion of name@dns_domain 
			    MUST be unique within the FedFS NFSv4 multi-domain
			    namespace. [ANDROS: IANA help here?]
	                    See <xref target="RFC3530"></xref>
			    section 5.9 "Interpreting owner and owner_group",
			    for a discussion on dns_domain configuration.
	    		</t>

		        <t> The name portion of name@dns_domain MUST be unique
			    within the specified dns_domain.
                        </t>

		        <t> Every local representation of a user and of a
			    group MUST have a canonical name@dns_domain, and it
			    must be possible to return the canonical
			    name@dns_domain for any identity stored on disk, at
			    least when required infrastructure servers (such
			    as name services) are online.
                        </t>
		    </list>
	        </t>

	    </section> <!-- name@dns_domain constraint -->

	    <section title="RPC Security Constraints">

	        <figure>
		    <preamble>
		        As described in <xref target="RFC5661"></xref>
		        section 2.2.1.1 "RPC Security Flavors":
		    </preamble>

                    <artwork>
            NFSv4.1 clients and servers MUST implement RPCSEC_GSS.
            (This requirement to implement is not a requirement
            to use.) Other flavors, such as AUTH_NONE, and AUTH_SYS,
            MAY be implemented as well.
                    </artwork>
	        </figure>

                <t> The underlying RPCSEC_GSS security service used in a multi-domain
		    NFSv4 FedFS is REQUIRED to employ a method of cross domain
		    trust so that a principal from a security service 
		    in one domain can be authenticated in another domain that
		    uses the same security service.  Kerberos, and
		    <xref target="I-D.zhu-pku2u">PKU2U </xref>
		    are examples of such security services.
		</t>

	        <t> The AUTH_NONE security flavor can be useful in a multi-domain
		    NFSv4 FedFS to grant universal access to public data without
		    any credentials.
                </t>

	        <t> The AUTH_SYS security flavor uses a host-based
		    authentication model where the weakly authenticated
		    host (the NFS client) asserts the user's authorization
                    identities using small integers, <xref target="RFC2307">
		    uidNumber and gidNumber </xref>, as user and group identity
		    representations.  Because this authorization ID representation
		    has no DNS domain component, AUTH_SYS can only be
		    used in a name space where all clients and servers share
		    an <xref target="RFC2307"/> name service.  A shared
		    name service is required because uidNumbers and
		    gidNumbers are passed in the RPC credential; there is no
		    negotiation of namespace in AUTH_SYS.  Collisions can
		    occur if multiple name services are used.
	        </t>
	        <t> A new version of RPCSEC_GSS  <xref
		    target="I-D.williams-rpcsecgssv3"/> includes a modernized
		    replacement for AUTH_SYS which addresses this issue.
	        </t>

	    <!--
		ANDROS: more fully describe the AUTH_SYS replacement
		and note that it can be used.
	    -->

	    </section> <!-- RPC Security Constraints -->

	</section> <!-- Multi-domain Constraints to the NFSv4 Protocol -->

        <section title="Cross-Domain Authorization">

            <t> In order to authorize client principal access to files,
                the NFS server must map the RPCSEC_GSS client principal name
                or the underlying GSS-API security context to
                authorization information 
                meaningful to the file system being exported.
            </t>

            <section title="Authorization Information">

            <t> Here we list the authorization information that a multi-domain
	        FedFS NFSv4 server needs in order to make a file access
                decision.  Note that the server may need to map the global IDs
                to a local representation.
            </t>

            <t>
                <list style="symbols">

                    <t> UserID: This field contains the principal's
                        global ID and the name@dns_domain form thereof.
                    </t>

                    <t> PrimaryGroupID: This field contains the global ID
                        for the principal's primary group, and the
			name@dns_domain form thereof.
                    </t>

                    <t> Groups: This field contains an array of global ID
		        for the groups that the principal is a member of,
                        and the name@dns_domain forms thereof.
                    </t>

                    <t> Optional field(s) for privileges, authorizations,
			implementation-specific items, etcetera, relevant
			to authorization.
                    </t>

                </list>
            </t>

            </section> <!-- Authorization Information -->

            <section title="Resolving Cross-Domain Authorization Information">

            <t> In the cross-domain case where a client principal is seeking
                access to files on a server in a different NFSv4 domain,
                the NFS server needs to obtain, in a secure manner,
                the authorization information from an authoritative source:
                e.g. a name service in the client principals NFS domain.
            </t>

            <t> There are several methods the cross-domain authoritative
                authorization information can be obtained:

                <list style="numbers">

                    <t> A mechanism specific GSS-API authorization payload
                            containing credential authorization data.
                    </t>

                    <t> An NFS server local domain name query when there is
                            a security agreement between the two cross-domain
                            name services plus regular update data feeds so
                            that the NFS server local domain name service is
                            authoritative for the client principal domain.
                    </t>

                    <t> A direct query from the NFS server to the client
                            principal authoritative name service.
                    </t>

                </list></t>

            <t> The authorization data information SHOULD be obtained via
                the GSS-API name attribute interface
                <xref target="I-D.ietf-kitten-gssapi-naming-exts"/>
                either via a single attribute for the credential authorization
                data or via discrete GSS-API name attributes
                corresponding to the authorization data elements.
		<!-- ANDROS: note the advantage of using this interface -->
            </t>

            <t> Note that the retrieval of attribute values used by the GSS-API
                name attribute interface implementation could utilize any
                of the above mentioned methods of obtaining the authorization
                information.
            </t>
            <section title="GSS-API Authorization Payload">

                <t> Authorization context information can sometimes be
                    obtained from the credentials authenticating a
                    principal; the GSS-API represents such information
                    as attributes of the initiator principal name.
                </t>

                <t> For example:
                       <list style="symbols">
                           <t> Kerberos 5 <xref target='RFC4120'/> has
                               a method for conveying "authorization data", both
                               client-asserted as well as KDC-authenticated
                               authorization data. Some KDC implementation, notably
			       Windows KDCs, use this feature to convey a
			       <xref target="PAC"> "privilege attribute certificate"
			       </xref>listing the principal's user and group
			       global IDs as "security identifiers" (SIDs).
                           </t>

                           <t> Some KDCs (will) issue Kerberos Tickets with the
                               <xref target="I-D.sorce-krbwg-general-pac"> General
                               PAD </xref> as authorization data.
                               The General PAD authorization data MUST be
                               authenticated in the sense that its contents must come
                               from an authenticated, trusted source, such as a
                               name server or the issuer of the client principal's
                               credential. The General PAD lists
			       user and group global IDs as "universal user
			       identifiers" (UUIDs) as well as their string
			       representations and DNS domains.
			   </t>

			   <t> PKIX <xref target='RFC5280'/> certificates allow
			       for extensions that could be used similarly.
			   </t>
                       </list>
                </t>
                <t> When a client principal is authenticated using a GSS-API
                    authorization payload, the server SHOULD extract the payload from
                    the client's ticket and map, if need be, the global IDs
                    to local ID representations.
                </t>

                <t> The authorization context information in a GSS-API authorization
		    payload can be considered a single, authenticated,
                    discrete GSS-API name attribute, in which case the server must
		    parse it into its individual elements.
	        </t>

            </section> <!--  GSS-API Authorization Payload  -->

           <section title="Using Authoritative Name Services">

                <t> If a GSS-API authorization payload for the client principal
		    is not available, then the server SHOULD try to map the client
                    principal name to a local notion of user account,
                    and then lookup that user account's authorization
                    context information through authenticated name service
                    lookups.
                </t>

                <t> Authoritative name service queries may also be necessary
		    to construct the name@dns_domain form of a global ID
		    obtained from a GSS-API authorization payload.
		</t>

           </section> <!-- Using Authoritative Name Services -->


            </section> <!--Resolving Cross-Domain Authorization Information -->

        </section> <!-- Cross-Domain Authorization -->


	<section title="Security Considerations">

	    <t>Some considerations to come</t>

	</section> <!-- Security Considerations -->

    </middle>

    <back>

	<references title="Normative References">
	    &rfc2119;
	    &rfc2307;
	    &rfc3530;
	    &fedfsreqts;
	    &rfc4120;
	    &rfc5661;
	    &gssnamexts;
	    &pku2u;
	    &krb5generalpac;
            <reference anchor="PAC">
                <front>
                    <title>Utilizing the Windows 2000 Authorization Data in Kerberos Tickets for Access Control to Resources </title>
                    <author initials="J. " surname="Brezak" fullname="J.Brezak">
                        <organization>Microsoft Corporation</organization>
                    </author>
                    <date month="October" year="2002" />
                </front>
            </reference>
	</references>
        <references title="Informative References">
            &rpcsecgss3;
            &rfc5280;
	</references>


    </back>
</rfc>
