One document matched: draft-brashear-afs3-pts-extended-names-01.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
<!ENTITY rfc1510 PUBLIC ''
'http://xml.resource.org/public/rfc/bibxml/reference.RFC.1510.xml'>
<!ENTITY rfc1964 PUBLIC ''
'http://xml.resource.org/public/rfc/bibxml/reference.RFC.1964.xml'>
<!ENTITY rfc2119 PUBLIC ''
'http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml'>
<!ENTITY rfc2743 PUBLIC ''
'http://xml.resource.org/public/rfc/bibxml/reference.RFC.2743.xml'>
]>
<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>
<?rfc toc="yes" ?>
<?rfc symrefs="yes" ?>
<?rfc iprnotified="yes" ?>
<?rfc strict="yes" ?>
<?rfc compact="yes" ?>
<?rfc subcompact="no" ?>
<?rfc sortrefs="no" ?>
<?rfc colonspace='yes' ?>
<rfc category="bcp" docName="draft-brashear-afs3-pts-extended-names-01"
ipr="trust200902">
<front>
<title abbrev="AFS-3 PTS extended auth names">Authentication Name Mapping extension for AFS-3 Protection Service</title>
<author fullname="Derrick J. Brashear" initials="D." surname="Brashear">
<organization>OpenAFS Project</organization>
<address>
<postal>
<street>2829 Larkins Way</street>
<city>Pittsburgh</city>
<region>PA</region>
<code>15203</code>
<country>USA</country>
</postal>
<email>shadow@openafs.org</email>
</address>
</author>
<date year="2010" />
<area>AFS3</area>
<workgroup>N/A</workgroup>
<keyword>I-D</keyword>
<keyword>Internet-Draft</keyword>
<keyword>AFS3</keyword>
<keyword>AFS-3</keyword>
<keyword>PTS</keyword>
<keyword>authentication</keyword>
<keyword>GSSAPI</keyword>
<keyword>Kerberos</keyword>
<abstract>
<t>This document describes the extension of the format, use
and communication of authentication names in the AFS-3 protocol
to allow for additional authentication mechanisms to be
represented and mapped to AFS IDs, independent of the AFS
usernames currently used for management of PRDB entries.
The new interface provides mechanisms for adding, removing, and
listing mappings, and to allow the fileserver to map an
authentication name to a PTS identity.</t>
</abstract>
</front>
<middle>
<section title="Introduction">
<t>AFS-3 provides an authentication ID mapping service to map
authentication system names in Kerberos Version 4 format to
AFS-3 numeric identifiers. An augmented Kerberos 4 server was
historically part of the AFS-3 protocol and service suite.</t>
<t>Security issues with Kerberos 4 as well as additional development
in the space of authentication systems has created the need to
map authentication names from other deployed systems to AFS
identifiers. Some deployments provide several mechanisms to
obtain AFS authentication; While mappings between Kerberos 4
and <xref target="RFC1510">Kerberos 5</xref> authentication names
allow use of most Kerberos 5 deployments with AFS, supporting more
than a single realm requires matching usernames in all realms;
Additionally, support for other systems is not provided at all.</t>
<t>An administrator or a user may know which which authentication
identities belong to the same individual, service, or role. However,
not all deployments need to support interactive remapping; One use
case could involve re-exporting another naming service via the
AFS-3 PTS protocol, in which case only the name to identifier and
identifier to name services would be provided.</t>
<t>The deployment implications for a mapping service are described
below in <xref target="recommended_usage"></xref>.</t>
</section>
<section title="Conventions Used in this Document">
<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"></xref>.</t>
</section>
<section title="Background information on operation of AFS">
<t>AFS is a distributed file system organized administratively
into cells. In current practice, each AFS cell consists of one or
more Volume Location Database (VLDB) servers, one or more
Protection Service (PTS) servers, and one or more pairs of file
servers and volume servers, plus possibly additional services
not relevant to this document. Data stored in AFS is divided
into collections of files called volumes. An AFS protocol client,
when accessing a file within a specific AFS cell, first contacts
a VLDB server for that cell to determine the file server for the
AFS volume in which that file is located, and then contacts that
file server directly to access the file. A client may also need
to contact a PTS server for that cell to register before accessing
files in that cell. All communication is via remote procedure
calls ('RPCs'), both between component servers and between clients
and servers.</t>
<t>Because AFS provides for authenticated access to data, it is
necessary to map authentication entities, generally corresponding
to users of the AFS file service ('users') or services requiring
access to data via the AFS file service ('services'), collectively
clients of the AFS file service ('clients'), to AFS authentication
identifiers ('AFS IDs'). The PTS service is used to provide this
service to the file server when required, typically when a client
first contacts a file server with a new authentication context,
including unauthenticated. AFS originally included a Kerberos
authentication (KA) server implementing the Kerberos 4 protocol
as well as the AFS-3 KA protocol for obtaining authentication
information. Because of this, PTS authentication names take the
format of a Kerberos 4 authentication name.</t>
</section>
<section title="RPC Interface">
<t>Five new RPCs are defined for the AFS PTS service; Four of these
are used to manipulate data related to authentication names, while
the fifth is a general-purpose RPC to be used for capabilities
indication.</t>
</section>
<section title="Error Codes">
<t>AFS uses a library (com_err) and a tool from the MIT Project
Athena suite (compile_et) to generate unique error codes
protocol-wide. Codes are generated from a base value computed
using a 4 or fewer character string known as an error table,
identifying the subset of functionality which generated the
error. All error codes are represented as signed 32 bit integers.
The base value for PTS errors is 267264, generated from the
error table name 'PT'. All RPCs when implemented are expected
to return PTS errors. It is also possible for an implementation
to support only part of this proposal. As such, any unimplemented
RPCs should return error -455 (RXGEN_OPCODE), the error indicating
an RPC is unsupported. No new errors are defined as part
of this draft.</t>
<t>The existing error code PRPERM shall be used for permission
errors due to insufficient privilege when attempting any
of the described RPCs.</t>
</section>
<section title="Existing Protocol Constants">
<t>When it is necessary to represent an identity which has
provided either no authentication information, or information
which does not include a corresponding AFS ID, an anonymous
ID is defined and used.</t>
<figure><artwork><![CDATA[
#define ANONYMOUSID 32766
]]></artwork></figure>
<t>The AFS ID 32766 shall be returned when an authentication
name is unknown.</t>
</section>
<section title="Existing Per-Identity Permission Flags">
<t>The PTS service includes a basic security model based
around defined access flags. The flags are represented as
5 fields, each of which can have 3 values. One of these fields,
the "s" field, is used to control who can get information
about the entity. Valid values are 'S', which maps to PRP_STATUS_ANY,
meaning anyone can get the information; 's', which maps to
PRP_STATUS_MEM, meaning only members, the entity owner,
and administrators can get the information; and '-' (or unset),
meaning only the entity owner and administrators can get
the information.</t>
</section>
<section anchor="rpcs_defined" title="RPC Interface">
<t>Six new RPCs are defined for the AFS PTS service; Five of these
are used to manipulate data related to authentication names, while
the sixth is a general-purpose RPC to be used for capabilities
indication. Additionally, several new data types are defined to
allow representation of authentication names and identifiers in
these new RPCs.</t>
<section title="New Data Types">
<t>In order to represent a set of AFS IDs, the nidlist type
is defined. AFS IDs are expected to be enhanced to allow
a larger set of IDs concurrently with this advancement of
this proposal.</t>
<figure><artwork><![CDATA[
typedef afs_int64 nidlist<>;
]]></artwork></figure>
<t>A list of AFS IDs, represented as 64 bit integers.</t>
<t>Authentication names are expected to be mechanism-specific.
Thus, an authentication-type agnostic data structure must
be provided to represent these names. An implementing server
is expected to be able to use a bitwise comparison operation on
the data portion of a PrAuthName; Support for all available
name types is not expected.</t>
<figure><artwork><![CDATA[
#define AUTHDATAMAX 2048
#define AUTHPRINTABLEMAX 2048
struct PrAuthName {
afs_int32 kind;
opaque data<AUTHDATAMAX>;
opaque display<AUTHPRINTABLEMAX>; };
]]></artwork></figure>
<t>Because some mechanisms will provide name data which is
not human-readable, and because no single format is sufficient
to represent all possible mechanism authentication names,
the PrAuthName data structure includes an integer tag denoting
type, and an opaque data object representing the mechanism-specific
authentication name data. The display portion is to be
used for display to end-users, and MUST NOT be used for
comparison purposes. If a display portion is not provided,
the data portion MUST NOT be used directly for user display
purposes. A client with knowledge of the GSSAPI mechanism MAY
import the data portion and use it to generate a display name.</t>
<figure><artwork><![CDATA[
typedef struct PrAuthName authnamelist<>;
]]></artwork></figure>
<t>Because each AFS ID is expected to have more than one
name mapped to it, and possibly will have more than one name
of each type assigned to the same AFS ID, it is necessary
to support a list of PrAuthNames.</t>
</section>
<section title="Authentication Name Types">
<t>The PrAuthName data type includes a 32 bit integer field
to represent the kind of authentication being mapped. It
is proposed that in addition to mappings for legacy Kerberos
4 based AFS names, that the first version of this additionally
include mappings for Kerberos 5-based and GSSAPI-based authentication
names.</t>
<figure><artwork><![CDATA[
#define PRAUTHTYPE_KRB4 XXX
#define PRAUTHTYPE_KRB5 XXX
#define PRAUTHTYPE_GSS XXX
]]></artwork></figure>
</section>
<section title="GetCapabilities RPC">
<t>As with other AFS services, the PTS service could be enhanced
with the ability to represent new abilities to file servers
and clients. We propose a new general-purpose RPC of the
type implemented by other AFS services, namely, a bit stream.
It is proposed that the first 32 bits be allocated to capabilities
flags, while the remainder be reserved for future standardisation.</t>
<t>A complying server MUST implement GetCapabilities.</t>
<figure><artwork><![CDATA[
const PTSCAPABILITIESMAX = 196;
typedef afs_uint32 PrCapabilities<PTSCAPABILITIESMAX>;
const PTS_CAPABILITY_AUTHNAMEMAPPING = XXX;
GetCapabilities(
PrCapabilities *prcapabilities
) multi = XXX;
]]></artwork></figure>
<t>An implementing server should return a bit stream including
any capabilities data it wishes to advertise. A server may
choose to not advertise the same capabilities to all callers;
For instance, the set of capabilities advertised to an authenticated
caller may be different than the set advertised to an anonymous
caller. In addition to the bitstream, return value is 0 for
success, or a PTS error in the event of error.</t>
</section>
<section title="Authentication name mapping RPCs">
<t>In addition to the general-purpose (GetCapabilities) RPC
needed to represent this extended functionality, a complying
server will include RPCs to represent the mapping of extended
names to AFS IDs.</t>
<section title="AuthNameToID">
<t>A complying server MUST implement the AuthNameToID RPC.
This RPC is used to convert one or more authentication names,
obtained by a file server or client in a mechanism-specific
manner, to AFS IDs.</t>
<figure><artwork><![CDATA[
AuthNameToID(IN authnamelist *alist,
OUT nidlist *ilist) = XXX;
]]></artwork></figure>
<t>For each authname provided in alist, an AFS ID will be
provided in list at the corresponding position. Where an
authentication name cannot be looked up, the AFS ID in list
will be ANONYMOUSID.</t>
<t>On success of the call, 0 shall be returned. Success includes
calls where none of the identities provided in authnamelist
can be mapped to AFS IDs.</t>
<t>A client being used to manipulate mappings SHOULD use this RPC to
discover the existing mapping, if any, for a given authentication
name. A caller using the mapping service for service operation
SHOULD instead call AuthNameToIDFallback.
</t>
</section>
<section title="AuthNameToIDFallback">
<t>A complying server MUST implement the AuthNameToIDFallback RPC.
This RPC is used to convert one or more authentication names,
obtained by a file server or client in a mechanism-specific
manner, to AFS IDs to be used in making authorization decisions
related to the named authentication identities.</t>
<figure><artwork><![CDATA[
AuthNameToIDFallback(IN authnamelist *alist,
OUT nidlist *ilist) = XXX;
]]></artwork></figure>
<t>For each authname provided in alist, an AFS ID will be
provided in list at the corresponding position. Implicit
fallback mappings will be used to map identities where no explicit
mapping is provided. Where an authentication name cannot be looked up,
the AFS ID in list will be ANONYMOUSID.</t>
<t>On success of the call, 0 shall be returned. Success includes
calls where none of the identities provided in authnamelist
can be mapped to AFS IDs.</t>
<t>A caller using the mapping service for service operation SHOULD
use this RPC. A client being used to manipulate
mappings SHOULD use AuthNameToID instead.</t>
</section>
<section title="ListAuthNames">
<t>A complying server SHOULD implement the ListAuthNames RPC.
This RPC is used to list all authentication names attached
to the provided AFS ID.</t>
<figure><artwork><![CDATA[
ListAuthNames(IN afs_int64 id, OUT authnamelist *alist) = XXX;
]]></artwork></figure>
<t>On success, 0 shall be returned, along with the list of
authentication names in alist corresponding to the AFS ID
provided in id.</t>
</section>
<section title="WhoAmI">
<t>A complying server SHOULD implement the WhoAmI RPC.
This RPC is used to return the current the current authentication
name and AFS ID for a caller to the caller.</t>
<figure><artwork><![CDATA[
WhoAmI(OUT afs_int64 id, OUT struct PrAuthName *alist) = XXX;
]]></artwork></figure>
<t>On success, 0 shall be returned, along with the identity and
authentication name corresponding to the caller of the RPC.</t>
</section>
<section title="AddAuthName">
<t>A complying server MAY implement the AddAuthName RPC.
This RPC is used to add an authentication name to an existing
AFS ID.</t>
<figure><artwork><![CDATA[
AddAuthName(IN afs_int64 id, IN PrAuthName *aname) = XXX;
]]></artwork></figure>
<t>On success, 0 shall be returned. If the authentication
name provided is already mapped to another AFS ID, PREXIST
shall be returned. If the AFS ID specified does not exist,
PRNOENT shall be returned.</t>
</section>
<section title="RemoveAuthName">
<t>A complying server MAY implement the RemoveAuthName RPC.
This RPC is used to remove an authentication name from an
existing AFS ID.</t>
<figure><artwork><![CDATA[
RemoveAuthName(IN PrAuthName *aname) = XXX;
]]></artwork></figure>
<t>On success, 0 shall be returned. If the authentication
name provided is not mapped, PRNOENT shall be returned.</t>
</section>
</section>
</section>
<section anchor="recommended_usage" title="Recommended Usage">
<t>Two classes of service providers are possible. In one, where
data is provided in a read-only fashion from an alternate
authorization service, only the AuthNameToID and ListAuthNames
RPCs are required. In the other, all RPCs are required, such that
mappings can be constructed and maintained.</t>
<t>The ListAuthNames operation should be permitted for administrators
as well as for the owner of the entry to be listed. If the
'S' (PRP_STATUS_ANY) bit is set on the entry, then other
users may also perform this operation.</t>
<t>The AddAuthName and RemoveAuthName operations should always be
permitted for administrations, and should normally also be
permitted for the owner of the entry to be updated. For RemoveAuthName,
the entry being updated is always the one to which the specified
name currently maps, and should be an identity which is not the one
being removed. Regardless, any given authentication name can map only
to one ID; attempting to add (via AddAuthName) a second mapping for
the same authentication name must fail.</t>
<t>The AuthNameToID operation is analogous to the existing
NameToID operation, and like that, should be able to be used
by anyone.</t>
</section>
<section title="Compatibility">
<t>An implementation of the AFS protection service protocol
implementing these extensions shall indicate this by including
in the response to a GetCapabilities PTS RPC the capability
flag PTS_CAPABILITY_AUTHNAMEMAPPING.
</t>
</section>
<section title="Authentication Name Types">
<t>While the authentication name is an opaque type with respect
to the AFS-3 protocol, it is recommended that the following
definitions be used for the proposed types described herein.</t>
<section title="Kerberos V4">
<t>The format of the Kerberos V4 name type is either name@REALM
or name.inst@REALM, depending on whether a non-null instance
is present. In both cases the trailing NUL character is *not*
part of the authentication name data.</t>
</section>
<section title="Kerberos V5">
<t>The format of the Kerberos V5 name type is that described
in section 2.1.3 of <xref target="RFC1964"></xref>.
To this extent, the quoting character, '\', is not an allowable
character in a principal.</t>
</section>
<section title="GSSAPI Export Names">
<t>The format of the GSSAPI name type is that described in
section 3.2 of <xref target="RFC2743"></xref>.
The data opaque object will contain the GSSAPI canonical
name as generated by GSS_Export_name. The display opaque object
will contain the GSSAPI display name type and name string as
generated by GSS_Display_name. The display name must only be
used for printing; the canonical name must not be used for printing.</t>
</section>
<section title="Authentication Name Type Rewriting">
<t>When Kerberos 4 or 5 is used, with or without the GSS-API, the
corresponding Kerberos name type MUST be used. In particular,
Kerberos 4 principal names MUST NOT be represented using the
Kerberos 5 name type or vice versa, and Kerberos 5 principal names
MUST NOT be represented using the GSS-API export name type with the
Kerberos mechanism OID. Servers accepting GSS-API krb5 authentication
and receiving an export name with the Kerberos mechanism OID MUST
convert to the Kerberos 5 name type before calling AuthNameToID.
This is intended to allow all users of Kerberos 5 as an authentication
mechanism, regardless of bindings, to use the same authentication name.
</t>
</section>
</section>
<section title="Security Considerations">
<t>Allowing AuthNameToID to be used by any caller exposes information
about whether an authentication name is mapped at all, or, indeed,
exists. In some environments, this information may be considered
privileged.</t>
<t>Allowing a user to add arbitrary mappings to their identity via
AddAuthName may allow unintended permissions to be granted if the
user makes a mistake when mapping identities to the AFS identity
in question.</t>
<t>Because a server is not required to know about all available name types,
display names are provided by the caller to AddAuthName. It is possible
to provide an erroneous display name whether for malicious or benign
reasons; In either case, making a decision based on the display name
may result in problems.</t>
</section>
<section title="IANA Considerations">
<t>This document doesn't require any IANA registrations.</t>
</section>
<section title="AFS-3 Registry Considerations">
<t>This document requires the registration of the new RPCs
as provided in the section <xref target="rpcs_defined"></xref>above,
as well as new registries for PTS capabilities and for name types,
also as above.</t>
</section>
<section title="Acknowledgments">
<t>The author thanks Magnus Ahltorp, Love Hörnquist Åstrand,
and Jeffrey T. Hutzelman for their work on the scope of this
enhancement, and to the attendees of the 2009 AFS hackathon
in Edinburgh, notably Marcus Watts and Simon Wilkinson, for
their assistance in defining the name object for GSSAPI.</t>
</section>
</middle>
<!-- REFERENCES (the environment variable XML_LIBRARY must point to the directory where the citations (references) can be found; unzip them from http://xml.resource.org/ -->
<back>
<references title="Normative References">
<?rfc include="reference.RFC.2119" ?>
</references>
<references title="Informational References">
<?rfc include="reference.RFC.1510" ?>
<?rfc include="reference.RFC.1964" ?>
<?rfc include="reference.RFC.2743" ?>
</references>
</back>
</rfc>
| PAFTECH AB 2003-2026 | 2026-04-21 10:28:39 |