<?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-01">

    <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 the requirements
		and administrative 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 potentially :w
		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="Terminology">

	    <t>
                <list style="hanging">

                    <t> (NFSv4) Domain: a set of users, groups and
			computers administered by a single entity, and
			identified by a DNS domain name.
		    </t>

		    <t> Local representation of identity: an object such as
                        a uidNumber (UID) or gidNumber (GID) [RFC2307],
                        or a Windows Security Identifier (SID), or other
                        such representation of a user or a group
                        of users on-disk in a file system.
		    </t>

		    <t> Global ID: A representation of identity that is globally
                        unique. Examples include the name@domain or ID@domain
                        NFSv4 syntax, and the Windows Security Identifier (SID). 
		    </t>

		    <t> Name Service: provides the mapping between
			{domain, name} and {domain, ID} via lookups. Can be
		        applied to local or remote domains. Often provided
			by a Directory Service such as LDAP.
		    </t>

		    <t> ID mapping: Is a mapping between
			{remote domain, remote domain ID}
		        and {local representation of identity}.
		    </t>

		    <t> Principal: an RPCSEC_GSS authentication identity.
		        Usually, but not always, a user; rarely, if ever,
			a group; sometimes a host.
		    </t>

		    <t> Authorization Context: A collection of information
			about a principal such as username, userID,
			group membership, etcetera used in authorization
			decisions. 
		    </t>
                </list>
	    </t>
	</section>  <!--Terminology -->

	<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
		authorization context information 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> A mapping between
			    the authentication identity and the
			    authorization context information.
                        </t>

		        <t> A mapping 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 interoperate 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@domain Constraints">

	        <t> NFSv4 uses a syntax of the form "name@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
    		    interoperate 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 between name@domain and internal
		    representations reliably:
                </t>

                <t>
		    <list style="symbols">

	    		<t> The domain portion of name@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 NFSv4 domain configuration.
	    		</t>

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

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

	    </section> <!-- name@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 mechanism 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 a security service with the same security
		    mechanism.  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.
		    AUTH_SYS can not be used in an NFSv4 multi-domain federated
		    file system.
	        </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="NFSv4 Multi-domain File Access">

            <t> In the mult-domain case where a 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 principal's authorization information from an
		authoritative source: e.g. a name service in the principal's
		NFS domain.
		The NFS server must map the remote RPCSEC_GSS principal to
		a local representation of ID suitable for use
		in file system ACLs. This may also involve the need to
		map the remote RPCSEC_GSS principal to a name@domain form.
	        The principal's primary group and group membership list 
		must also be mapped into local representations of ID.
	    </t>

	    <t> In the local NFSv4 domain case where the principal is
		seeking access to files on a server in the local domain,
		the server has knowledge of the local policies and methods
		for obtaining the principal's authorization information and
		the mapping to local representation of identity.
		In the multi-domain case there can be no assumption of such
		knowledge.
	    </t>

            <section title="Resolving Multi-domain Authorization Information">

            <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. This is
			the preferred method as it avoids requiring any
			knowledge of a remote domain name service.
                    </t>

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

                    <t> An authenticated direct query from the NFS server to the
                        principal's domain authoritative name service.
                        This requires the NFS server to have detailed
			knowledge of the remote domain's 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.
            </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 which demonstrates the usefulness of the API.
            </t>
            </section> <!--Resolving Multi-domain Authorization Information -->
            <section title="GSS-API Authorization Payload">

                <t> Authorization context information SHOULD 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> (PAD) as Kerberos authorization data
			    listing user and group names along with their
			    uidNumber and gidNumber [RFC2307], the name
			    of the DNS domain along with a
			    unique domain identifier and other information.
                            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 principal's
                            credential.
			</t>

			<t> PKIX <xref target='RFC5280'/> certificates allow
			    for extensions that could be used similarly.
		        </t>
                    </list>
                </t>

                <t> When a principal is authenticated using a GSS-API
                    authorization payload, the server SHOULD extract the payload
		    from the client's ticket and ID-Map or use name services
		    to map the information to local ID representations if
		    required.
                </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>

                <t> Remote authoritative name service queries may also be
		    necessary to construct the name@domain form of an ID
		    obtained from a GSS-API authorization payload.
		</t>

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

        </section> <!-- NFSv4 Multi-domain File Access -->

        <section title="Setting and Retrieving NFSv4 Multi-domain ACLs">

	    <t> When servicing a set acl request, the NFS server must
		be able to map the name@domain in the ACE who field to
		a local representation of ID. When servicing a get acl
		request, the NFS server must be able to map the 
		local representation of ID in the file system ACL to
		the name@domain form. This mapping between name@domain and
		local representation of ID needs to be done against
		an authoritative service.
	    </t>

            <section title="Managing Remote Users and Groups">

	        <t> In order to add a remote NFSv4 domain's users and groups
		    to file system ACLs in the local NFSv4 domain, a local
		    account must be created. This in turn makes the
		    local domain authoritative with respect to mapping between
		    name@domain and local representation of identity for
		    the remote user.
		</t>

                <t> Adding a user from a remote NFSv4 domain to a local NFSv4
		    domain
		    is not that different from adding a local user:
		    a local account is created giving the remote user
		    a local representation of ID. Extra steps may need
		    to be taken to enable mapping between the remote
		    RPCSEC_GSS principal and the local representation of ID,
		    as well as the mapping between the local
		    representation of ID and the name@(remote)domain.
                </t>

		<t> Adding a group from a remote NFSv4 domain to a local
		    NFSv4 domain is similar to adding a local group:
		    a local account is created giving the remote group
		    a local representation of ID. Extra steps may need to 
		    be taken to enable mapping between the name@(remote)domain
		    and the local representation of ID.
		</t>

            <section title="Remote User and Group Issues">

                <t> There are several issues here that need to be resolved,
		    including which if any of these questions should be 
		    answered in this document:

                    <list style="numbers">
		        <t> Remote user: We want the local name service to
			    be authoritative for resolving name@domain to local
			    ID mappings.  Does this mean we need to be notified
			    when a remote user is removed from the remote
			    domain? How is this different from a local user?
			</t>

			<t> Remote user/group: Note that when the authorization
			    context information is parsed as part of multi-domain
			    file access, group membership for the principal is
			    determined which gives an opportunity to update the
			    local domain data concerning the 
			    principals membership (or not) in remote groups.
		        </t>
			    
			<t> Remote group: Who gets to add members to a remote
			    group? The remote group owner? The local domain
			    admin? Who performs membership updates?
			</t>

			<t> Remote group: We want the local name service to
		            be authoritative for resolving name@domain to local
			    ID mappings. Does this mean that we need to be
			    notified if the remote group is removed from
			    the remote home domain?
			</t>

			<t> Remote group: Listing the membership of a remote
			    group may not be allowed (expected to work?) due
			    to the problem of knowing about and querying all
			    domains that provide members.
			</t>
		    </list>
		</t>

            </section> <!-- Remote User and Group Issues -->
            </section> <!-- Managing Remote Users and Groups -->
        </section> <!-- Setting and Retrieving NFSv4 Multi-domain ACLs -->

	<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>
