<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd">


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

<rfc category="std" ipr="trust200902" docName="draft-ietf-nfsv4-multi-domain-fs-reqs-10">

  <front>
    <title abbrev="Multi NFSv4 Domain">
      Multiple NFSv4 Domain Namespace Deployment 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 presents requirements on the deployment of the NFSv4
        protocols for the construction of an NFSv4 file name space in
        environments with multiple NFSv4 Domains. To participate in
        an NFSv4 multi-domain file name space, the server must offer
        a multi-domain capable file system and support RPCSEC_GSS for
        user authentication.  In most instances, the server must also
        support identity mapping services.
      </t>
    </abstract>
    <note title="Requirements Language">
      <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>
    </note>
  </front>

  <middle>
    <section anchor="INTRO" title="Introduction">
      <t>
        The NFSv4 protocols <xref target="RFC7530">NFSv4.0</xref>,
        <xref target="RFC5661"> NFSv4.1</xref>, <xref target="I-D.NFSv4.2">
        NFSv4.2 </xref> introduce the concept of an NFS Domain.
        An NFSv4 Domain is defined as a set of users and groups using
        the NFSv4 name@domain user and group identification syntax with
        the same specified @domain. 
      </t>
      <t>
        Previous versions of the NFS protocol, such as 
        <xref target="RFC1813"> NFSv3 </xref>, use the UNIX-centric user
        identification mechanism of numeric user and group ID for the 
        <xref target="RFC1813"> uid3 and gid3 </xref> file attributes
        and for identity in the <xref target="RFC5531"> ONCRPC
        </xref> authsys_parms AUTH_SYS credential.
        <xref target="RFC2624"> Section 6.1 of </xref> notes that the use of
        UNIX-centric numeric IDs
        limits the scale of NFS to large local work groups. UNIX-centric
        numeric IDs are not unique across NFSv3 deployments and so are not
        designed for Internet scaling achieved by taking into account multiple
        naming domains and multiple naming mechanisms (see
        <xref target="SecConstraints"/>).
        The NFSv4 Domain's use of the
        name@domain syntax provides this Internet scaling by allowing servers
        and clients to translate between the external name@domain string
        representation to a local or internal numeric (or other identifier)
        representation which matches internal implementation needs. 
      </t>
      <t>
        Multi-domain deployments require support for unique identities 
        across the deployment's name services and security services, as well
        as the use of multi-domain file systems capable of the on-disk
        representation of identities belonging to multiple NFSv4 Domains.
        The name@domain identity syntax can provide unique identities and
        so enables the NFSv4 multi-domain file name space.
      </t>
      <t>
        Unlike previous versions of NFS, the NFSv4 protocols define a referral
        mechanism (Section 8.4.3 <xref target="RFC7530"/>) that allows a 
        single server or a set of servers to present a multi-server namespace
        that encompasses file systems located on multiple servers.  This
        enables the establishment of site-wide, organization-wide,
        or even a truly global file name space.
      </t>
      <t>
        The NFSv4 protocols name@domain identity syntax and referral mechanism  
        along with the use of RPCSEC_GSS security mechanisms enables the
        construction of an NFSv4 multi-domain file name space.
      </t>
      <t>
        This document presents requirements on the deployment of the NFSv4
        protocols for the construction of an NFSv4 file name space in
        environments with multiple NFSv4 Domains. To participate in
        an NFSv4 multi-domain file name space, the server must offer
        a multi-domain capable file system and support RPCSEC_GSS
        <xref target="RFC2203"/> for
        user authentication.  In most instances, the server must also
        support identity mapping services.
      </t>
      
    </section>  <!--Introduction --> 

    <section title="Terminology">
      <t>
        <list style="hanging">
          <t>
           NFSv4 Domain: A set of users and groups using the NFSv4 name@domain
           user and group identification syntax with the same specified @domain.
          </t>

          <t>
            Stand-alone NFSv4 Domain: A deployment of the NFSv4 protocols
            and NFSv4 file name space in an environment with a single
            NFSv4 Domain.
          </t>

          <t>
            Local representation of identity: A representation of a user or
            a group of users capable of being stored persistently within a 
            file system.  Typically such representations are identical to 
            the form in which users and groups are represented within internal
            server API's. Examples are numeric id's such as a
            <xref target="RFC2307"> uidNumber (UID), gidNumber (GID)</xref>,
            or a <xref target="CIFS">Windows Security Identifier (SID)</xref>.
            In some case the identifier space for user and groups overlap, 
            requiring anyone using such an id to know a priori whether the 
            identifier is for a user or a group.  
          </t>

          <t>
            Unique identity: An on-the-wire form of identity that is unique
            across an NFSv4 multi-domain name space
            that can be mapped to a local representation. For example, the
            NFSv4 name@domain or the <xref target="RFC4121"> Kerberos
            principal@REALM </xref>. 
          </t>

          <t> 
            Multi-domain: In this document, the term "multi-domain" always
            refers to multiple NFSv4 Domains.
          </t>

          <t>
            Multi-domain capable filesystem: A local filesystem that uses a
            local ID form that can represent NFSv4 identities from multiple
            domains. 
          </t>

          <t>
            Principal: an <xref target="RFC2203"> RPCSEC_GSS </xref> 
            authentication identity.  Usually, but not always, a user;
            rarely, if ever, a group; sometimes a host or server.
          </t>

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

          <t>
            Stringified UID or GID: NFSv4 owner and group
            strings that consist of decimal numeric values with no
            leading zeros, and which do not contain an '@' sign.
            See Section 5.9 of <xref target="RFC5661"/>.
          </t>

          <t> 
            Name Service: Facilities that provides the mapping between
            {NFSv4 Domain, group or user name} and the appropriate local
            representation of identity.  Also includes facilities providing 
            mapping between a security principal and local representation of 
            identity.  Can be applied to unique identities or principals 
            from within local and remote domains.  Often provided
            by a Directory Service such as <xref target="RFC4511"> LDAP</xref>.
          </t>

          <t>
           Name Service Switch (nsswitch): a facility in provides a variety
           of sources for common configuration databases and name resolution
           mechanisms.
          </t>

          <t>
            FedFS: The <xref target="RFC5716">Federated File System (FedFS)
            </xref> describes the requirements and administrative tools
            to construct a uniform NFSv4 file server based name space that
            is capable of spanning a whole enterprise and that is easy
            to manage.
          </t>

          <t>
            Domain: This term is used in multiple contexts where it has
            different meanings. Definitions of "nfsv4 domain" and 
            "multi-domain" have already appeared above in 
            <xref target="INTRO"/>.  Below we provide other specific
            definitions used this document.

          <list style="hanging">
            <t>
              DNS domain: a set of computers, services, or any
              Internet resource identified by an
              <xref target="RFC1034">DNS domain name</xref>.
            </t>
            <t>
              Security realm or domain: a set of configured
              security providers, users, groups, security roles,
              and security policies running a single security
              protocol and administered by a single
              entity, for example a Kerberos realm.
            </t>
            <t>
              FedFS domain: A file name space that can cross
              multiple shares on multiple file servers using
              file-access protocols such as NFSv4.  A FedFS
              domain is typically a single administrative entity,
              and has a name that is similar to a DNS domain name.
              Also known as a Federation.
            </t>
            <t>
              Administrative domain: a set of users, groups,
              computers, and services administered by a single
              entity. Can include multiple DNS domains, NFSv4
              domains, security domains, and FedFS domains.
            </t>
          </list>
          </t>
        </list>
      </t>
    </section>  <!--Terminology -->

    <section  title="Federated File System">
      <t>
        The FedFS is the standardized method of constructing and
        administrating an enterprise-wide NFSv4
        filesystem, and so is referenced in this document.
        The requirements for multi-domain deployments
        described in this document apply to all NFSv4 multi-domain
        deployments, whether they are run as a FedFS or not.
      </t>

      <t>
        Stand-alone NFSv4 Domain deployments can be run in many ways. 
        While a FedFS can be run within all stand-alone NFSv4
        domain configurations some of these
        <xref target="StandAlone">configurations</xref>
        are not compatible with joining a multi-domain FedFS name space.
      </t>

    </section> <!-- Federated File System -->

    <section  title="Identity Mapping">
      <section anchor="v4map" title="NFSv4 Server Identity Mapping">
        <t> 
          NFSv4 servers deal 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 principal" (always
          corresponding to the NFSv4 server).  NFSv4 does not prescribe
          how to represent authorization identities on file
          systems.  All file access decisions constitute
          "authorization" and are made by NFSv4 servers using
          authorization context information and file metadata related
          to authorization, such as a file's access control list (ACL).
        </t>
        <t>
          NFSv4 servers may be required to perform two kinds of mappings
          depending upon what authentication and authorization information
          is sent on the wire, and what is stored in the exported file system.
          For example, if an authentication identity such as a Kerberos
          principal is sent with authorization information such a
          <xref target="PAC"> "privilege attribute certificate" (PAC)
          </xref> then mapping is not required (see 
          <xref target="AuthResolution"/>).

          <list style="numbers">
            <t>
              Auth-to-authz: A mapping between the authentication identity 
              and the authorization context information.
            </t>
            <t>
              Wire-to-disk: A mapping between the on-the-wire authorization
              identity representation and the on-disk authorization
              identity representation.
            </t>
          </list>
        </t>

        <t>
          A Name Service such as LDAP often provides these mappings.
        </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 environment.
        </t>

        <t>
         NFSv4 servers use these mappings for: 

          <list style="numbers">
            <t>
              File access: Both the auth-to-authz and the wire-to-disk mappings
               may be required for file access decisions.
            </t>

            <t>
              Meta-data setting and listing: The auth-to-authz mapping is
              usually required to service file metadata setting or
              listing requests such as ACL or UNIX permission setting or
              listing.  This mapping  is needed because NFSv4 messages use 
              identity representations of the form name@domain which normally
              differs from the server's local representation of identity.
            </t>
          </list>
        </t>

      </section>  <!-- NFSv4 Server Identity Mapping --> 
      <section title="NFSv4 Client Identity Mapping">
        <t>
          A client setting the owner or group attribute will often need 
          access to identity mapping services.  This is because API's 
          within the client will specify the identity in a local form
          (e.g UNIX using a UID/GID) so that when stringified id's cannot 
          be used, the id must be converted to a unique identity form.
        </t>
        <t>
          A client obtaining values for the owner or group attributes will
          similarly need access to identity mapping services.  This is 
          because the client API will need these attributes in a local 
          form, as above.  As a result name services need to be available 
          to convert the unique identity to a local form.  
        </t>
        <t>
          Note that each of 
          these situations arises because client-side API's require a 
          particular local identity representation.  The need for mapping 
          services would not arise if the clients could use the unique 
          representation of identity directly.
        </t>
      </section>  <!-- NFSv4 Client Identity Mapping --> 
    </section>  <!-- Identity Mapping --> 

    <section anchor="StandAlone" title="Stand-alone NFSv4 Domain Deployment Examples">
      <t>
        The purpose of this section is to list some typical stand-alone
        deployment examples to highlight the need for the
        required restraints to the NFSv4 protocol, name service configuration,
        and security service choices in an NFSv4 multi-domain environment
        described in <xref target="Constraints"/>.
      </t>

      <t>
        <xref target="Revisit"></xref> notes how these stand-alone deployment
        examples would need to change to participate in an NFSv4
        multi-domain deployment.
      </t>

      <t>
        In order to service as many environments as possible, the NFSv4 protocol
        is designed to allow administrators freedom to configure their NFSv4
        domains as they please.  Stand-alone NFSv4 Domains can be run in many
        ways.
      </t>

      <t>
        These examples are for a NFSv4 server exporting a POSIX UID/GID
        based file system, a typical deployment.
        These examples are listed in the order of increasing NFSv4
        administrative complexity.
      </t>
      <section anchor="sys-string" title="AUTH_SYS with Stringified UID/GID">
        <t> 
          This example is the closest NFSv4 gets to being run as NFSv3 as
          there is no need for a name service for file metadata listing.
        </t> 

        <t> 
          File access: The AUTH_SYS RPC credential <xref target="RFC5531"/>
          provides a UID as the
          authentication identity, and a list of GIDs as authorization
          context information.
          File access decisions require no name service interaction 
          as the on-the-wire and on-disk representation are the same and the
          auth-to-authz UID and GID authorization context information is
          provided in the RPC credential.
        </t> 

        <t> 
          Meta-data setting and listing: When the NFSv4 clients and servers
          implement a stringified UID/GID
          scheme, where a stringified UID or GID is used for the NFSv4
          name@domain on-the-wire identity, then a name service is not
          required for file metadata listing as the UID or GID
          can be constructed from the stringified form on the fly by the server.
        </t> 
      </section> <!-- AUTH_SYS with Stringified UID/GID -->

      <section anchor="sys-nostring" title="AUTH_SYS with name@domain">
        <t> 
          Another possibility is to express identity using the form
          'name@domain', rather than using a stringified UID/GID 
          scheme for file metadata setting and listing.
        </t> 

        <t> 
          File access: This is the same as in <xref target="sys-string"/>.
        </t> 

        <t> 
          Meta-data setting and listing: The NFSv4 server will need to
          use a name service for the wire-to-disk mappings to map between
	  the on-the-wire name@domain syntax and the on-disk UID/GID
          representation.  Often, the NFSv4 server will use the nsswitch
          interface for these mappings.
          A typical use of the nsswitch name service interface uses 
          no domain component, just the <xref target="RFC2307"> UID attribute
          </xref> (or login name) as the name component. This is no issue in a
          stand-alone NFSv4
          domain deployment as the NFSv4 Domain is known to the NFSv4 server
          and can combined with the login name to form the name@domain syntax
          after the return of the name service call.
        </t> 
      </section> <!-- AUTH_SYS with name@domain -->

      <section anchor="gss-nostring" title="RPCSEC_GSS with name@domain">
        <t> 
	  RPCSEC_GSS uses <xref target="RFC2743"> GSS-API </xref>
          security mechanisms to securely authenticate users to servers.
          The most common mechanism is <xref target="RFC4121"> Kerberos </xref>.
        </t>
        <t>
          This final example adds the use of RPCSEC_GSS with the
          Kerberos 5 GSS security mechanism.
        </t> 
        <t> 
          File Access: The forms of GSS principal names are
          mechanism-specific.  For Kerberos these are of the form
          principal@REALM.  Sometimes authorization context information
          is delivered with authentication, but this cannot be counted on.
          Authorization context information not delivered with authentication
          has timely update considerations (i.e., generally it's not
          possible to get a timely update).  File access decisions therefore
          require a wire-to-disk mapping of the GSS principal to a UID, and
          an auth-to-authz mapping to obtain the list of GIDs as the
          authorization context.
        </t> 

        <t> 
          Implementations must never blindly drop a Kerberos REALM name
          from a Kerberos principal name to obtain a POSIX username,
          but they may be configured to do so for specific REALMs.
        </t> 

        <t> 
          Meta-data setting and listing: This is the same as in
          <xref target="sys-nostring"/>.
        </t> 
      </section> <!-- RPCSEC_GSS with name@domain -->
    </section> <!-- Stand-alone NFSv4 Domain Deployment Exmamples -->

    <section anchor="Constraints" title="Multi-domain Constraints to the NFSv4 Protocol">
      <t>
        Joining NFSv4 Domains under a single file
        name space imposes slightly on the NFSv4 administration freedom. 
        Here we describe the required constraints.
      </t>

      <section anchor="nameconstraints" title="Name@domain Constraints">
        <t> 
          NFSv4 uses a syntax of the form "name@domain" as the
          on-the-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 NFSv4 clients and servers
          with different internal representations of authorization
          identity to interoperate even when referring to authorization
          identities from different NFSv4 Domains.
        </t>

        <t>
          Multi-domain capable sites need to meet the following
          requirements in order to ensure that NFSv4 clients
          and servers can map between name@domain and internal
          representations reliably.
          While some of these constraints are basic assumptions in 
          <xref target="RFC7530">NFSv4.0</xref> and
          <xref target="RFC5661">NFSv4.1</xref>, they need to
          be clearly stated for the multi-domain case.

          <list style="symbols">
            <t>
              The NFSv4 Domain portion of name@domain 
              MUST be unique within the multi-domain
              name space.  See <xref target="RFC5661"></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 NFSv4 Domain.
            </t>
        </list>
        </t>

        <t>
          Due to UID and GID collisions, stringified UID/GIDs MUST NOT be
          used in a multi-domain deployment. This means that
          multi-domain-capable servers MUST reject requests that use
          stringified UID/GIDs.
        </t>

        <section title="NFSv4 Domain and DNS Services">
          <t>
            Here we address the relationship between NFSv4 Domain name and
            DNS domain name in a multi-domain deployment.
          </t>

          <t>
            The definition of an NFSv4 Domain name, the @domain portion of
            the name@domain syntax, needs clarification to work
            in a multi-domain file system name space.
            <xref target="RFC5661">Section 5.9</xref> loosely
            defines the NFSv4 Domain name as a DNS domain name.
            This loose definition for the NFSv4 Domain name is a good one, as
            DNS domain names are globally unique.
            As noted above in <xref target="nameconstraints"/>, any choice of
            NFSv4 Domain name can work within a stand-alone NFSv4 Domain
            deployment whereas the NFSv4 Domain name is required to be unique
            across a multi-domain deployment.
          </t>

          <t>
            A typical configuration is that there is a single NFSv4 Domain that
            is served by a single DNS domain. In this case the NFSv4 Domain name
            can be the same as the DNS domain name.
          </t>

          <t>
            An NFSv4 Domain can span multiple DNS domains. In this case,
            one of the DNS domain names can be chosen as the NFSv4 Domain name.
          </t>

          <t>
            Multiple NFSv4 Domains can also share a DNS domain. In this case,
            only one of the NFSv4 Domains can use the DNS domain name, the
            other NFSv4 Domains must choose another unique NFSv4 Domain name.
          </t>
        </section> <!-- NFSv4 Domain and DNS Services -->

        <section title="NFSv4 Domain and Name Services">
          <t>
            As noted above in <xref target="nameconstraints"/>, 
            each name@domain is unique across the multi-domain name space and 
            maps, on each NFSv4 server, to the local representation of
            identity used by that server.  Typically, this representation 
            consists of an indication of the particular domain combined 
            with the UID/GID corresponding to the name component.  To 
            support such an arrangement, each NFSv4 Domain needs to have 
            a single name resolution service capable of converting the 
            names defined within the domain to the corresponding local
            representation.
          </t>

        </section> <!-- NFSv4 Domain and Name Services -->
      </section> <!-- name@domain constraint -->

      <section anchor="SecConstraints" title="RPC Security Constraints">

        <figure>
          <preamble>
            As described in <xref target="RFC5661"/>
            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 <xref target="RFC2203"/> GSS-API security
          mechanism used in a
          multi-domain name space is REQUIRED to employ a method
          of cross NFSv4 Domain trust so that a principal from a security
          service in one NFSv4 Domain can be authenticated in another
          NFSv4 Domain that uses a security service with the same security
          mechanism.  Kerberos is an example of such a security service.
        </t>
        <t>
          The AUTH_NONE <xref target="RFC5531"/> security flavor can be
          useful in a multi-domain
          deployment to grant universal read-only access to public data without
          any credentials.
        </t>
        <t>
          The AUTH_SYS security flavor <xref target="RFC5531"/> uses a
          host-based authentication model where the weakly authenticated
          host (the NFSv4 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 domain component, AUTH_SYS can only be
          used in a name space where all NFSv4 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 name space in AUTH_SYS.  Collisions can
          occur if multiple name services are used, so
          AUTH_SYS MUST NOT be used in a multi-domain file system deployment.
        </t>

        <section title="NFSv4 Domain and Security Services">
          <t>
            As noted above in <xref target="SecConstraints"/>,
            caveat AUTH_NONE, multiple NFSv4 Domain security services are
            RPCSEC_GSS based with the Kerberos 5 security mechanism
            being the most commonly (and as of this writing, the only)
            deployed service. 
          </t>
          <t>
            A single Kerberos 5 security service per NFSv4 Domain with
            the upper case NFSv4 Domain name as the Kerberos 5 REALM name
            is a common deployment.
          </t>
          <t>
            Multiple security services per NFSv4 Domain is allowed, and
            brings the need of mapping multiple Kerberos 5 principal@REALMs
            to the same local ID. Methods of achieving this are beyond the
            scope of this document.
          </t>
        </section> <!--  NFSv4 Domain and Security Services-->
      </section> <!-- RPC Security Constraints -->
    </section> <!-- Multi-domain Constraints to the NFSv4 Protocol -->

    <section anchor="Revisit" title="Stand-alone Examples in an NFSv4 Multi-domain Deployment">
      <t>
        In this section we revisit the stand-alone NFSv4 Domain deployment
        examples in <xref target="StandAlone"/> noting what is prohibiting
        them from participating in an NFSv4 multi-domain deployment.
      </t>

      <t>
        Note that because all on-disk identities participating in a stand-alone
        NFSv4 Domain belong to the same NFSv4 Domain, stand-alone
        NFSv4 Domain deployments have no requirement for exporting
        multi-domain capable file systems. To participate in an NFSv4
        multi-domain deployment, all three examples in
        <xref target="StandAlone"/> would need to export multi-domain
        capable file systems.
      </t>

      <t>
        Due to the use of AUTH_SYS and stringified UID/GIDs the first
        stand-alone deployment example in <xref target="sys-string"/> is
        not suitable for participation in an NFSv4 multi-domain deployment.
      </t>

      <t> 
        The second example in described in <xref target="sys-nostring"/> 
        does use the name@domain identity syntax, but the use of AUTH_SYS
        prohibits its participation in an NFSv4 multi-domain deployment. 
      </t>

      <t>
        The third example in <xref target="gss-nostring"/> can
        participate in a multi-domain name space deployment if:

        <list style="symbols">
          <t>
            The NFSv4 Domain name is unique across the name space.
          </t>

          <t>
            All exported file systems are multi-domain capable.
          </t>

          <t>
            A secure method is used to resolve remote NFSv4 Domain principals
            authorization information from an authoritative source.
          </t>
        </list>
      </t>
    </section> <!-- Stand-alone Examples in an NFSv4 Multi-domain Deployment -->

    <section anchor="AuthResolution" title="Resolving Multi-domain Authorization Information">
      <t>
        When an RPCSEC_GSS principal is seeking access to files on an NFSv4
	server, after authenticating the principal, the server must obtain
	in a secure manner the principal's authorization context
        information from
	an authoritative source such as the name service in the principal's
	NFSv4 Domain.
      </t>
      <t>
        In the stand-alone NFSv4 Domain case where the principal is
        seeking access to files on an NFSv4 server in the principal's
        home NFSv4 Domain, the server administrator has knowledge of the local
	policies and methods for obtaining the principal's authorization
	information and the mappings to local representation of identity
        from an authoritative source.
	E.g., the administrator can configure secure access to the local NFSv4
	domain name service.
      </t>
      <t>
        In the multi-domain case where a principal is seeking access
        to files on an NFSv4 server not in the principal's home NFSv4 Domain,
        the NFSv4 server may be required to contact the remote name service
        in the principals NFSv4 Domain. In this case there is no assumption of:
        <list style="symbols">
          <t>
	    Remote name service configuration knowledge.
	  </t>
          <t>
	    The syntax of the remote authorization context information
	    presented to the NFSv4 server by the remote name service
	    for mapping to a local representation.
	  </t>
	</list>
      </t>

      <t>
        There are several methods the NFSv4 server can use to obtain the
	NFSv4 Domain authoritative authorization information for a
	remote principal from an authoritative source.
        While any detail is beyond the scope of this document,
        some general methods are listed here.

	<list style="numbers">
          <t>
              A mechanism specific GSS-API authorization payload
              containing credential authorization data such as 
              a <xref target="PAC"> "privilege attribute
              certificate" (PAC) </xref> or a
              <xref target="I-D.sorce-krbwg-general-pac"> "principal
              authentication data" (PAD) </xref>.
	      This is the preferred method as the payload is delivered
	      as part of GSS-API authentication, avoids requiring
	      any knowledge of the remote authoritative service
              configuration, and its syntax is well known.
          </t>
          <t>
              When there is a security agreement between the local and
	      remote NFSv4 Domain name services plus regular update data
              feeds, the NFSv4 server local NFSv4 Domain name service can
	      be authoritative for principal's in the remote NFSv4 Domain.
	      In this case, the NFSv4 server makes a query to
	      it's local NFSv4 Domain name service just as it does when
	      servicing a local domain principal. While this requires detailed
	      knowledge of the remote NFSv4 Domains name service for the
              update data feeds, the authorization context information
              presented to the NFSv4 server is in the same form as a query
              for a local principal.
          </t>
          <t>
              An authenticated direct query from the NFSv4 server to the
              principal's NFSv4 Domain authoritative name service.
              This requires the NFSv4 server to have detailed
              knowledge of the remote NFSv4 Domain's authoritative
              name service and detailed knowledge of the syntax of the resultant
	      authorization context information.
          </t>
	</list>
      </t>
    </section> <!--Resolving Multi-domain Authorization Information -->

    <section title="Security Considerations">
      <t>
        This RFC discusses security throughout.  All the security
        considerations of the relevant protocols, such as
        <xref target="RFC7530"> NFSv4.0</xref>,
        <xref target="RFC5661"> NFSv4.1</xref>,
        <xref target="RFC2203"> RPCSEC_GSS</xref>,
        <xref target="RFC4121"> GSS-API</xref>,
        <xref target="RFC4511"> LDAP</xref>,
        <xref target="RFC5716"> Requirements for Federated FS </xref>,
        <xref target="RFC7532"> FedFS Namespace DB Protocol </xref>,
        <xref target="RFC7533"> FedFS Administration Protocol </xref>,
        <xref target="I-D.lever-fedfs-security-addendum"> FedFS Security
        Addendum</xref> apply.
      </t>
      <t>
        Authentication and authorization across administrative domains
        presents security considerations, most of which are treated
        elsewhere, but we repeat some of them here:

        <list style="symbols">
          <t>
            latency in propagation of revocation of authentication credentials
          </t>
          <t>
            latency in propagation of revocation of authorizations
          </t>
          <t>
            latency in propagation of granting of authorizations
          </t>
          <t>
            complications in establishing a foreign domain's users' complete
            authorization context: only parts may be available to servers
          </t>
          <t>
            privacy considerations in a federated environment
          </t>
        </list>
      </t>
      <t>
        Most of these are security considerations of the mechanisms used to
        authenticate users to servers and servers to users, and of the
        mechanisms used to evaluate a user's authorization context.
      </t>
      <t>
        Implementors may be tempted to assume that realm (or "issuer") and
        NFSv4 Domain are roughly the same thing, but they are not.
        Configuration
        and/or lookup protocols (such as LDAP) and associated schemas are
        generally required in order to evaluate a user principal's
        authorization context (see <xref target="AuthResolution"/>).
        In the simplest scheme a server has access to
        a database mapping all known principal names to usernames whose
        authorization context can be evaluated using operating system
        interfaces that deal in usernames rather than principal names.
      </t>
      <t>
        Note that clients may also need to evaluate a server's
        authorization context when using labeled security 
        <xref target="I-D.NFSv4.2"/> (e.g., is the
        server authorized to handle content at a given security level, for
        the given client process subject label).
      </t>
      <t>
	When the server accepts user credential from more than one realm,
        it is important to remember that the server must verify that the                client it is talking to
        has a credential for the name the client has presented the server, and
        that that credential's issuer (i.e., its realm) is allowed to issue it.
        Usually the service principal realm authorization function is
        implemented by the security mechanism, but the implementor should
        check this.
      </t>
    </section> <!-- Security Considerations -->

    <section anchor="sec:iana" title="IANA Considerations">
      <t>
        There are no IANA considerations in this document.
      </t>
    </section> <!-- IANA Consideration" -->


  </middle>
  <back>
    <references title="Normative References">

      <?rfc include="reference.RFC.1034"?>
      <?rfc include="reference.RFC.1813"?>
      <?rfc include="reference.RFC.2119"?>
      <?rfc include="reference.RFC.2203"?>
      <?rfc include="reference.RFC.2743"?>
      <?rfc include="reference.RFC.4121"?>
      <?rfc include="reference.RFC.4511"?>
      <?rfc include="reference.RFC.5661"?>
      <?rfc include="reference.RFC.7530"?>

      <reference anchor='I-D.NFSv4.2'>
        <front>
          <title>NFS Version 4 Minor Version 2
          </title>
          <author initials="T." surname="Haynes" fullname="T. Haynes">
            <organization>Primary Data</organization>
          </author>
          <date year="2015" month="April" />
        </front>
        <seriesInfo name="draft-ietf-nfsv4-minorversion2-36" value="(Work In Progress)"/>
      </reference>

    </references>

    <references title="Informative References">

      <?rfc include="reference.RFC.2307"?>
      <?rfc include="reference.RFC.2624"?>
      <?rfc include="reference.RFC.5531"?>
      <?rfc include="reference.RFC.5716"?>
      <?rfc include="reference.RFC.7533"?>
      <?rfc include="reference.RFC.7532"?>

      <reference anchor='I-D.sorce-krbwg-general-pac'>
        <front>
          <title>A Generalized PAC for Kerberos V5
          </title>
          <author initials="S." surname="Sorce" fullname="S. Sorce">
            <organization>Red Hat</organization>
          </author>
          <author initials="T." surname="Yu" fullname="T. Yu">
            <organization>MIT Kerberos Consortium</organization>
          </author>
          <author initials="T." surname="Hardjono" fullname="T. Hardjono">
            <organization>MIT Kerberos Consortium</organization>
          </author>
          <date year="2011" month="June" />
        </front>
        <seriesInfo name="draft-ietf-krb-wg-general-pac-01" value="(Work In Progress awaiting merge with other document )"/>
      </reference>

      <reference anchor='I-D.lever-fedfs-security-addendum'>
        <front>
          <title>Federated Filesystem Security Addendum
          </title>
          <author initials="C." surname="Lever" fullname="C. Lever">
            <organization>Oracle</organization>
          </author>
          <date year="2016" month="May" />
        </front>
        <seriesInfo name="draft-cel-nfsv4-federated-fs-security-addendum-05" value="(Active Internet Draft)"/>
      </reference>

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

      <reference anchor="CIFS">
        <front>
          <title>
            [MS-CIFS] — v20130118 Common Internet File System (CIFS) Protocol
          </title>
          <author>
            <organization>Microsoft Corporation</organization>
          </author>
          <date month="January" year="2013" />
        </front>
      </reference>

    </references>


    <section title="Acknowledgments">
      <t>
       Andy Adamson would like to thank NetApp, Inc. for its funding of his
       time on this project.
      </t>
      <t>
       We thank Chuck Lever, Tom Haynes, Brian Reitz, Bruce Fields, and David
       Noveck for their review.
      </t>
  </section>

  </back>
</rfc>
