Network Working Group                                      Bernard Aboba
INTERNET-DRAFT                                                 Microsoft
Category: Experimental
<draft-aboba-radius-04.txt>
20 August 1999
Expires: March 1, 2000

              Lightweight Directory Access Protocol (v3):
       Schema for the Remote Access Dialin User Service (RADIUS)

1.  Status of this Memo

This document is an Internet-Draft and is in full conformance with all
provisions of Section 10 of RFC2026.

Internet-Drafts are working documents of the Internet Engineering Task
Force (IETF), its areas, and its working groups. Note that other groups
may also distribute working documents as Internet-Drafts.

Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference material
or to cite them other than as "work in progress."

The list of current Internet-Drafts can be accessed at
http://www.ietf.org/ietf/1id-abstracts.txt

The list of Internet-Draft Shadow Directories can be accessed at
http://www.ietf.org/shadow.html.

Distribution of this memo is unlimited.

2.  Copyright Notice

Copyright (C) The Internet Society (1999).  All Rights Reserved.

3.  Abstract

This document defines a schema for the Remote Access Dialin User Service
(RADIUS). This schema makes it possible to integrate a RADIUS server
with an LDAP-based directory service, making it possible for an
organization to maintain a single store of user information. This
consolidation is desirable since it results in a reduction in the
administrative workload, and eliminates the need to synchronize across
multiple user information stores.

Aboba                         Experimental                      [Page 1]


INTERNET-DRAFT          RADIUS Schema for LDAP v3         20 August 1999

4.  Introduction

Today enterprises are looking to simplify the process of user
administration by replacing application-specific directories with a
unified directory service based on LDAP v3, described in [5]-[6].
Maintaining multiple stores of user information is unappealing, since
this may require rekeying of information or sychronization between
multiple stores, resulting in increased administrative costs.
Maintaining multiple stores also raises concerns about inconsistency and
replication delays.

With the advent of enterprise resource planning (ERP) and personnel
management systems, information on a user is typically entered at the
time of hiring, and is retained until termination. If an LDAP-based
directory is also deployed, this necessitates synchronization with the
of the personnel database in order to maintain consistency.  Should the
enterprise then deploy NAS devices or layer 2 tunneling solutions, there
may be a need to add a RADIUS server or if extended security is
required, a backend security server. Each of these may require their own
user information store.  In order to avoid these problems, it is
desirable to consolidate stores of user information. One way this can be
achieved is to make it possible for RADIUS servers and security add-ons
to store their user information in an LDAP-based directory.

This document defines an LDAP schema for the Remote Access Dialin User
Service (RADIUS). The RADIUS protocol, described in [1]-[4], supports
authentication, authorization and accounting for dialup users.  To date,
RADIUS servers have stored user data in a variety of ways, including
databases and flat files. A goal of this schema is to make it possible
to add support for LDAP-based directory services to existing RADIUS
server implementations. In order to permit this schema to be used with a
wide range of directory service implementations, it is necessary to
avoid reliance on features that have not been widely implemented, such
as multiple inheritance.

4.1.  Administrative model

The schema defined in this document includes user object attributes, as
well as profile and policy objects.

User object attributes are used in situations where it may be desirable
to override behavior supplied in a profile, or where it is desired that
individual users be given an unique value for an attribute. For example,
where static addresses are assigned, each user will typically have a
different IP address.  Similarly, where callback is used, callbackNumber
will typically differ between users.

Aboba                         Experimental                      [Page 2]


INTERNET-DRAFT          RADIUS Schema for LDAP v3         20 August 1999

However, it is not desirable to depend exclusively on user object
attributes.  Since it is likely that groups of users will tend to have
the same parameter values, an implementation based solely on user-object
attributes results in unnecessary replication, and also makes it
difficult to change attributes for all members of a group.

To reduce the replication problem, enable more effective caching, and
ease the administrative burden, profile objects are required. Profiles
support definition of parameter sets which apply to a group of users in
a particular situation. Since it is expected that profiles will apply to
large group of users, they can be effectively cached.

Network administrators typically manage the authorization process via
group assignments, and therefore will typically desire to fit profiles
within the existing administrative model. In particular, it is highly
desirable to allow an administrator to change the profile values
applying to a group without having to edit the user objects for each
member of the group.

Within this schema, the mapping from profiles to groups is achieved via
policy objects which contain the conditions that must be satisfied for a
profile to be assigned, as well as a pointer to that profile. Group
membership may be included among the conditions evaluated in assignment
of a profile. Thus, profile/group binding can be expressed as a
condition (group membership) resulting in assignment of a profile (the
profile for that group).

It should be noted that policy objects are not the only way to bind
profiles to groups, nor are they necessarily the most efficient.  For
example, it is also possible to handle profile/group binding via a
table, or even by encoding policy restrictions on a user certificate.
The later may prove popular in the long term, given that today many
firms already encode privileges relating to time of day and
organizational function on employee badges.

4.2.  Objects and attributes

The RADIUS schema defined in this document requires support for several
new classes: radiusProfileClass, radiusPolicyClass,
radiusDictionaryClass, and eapDictionaryClass. The radiusProfileClass is
used to store RADIUS attributes relevant to groups of users. The
radiusPolicyClass is used to describe conditions under which a given
profile may be applied. The radiusDictionaryClass is used to store the
RADIUS Dictionary. This provides extensibility and allows RADIUS profile
objects to be self describing. The eapDictionaryClass is used to store a
mapping EAP types to user friendly names. EAP is described in [7].

Aboba                         Experimental                      [Page 3]


INTERNET-DRAFT          RADIUS Schema for LDAP v3         20 August 1999

The attributes in radiusProfileClass fall into two categories:
attributes present in the Access-Reply, and attributes representing
access constraints. An access constraint is a set of conditions that
must be satisfied in order for access to be granted. These are expressed
in the form of matching rules involving attributes present in the
Access-Reply, as well as other attributes such as the time of day. For
example, a matching rule involving the calledStationId and time of day
can be created in order to limit access to those calling a given phone
number during specified hours.

Attributes present in the Access-Reply are stored in the directory so
that the RADIUS server can retrieve them and include them in the Access-
Reply.  Access constraints are stored in the directory so that the
RADIUS server can test the incoming Access-Request to determine whether
to proceed with authentication, or immediately send an Access-Reject.
Note that only static attributes present in Access-Reply need be stored
in the directory; attributes which are computed on the fly can be
recreated as needed.

The attributes in radiusPolicyClass represent conditions which must hold
for the profile indicated in radiusProfilePointer to be applied.  As
with access constraints, these conditions may involve matching rules
applied to attributes in the Access-Request, as well as conditions
involving time of day, Nas-Port-Type, or group memberships.

For example, it may be desirable to give users different Session-Time or
Port-Limit attributes depending on the time of day, or group
memberships. This can be accomplished by creating policy expressions and
profiles for each time of day/group membership combination.  Similarly,
it may be desirable to require that analog and ISDN callers do callback
or call from a particular callingStationId, while this may not make
sense for users connecting over a virtual private network (VPN).  This
can be accomplished by creating a policy expression that returns
different profiles, depending on nasPortType.

4.2.1.  User object attributes

This schema proposes addition of attributes to the user object. As noted
earlier, to enhance scalability, it is recommended that user object
attributes only be used in cases where profile overide is necessary, or
assignment of per-user attributes is required. Overide can in principle
be required for any attribute that may be included in the Access-Reply,
and so these attributes are among those that are added to the user
object. Examples of attributes that may be assigned on a per-user basis
include radiusFramedIPAddress, radiusCallbackNumber and
radiusFramedRoute.

Aboba                         Experimental                      [Page 4]


INTERNET-DRAFT          RADIUS Schema for LDAP v3         20 August 1999

Since many RADIUS parameters are expected to be identical for a group of
users, typically the user object will contain a small set of Radius
attributes.  No user object attributes may be present if profiles are
being applied conditionally and no per-user values are required.

If it desired that a profile be unconditionally executed, then this can
be achieved either by creating a policy object with a
radiusProfilePointer attribute but no npConstraint attribute, or by
adding radiusPolicyPointer (a distinguished name pointing to a RADIUS
Profile Object) as a user object attribute.

4.2.2.  Profiles

Profile attributes fall into two major categories. One category of
attributes are static attributes that may be returned in an Access-
Reply.  These attributes use a prefix of 'radius' and are included
within the profile so that the RADIUS server may copy the values into
the Access-Reply.

Another category of attributes are those which represent conditions that
must be satisfied for an Access-Accept to be sent. These attributes use
a prefix of 'np', which stands for Network Policy. These attributes
include npIPPoolName, npSessionsAllowed, npEAPType, npConstraint, and
npAuthenticationType.  npSessionsAllowed is used to limit the number of
simultaneous sessions; npAuthenticationType indicates the acceptable
authentication types (PAP, CHAP, MS-CHAP, EAP); npEAPType indicates the
EAP-Type to be used to authenticate the user if EAP is negotiated as an
authentication type; npIPPoolName indicates the name of the IP address
pool that should be used in assigning the user's IP address.
npConstraint is a string attribute used to express constraints based on
time of day, or attributes present in the Access-Request, such as NAS-
Port-Type or NAS-Identifier.

Within this document, we allow profiles to include pointers to other
profiles, so that profiles may form a linked list. This allows a
hierarchy of profiles to be provided. More specific attributes overide
more general ones.

4.2.3.  Example

All BIGCO employees are required to use token card authentication, and
thus in the company profile the radiusAuthenticationType attribute is
set to only allow EAP, and the radiusEAPType attribute is set for
BIGCO's token card type. BIGCO also sets up a marketing profile
providing a radiusSessionTimeout value of 30 minutes, a radiusPortLimit
of one, and radiusFramedIpAddress set to indicate dynamic address

Aboba                         Experimental                      [Page 5]


INTERNET-DRAFT          RADIUS Schema for LDAP v3         20 August 1999

allocation. However, Fred requires a static IP address, and thus his
user object will contain a radiusFramedIpAddress attribute.

Since BIGCO profiles are unconditionally applied, a policy object with a
condition of (group == marketing) is used to assign a profile to
marketing personnel. Another policy object of lower priority is used
with no npConstraint attribute in order to assign a default profile.

4.3.  Policy support

The schema described in this document provides for the conditional
application of a profile to a user via policy objects. Policy objects
make it possible to have profile A apply to a user in one set of
circumstances, and profile B apply in another set of circumstances.
They also enable binding of profiles to groups.

Each policy object corresponds to an IF/THEN statement; multiple policy
objects may be required to express complex policies.  Attributes in the
policy object include npConstraint, a string attribute which expresses
the conditions under which a profile will be applied; npSequence, an
integer attribute which describes the order in which the policy object
will be evaluated; and radiusProfilePointer, a Distinguished Name
pointing to the RADIUS profile that will be applied if the conditions
hold.  The matching rule stored in npConstraint is an expression which
may reference other attribute values and include pattern matching and
other operations, such as equality tests.  Policy objects without an
npConstraint attribute can be used to indicate unconditional execution
of a profile.

Although a simple Policy Object is presented in this schema, more
complex versions are possible. For example, a wider variety of operators
and pattern matches might be supported within npConstraint.

4.3.1.  Example

Let us assume that BIGCO wishes to offer dialin access to their domestic
sales force, as well as VPN access to contractors and to individuals
from the finance group travelling overseas. In order to consistently
manage and account for the use of their NAS devices and Layer 2 tunnel
servers (PPTP/L2F/L2TP), BIGCO has chosen to adopt the RADIUS protocol.
However, given the large number of employees and contractors that need
to be managed, BIGCO desires a RADIUS solution integrated with their
existing LDAP-based directory service and group structure.  This will
allow the network administrator to edit the user's RADIUS attributes
with the same user-interface as they use to edit other user attributes,
profiles, and policies, and will eliminate the need to maintain multiple
stores of user information.

Aboba                         Experimental                      [Page 6]


INTERNET-DRAFT          RADIUS Schema for LDAP v3         20 August 1999

As part of this service offering, BIGCO may wish to implement a number
of policies. For example, in order to make sure that high speed dialin
access is available to the sales force when they need it, BIGCO may wish
to restrict use of the ISDN ports to sales personnel only during the
hours of 9 AM - 5 PM, and permit the use of multilink. Since contractors
are only to be given access to selected subnets, BIGCO may wish to apply
a filter to their traffic. Since individuals in the finance group often
access highly confidential information over the VPN, BIGCO may wish to
require that these users authenticate via a smartcard, and use only
128-bit encryption so as to provide for extended security. For security
reasons, BIGCO may wish to restrict contractors and finance users to a
single login at a time.

In certain cases, BIGCO may also wish to implement policies that depend
on the type of port that the user is connecting to. For example, if the
user is connecting via dialup, then it may be appropriate to include
tunnel attributes within the Access-Accept, so as to set up a tunnel for
the user.  However, if the user is already connected via a tunnel, this
would not be necessary. Similarly, if BIGCO only has a limited number of
ISDN ports available, it may be desirable to set a shorter Session-
Timeout or Idle-Timeout on these ports, or to set Port-Limit to one so
as to not allow multi-link. The schema defined in this document permits
enforcement of these and many other policies.

4.4.  Caching

The schema presented in this document will benefit from caching, since
it is expected that profiles and policies will apply to large numbers of
users. The first time the RADIUS server encounters a pointer to a given
profile or policy, the profile or policy will be retrieved from the
directory and cached. Subsequently, the profile or policy may be
retrieved from the cache, speeding the retrieval process. As a result,
it is to be expected that caching should result in a substantial
performance gain.

5.  Consistency and transaction issues

While LDAP v3, described in [5], permits a list of modifications to a
single object to be made as a single atomic operation, it does not
support transacted modifications to multiple objects.  In SNMP this
functionality is supported through a "conceptual two-phase commit"
applied to SET operations, as well as constructs such as the TextAndIncr
textual convention, defined in [10].  In addition, within a globally
replicated directory system, it is likely that directory replicas will
be partially out of synchronization at any given time. This means that
in any given replica it is possible for related objects to be in an
inconsistent state.  As a result, in order to ensure correctness, it is
necessary to implement mechanisms for detecting and handling directory

Aboba                         Experimental                      [Page 7]


INTERNET-DRAFT          RADIUS Schema for LDAP v3         20 August 1999

inconsistencies.

This schema includes related objects which need to be consistently
maintained. For example, policy objects contain an 'IF' (conditions) as
well as a 'THEN' (a pointer to a profile object).  In addition, it is
possible for this schema to store data which relates to two ends of a
link. For example, the Framed-Route and Framed-Routing attributes may be
used to set up a routed dialup or VPN connection.

In either of these two examples, if mechanisms are not provided to
guarantee consistency of related objects, then inconsistent policies can
be propagated. This is particularly dangerous with respect to link
policies, since propagation of inconsistent policies could result in the
links going down.  This in turn could stop directory replication from
proceeding, preventing resolution of the inconsistency. The network
would thus remain in a deadlocked state requiring manual intervention.

Directory-induced network lockup can be prevented through careful
implementation. For example, policy objects and profiles may be
maintained within the same containment hierarchy, edited within a
temporary work area, and then propagated to the final location with a
"transacted move."

Consistency between related objects may be maintained through use of a
version attribute. When retrieving a set of related objects, the version
number can be checked to make sure that it is consistent within the set.
If an entire set of objects cannot be obtained with the latest version
number, then it may be necessary to revert to use of a previous
consistent set of objects at an earlier version.  Note that support for
reversion implies that storage of related objects is archival; that is,
addition of a new set of objects does not overwrite the previous
version.

Since support for object versioning is a generally useful capability, it
makes the most sense to support this in a general way rather than doing
it in a schema-specific manner. As a result, we have chosen not to add a
version number attribute to the objects described in this document. A
general mechanism for supporting versioning will be the subject of a
future document.

5.1.  Extensibility

Today vendors distinguish their RADIUS servers by a variety of means,
including the range of supported attributes (standard and vendor-
specific), and the breadth of policies that may be represented. As a
result, while it is desirable to provide a common base set of classes
and attributes which all RADIUS schemas will share, RADIUS server
capabilities differ substantially from implementation to implementation,

Aboba                         Experimental                      [Page 8]


INTERNET-DRAFT          RADIUS Schema for LDAP v3         20 August 1999

and a successful RADIUS schema definition must support this
differentiation.

The schema described in this document provides support for most of the
attributes defined in [1]-[4], as well as including support for the
RADIUS Dictionary and vendor-specific attributes, as well as conditional
application of profiles.  Within this framework, vendor differentiation
can be achieved via two methods: adding attributes to the base RADIUS
profile and policy classes, or creating subclasses inheriting from the
base classes. Adding attributes to the base class is recommended in
cases where the new attributes to be added do not conflict with those
described in this document or in [1]-[4].

Where conflicts do not arise, new attributes, including vendor-specific
attributes, may be added to the RADIUS dictionary, which allows RADIUS
Profile objects to be self-describing. The goal is to allow attributes
to be added without having to require an update to the RADIUS server
code. Note however that a conventional RADIUS dictionary is only
designed to describe attributes that are sent on the wire, while the
RADIUS Dictionary object defined in this schema may also be used to
define additional non-wire attributes (such as
radiusAuthenticationType). This provides an additional element of
flexibility, allowing new attributes to be defined and used within
existing policy objects, without code changes.

Creating a sub-class is desirable in cases where conflicts are possible.
Such conflicts can arise for example, when vendors have defined
attributes which conflict with the standard RADIUS attribute space
described in [1]-[4].  In this case, the radiusVendorId attribute should
included and set to the SMI Vendor Code, indicating that the profile is
specific to a given vendor, and contains potentially conflicting
elements. Since a RADIUS server searching for a profile with
objectclass=radiusProfileClass will encounter both base class profiles
and subclasses, the radiusVendorId attribute is critical in allowing an
implementation to differentiate the profiles it can understand from
those that it cannot. Typically an implementation will only wish to work
with profiles whose radiusVendorId is either not present, zero (IETF
RADIUS) or set to their own SMI Vendor Code. As with addition of
attributes to the base class, when attributes are added to a subclass,
the RADIUS Dictionary class should modified to allow the subclass to be
self-describing.

Since it is conceivable that RADIUS servers from two vendors may be
deployed simultaneously, both desiring to store objects in the same
LDAP-based directory service, and each implementing their own profile
subclass, a method must be provided to allow a user to have more than
one set of RADIUS profile and policy objects. This can be achieved by
allowing the radiusProfilePointer to point to a container object rather

Aboba                         Experimental                      [Page 9]


INTERNET-DRAFT          RADIUS Schema for LDAP v3         20 August 1999

than pointing to an object itself. The RADIUS server would then search
the container for a RADIUS profile or policy with an appropriate
radiusVendorId.

In order to prevent name conflicts, it is recommended that vendors
adding their own attributes prepend a suffix to all attribute names, so
as to avoid name conflicts. Rather than redefining existing attributes,
vendor should create their own attributes using suffixes in order to
avoid conflict.

To illustrate how extensibility features may be used, the additional
attributes supported by a hypothetical BIGCO Profile Class are included.

6.  User object additions

The RADIUS schema proposes addition of the following attributes to the
user object:

 MAY ( radiusServiceType $ radiusFramedProtocol $
       radiusFramedIPAddress $ radiusFramedIPNetmask $
       radiusFramedRoute $ radiusFramedRouting $
       radiusFilterId $ radiusFramedMTU $
       radiusFramedCompression $ radiusLoginIPHost $
       radiusLoginService $ radiusLoginTCPPort $
       radiusCallbackNumber $ radiusCallbackId $
       radiusFramedRoute $ radiusFramedIPXNetwork $
       radiusClass $ radiusVSA $ radiusSessionTimeout $
       radiusIdleTimeout $ radiusTerminationAction $
       radiusCalledStationId $ radiusCallingStationId $
       radiusLoginLATService $  radiusLoginLATNode $
       radiusLoginLATGroup $ radiusFramedAppleTalkLink $
       radiusFramedAppleTalkNetwork $
       radiusFramedAppleTalkZone $ radiusPortLimit $
       radiusLoginLATPort $ radiusTunnelType $
       radiusTunnelMediumType $ radiusTunnelServerEndpoint $
       radiusTunnelPrivateGroupId $ radiusTunnelAssignmentId $
       radiusTunnelClientEndpoint $ radiusTunnelPreference $
       radiusTunnelPassword $ radiusArapFeatures $
       radiusArapZoneAccess $ radiusArapSecurity $
       radiusPasswordRetry $ radiusPrompt $ npSessionsAllowed $
       npAuthenticationType $ npEAPType $ npConstraint $
       npIPPoolName $ radiusProfilePointer $ radiusVendorId
     )

7.  Object definitions

The RADIUS schema includes definition of the following objects:

Aboba                         Experimental                     [Page 10]


INTERNET-DRAFT          RADIUS Schema for LDAP v3         20 August 1999

RADIUS Profile Class
RADIUS Policy Class
RADIUS Dictionary Class
EAP Dictionary Class

7.1.  RADIUS Profile Class

   ( radiusProfileClass 1
       NAME 'radiusProfile'
       SUP profile
       PARENT (country $ organization $ organizationalUnit $
              locality $ container)
       STRUCTURAL
       MUST (
             cn
       )
       MAY ( radiusServiceType $ radiusFramedProtocol $
             radiusFramedIPAddress $ radiusFramedIPNetmask $
             radiusFramedRoute $ radiusFramedRouting $
             radiusFilterId $ radiusFramedMTU $
             radiusFramedCompression $ radiusLoginIPHost $
             radiusLoginService $ radiusLoginTCPPort $
             radiusCallbackNumber $ radiusCallbackId $
             radiusFramedRoute $ radiusFramedIPXNetwork $
             radiusClass $ radiusVSA $ radiusSessionTimeout $
             radiusIdleTimeout $ radiusTerminationAction $
             radiusCalledStationId $ radiusCallingStationId $
             radiusLoginLATService $  radiusLoginLATNode $
             radiusLoginLATGroup $ radiusFramedAppleTalkLink $
             radiusFramedAppleTalkNetwork $
             radiusFramedAppleTalkZone $ radiusPortLimit $
             radiusLoginLATPort $  radiusTunnelType $
             radiusTunnelMediumType $
             radiusTunnelServerEndpoint $
             radiusTunnelPrivateGroupId $
             radiusTunnelAssignmentId $
             radiusTunnelClientEndpoint $
             radiusTunnelPreference $
             radiusTunnelPassword $ radiusArapFeatures $
             radiusArapZoneAccess $  radiusArapSecurity $
             radiusPasswordRetry $ radiusPrompt $
             npSessionsAllowed $ npAuthenticationType $
             npEAPType $ npConstraint $ npIPPoolName $
             radiusProfilePointer $ radiusVendorId $
             radiusDictionaryPointer
      )
)

Aboba                         Experimental                     [Page 11]


INTERNET-DRAFT          RADIUS Schema for LDAP v3         20 August 1999

7.2.  RADIUS Policy Class

   ( radiusPolicyClass 1
       NAME 'radiusPolicy'
       SUP policy
       PARENT (country $ organization $
             organizationalUnit $
              locality $ container)
       STRUCTURAL
       MUST (
             cn $ radiusProfilePointer
       )
       MAY ( npConstraint $ npSequence
       )
   )

7.3.  RADIUS Dictionary Class

   ( radiusDictionaryClass 1
       NAME 'radiusDictionaryClass'
       SUP top
       PARENT (country $ organization $
           organizationalUnit $
            locality $ container)
       STRUCTURAL
       MUST (
              cn $ radiusDictionaryEntry
       )
   )

7.4.  EAP Dictionary Class

   ( eapDictionaryClass 1
       NAME 'eapDictionaryClass'
       SUP top
       PARENT (country $ organization $
           organizationalUnit $
            locality $ container)
       STRUCTURAL
       MUST (
              cn $ eapDictionaryEntry
       )
   )

7.5.  BIGCO Profile Class

As described earlier, the base classes may be extended by attribute
addition, subclassing, or both. An example of the subclassing approach

Aboba                         Experimental                     [Page 12]


INTERNET-DRAFT          RADIUS Schema for LDAP v3         20 August 1999

is illustrated below. Here the bigcoProfileClass is created as a
subclass of the radiusProfileClass and adds several attributes, each of
which uses bigco as a suffix to avoid name collisions.

   ( bigcoProfileClass 1
       NAME 'bigcoProfile'
       SUP radiusProfileClass
       PARENT (country $ organization $ organizationalUnit $
              locality $ container)
       STRUCTURAL
       MUST (
       )
       MAY ( bigcoBapRequired $ bigcoBapLinednLimit $
             bigcoBapLinednTime $ bigcoDynDirServer
       )
   )

8.  Attribute definitions

8.1.  New Attribute Types Used in the user object and RADIUS Profile
Class

   ( radius radiusProfileClass 6
       NAME 'radiusServiceType'
       DESC 'The service to be provided to the user.
             Values include: Login(1), Framed(2),
             Callback Login(3), Callback Framed(4),
             Outbound(5), Administrative(6), NAS Prompt(7),
             Authenticate Only(8), Callback NAS Prompt(9)'
       EQUALITY integerMatch
       SYNTAX 'INTEGER'
       SINGLE-VALUE
    )

   ( radius radiusProfileClass 7
       NAME 'radiusFramedProtocol'
       DESC 'For Framed service, the protocol to be
             provided to the user. Values include
             PPP(1), SLIP(2), ARAP(3), Gandalf(4),
             Xylogics(5)'
       EQUALITY integerMatch
       SYNTAX 'INTEGER'
       SINGLE-VALUE
    )

   ( radius radiusProfileClass 8
       NAME 'radiusFramedIPAddress'

Aboba                         Experimental                     [Page 13]


INTERNET-DRAFT          RADIUS Schema for LDAP v3         20 August 1999

       DESC 'IP address to be assigned to the user
            in dotted decimal notation'
       EQUALITY integerMatch
       SYNTAX 'INTEGER'
       SINGLE-VALUE
    )

   ( radius radiusProfileClass 9
       NAME 'radiusFramedIPNetmask'
       DESC 'Netmask to apply to the user
             in dotted decimal notation'
       EQUALITY integerMatch
       SYNTAX 'INTEGER'
       SINGLE-VALUE
    )

   ( radius radiusProfileClass 10
       NAME 'radiusFramedRouting'
       DESC 'Routing method for the user.
            Values include None(1), Send(2),
            Listen(3), Send & Listen(4)'
       EQUALITY integerMatch
       SYNTAX 'INTEGER'
       SINGLE-VALUE
    )

   ( radius radiusProfileClass 11
       NAME 'radiusFilterId'
       DESC 'String representing the filter list
             for the user'
       EQUALITY caseIgnoreIA5Match
       SYNTAX 'IA5String{128}'
    )

   ( radius radiusProfileClass 12
       NAME 'radiusFramedMTU'
       DESC 'Maximum Transmission Unit for the user'
       EQUALITY integerMatch
       SYNTAX 'INTEGER'
       SINGLE-VALUE
    )

   ( radius radiusProfileClass 13
       NAME 'radiusFramedCompression'
       DESC 'Compression protocol to be used on
             the link. Values include: None(1),
             VJ compression(2),
             IPX header compression(3)'

Aboba                         Experimental                     [Page 14]


INTERNET-DRAFT          RADIUS Schema for LDAP v3         20 August 1999

       EQUALITY integerMatch
       SYNTAX 'INTEGER'
    )

   ( radius radiusProfileClass 14
       NAME 'radiusLoginIPHost'
       DESC 'System with which to connect the user
             in dotted decimal notation'
       EQUALITY integerMatch
       SYNTAX 'INTEGER'
    )

   ( radius radiusProfileClass 15
       NAME 'radiusLoginService'
       DESC 'Service to be used to connect the user to
            the login host. Values include Telnet(1), Rlogin(2),
            TCP Clear(3), PortMaster(4), and LAT(5)'
       EQUALITY integerMatch
       SYNTAX 'INTEGER'
       SINGLE-VALUE
    )

   ( radius radiusProfileClass 16
       NAME 'radiusLoginTCPPort'
       DESC 'The TCP port with which the useris
             to be connected'
       EQUALITY integerMatch
       SYNTAX 'INTEGER'
       SINGLE-VALUE
    )

   ( radius radiusProfileClass 19
       NAME 'radiusCallbackNumber'
       DESC 'Number to be called'
       EQUALITY caseIgnoreIA5Match
       SYNTAX 'IA5String{128}'
       SINGLE-VALUE
    )

   ( radius radiusProfileClass 20
       NAME 'radiusCallbackId'
       DESC 'Name of place to be called'
       EQUALITY caseIgnoreIA5Match
       SYNTAX 'IA5String{128}'
       SINGLE-VALUE
    )

   ( radius radiusProfileClass 22

Aboba                         Experimental                     [Page 15]


INTERNET-DRAFT          RADIUS Schema for LDAP v3         20 August 1999

       NAME 'radiusFramedRoute'
       DESC 'Routes to be plumbed for the user'
       EQUALITY caseIgnoreIA5Match
       SYNTAX 'IA5String{128}'
    )

   ( radius radiusProfileClass 23
       NAME 'radiusFramedIPXNetwork'
       DESC 'IPX Network number to be configured
            for the user'
       EQUALITY integerMatch
       SYNTAX 'INTEGER'
       SINGLE-VALUE
    )

   ( radius radiusProfileClass 24
       NAME 'radiusClass'
       DESC 'Class attribute for the user'
       SYNTAX 'OCTETSTRING'
    )

   ( radius radiusProfileClass 25
       NAME 'radiusVSA'
       DESC 'Vendor Specific Attribute
            for the user'
       SYNTAX 'OCTETSTRING'
   )

   ( radius radiusProfileClass 27
       NAME 'radiusSessionTimeout'
       DESC 'Per-session time limit in seconds.
            After this expires, the action specified
            in Termination-Action is taken'
       EQUALITY integerMatch
       SYNTAX 'INTEGER'
       SINGLE-VALUE
    )

   ( radius radiusProfileClass 28
       NAME 'radiusIdleTimeout'
       DESC 'The maximum number of consecutive
            seconds of idle connection allowed
             before session termination'
       EQUALITY integerMatch
       SYNTAX 'INTEGER'
       SINGLE-VALUE
    )

Aboba                         Experimental                     [Page 16]


INTERNET-DRAFT          RADIUS Schema for LDAP v3         20 August 1999

   ( radius radiusProfileClass 29
       NAME 'radiusTerminationAction'
       DESC 'Action taken when specified service is
             completed. Values include Default(1)
             or RADIUS-Request(2)'
       EQUALITY integerMatch
       SYNTAX 'INTEGER'
       SINGLE-VALUE
    )

   ( radius radiusProfileClass 34
       NAME 'radiusLoginLATService'
       DESC 'Identity of the LAT service to use'
       EQUALITY caseIgnoreIA5Match
       SYNTAX 'IA5String{128}'
       SINGLE-VALUE
    )

   ( radius radiusProfileClass 35
       NAME 'radiusLoginLATNode'
       DESC 'The node with which the user is to be
            automatically connected by LAT'
       EQUALITY caseIgnoreIA5Match
       SYNTAX 'IA5String{128}'
       SINGLE-VALUE
    )

   ( radius radiusProfileClass 36
       NAME 'radiusLoginLATGroup'
       DESC 'The LAT group codes which this user
            is authorized to use'
       EQUALITY caseIgnoreIA5Match
       SYNTAX 'IA5String{128}'
       SINGLE-VALUE
    )

   ( radius radiusProfileClass 37
       NAME 'radiusFramedAppleTalkLink'
       DESC 'The AppleTalk network number which
            should be used for the user'
       EQUALITY caseIgnoreIA5Match
       SYNTAX 'INTEGER'
       SINGLE-VALUE
    )

   ( radius radiusProfileClass 38
       NAME 'radiusFramedAppleTalkNetwork'
       DESC 'The AppleTalk network number which

Aboba                         Experimental                     [Page 17]


INTERNET-DRAFT          RADIUS Schema for LDAP v3         20 August 1999

            the NAS should probe to allocate an
            AppleTalk node for the user'
       EQUALITY caseIgnoreIA5Match
       SYNTAX 'INTEGER'
    )

   ( radius radiusProfileClass 39
       NAME 'radiusFramedAppleTalkZone'
       DESC 'The name of the Default AppleTalk Zone'
       EQUALITY caseIgnoreIA5Match
       SYNTAX 'IA5String{128}'
       SINGLE-VALUE
    )

   ( radius radiusProfileClass 62
       NAME 'radiusPortLimit'
       DESC 'Maximum number of ports to be provided'
       EQUALITY integerMatch
       SYNTAX 'INTEGER'
       SINGLE-VALUE
    )

   ( radius radiusProfileClass 39
       NAME 'radiusLoginLATPort'
       DESC 'The Port with which the user is to
            connected by LAT'
       EQUALITY caseIgnoreIA5Match
       SYNTAX 'IA5String{128}'
       SINGLE-VALUE
    )

   ( radius radiusProfileClass 64
       NAME 'radiusTunnelType'
       DESC 'String representing the type of tunnel to
            be set up, of the form Tag: Value. Values
            include PPTP(1), L2F(2), L2TP(3), ATMP(4),
            VTP(5), AH(6), IP-IP(7).'
       SYNTAX 'OCTETSTRING'
)

   ( radius radiusProfileClass 65
       NAME 'radiusTunnelMediumType'
       DESC 'String representing the medium for the tunnel to
             run over, of the form Tag: Value. Values
            include IP(1), X.25(2), ATM(3), Frame Relay(4).'
       SYNTAX 'OCTETSTRING'
)

Aboba                         Experimental                     [Page 18]


INTERNET-DRAFT          RADIUS Schema for LDAP v3         20 August 1999

   ( radius radiusProfileClass 66
       NAME 'radiusTunnelClientEndpoint'
       DESC 'String representing the Tunnel Client Endpoint
             for the tunnel, of the form Tag: Value.'
       SYNTAX 'OCTETSTRING'
)

   ( radius radiusProfileClass 67
       NAME 'radiusTunnelServerEndpoint'
       DESC 'String representing the address of the tunnel
             server, of the form Tag: Value. The format
             of the value field depends on the
             tunnelMediumType attribute'
       SYNTAX 'OCTETSTRING'
)

   ( radius radiusProfileClass 71
       NAME 'radiusArapFeatures'
       DESC 'This is a compound string containing info that
            the NAS should send to the user in the ARAP
            feature flags packet'
       EQUALITY caseIgnoreIA5Match
       SYNTAX 'IA5String{128}'
       SINGLE-VALUE
    )

   ( radius radiusProfileClass 72
       NAME 'radiusArapZoneAccess'
       DESC 'This field controls access to ARAP zones.
             Values include
             Only allow access to default zone(1),
             Use zone filter inclusively(2),
             Use zone filter exclusively (4)'
       EQUALITY integerMatch
       SYNTAX 'INTEGER'
       SINGLE-VALUE
    )

   ( radius radiusProfileClass 73
       NAME 'radiusArapSecurity'
       DESC 'This field contains an integer
            specifying the  security module signature,
            which is a Macintosh OSType'
       EQUALITY integerMatch
       SYNTAX 'INTEGER'
       SINGLE-VALUE
    )

Aboba                         Experimental                     [Page 19]


INTERNET-DRAFT          RADIUS Schema for LDAP v3         20 August 1999

   ( radius radiusProfileClass 75
       NAME 'radiusPasswordRetry'
       DESC 'This is an integer specifying the number
            of password retry attempts to permit the user'
       EQUALITY integerMatch
       SYNTAX 'INTEGER
       SINGLE-VALUE
    )

   ( radius radiusProfileClass 76
       NAME 'radiusPrompt'
       DESC 'This attribute is used only in RADIUS
            Access-Challenge packets and indicates
            if the NAS should echo the user's  response
            as entered. Values include No Echo (0), or Echo(1).'
       EQUALITY integerMatch
       SYNTAX 'INTEGER'
       SINGLE-VALUE
    )

   ( radius radiusProfileClass 81
       NAME 'radiusTunnelPrivateGroupId'
       DESC 'String representing the Private Group Id for the
             tunnel, of the form Tag: Value.'
       SYNTAX 'OCTETSTRING'
)

   ( radius radiusProfileClass 82
       NAME 'radiusTunnelAssignmentId'
       DESC 'String representing the Tunnel Assignment Id
             for the tunnel, of the form Tag: Value.'
       SYNTAX 'OCTETSTRING'
)

   ( radius radiusProfileClass 83
       NAME 'radiusTunnelPreference'
       DESC 'String representing the tunnel preference for the
             tunnel, of the form Tag: Value.'
       SYNTAX 'OCTETSTRING'
)

   ( radius radiusProfileClass 257
       NAME 'npEAPType'
       DESC 'Allowable EAP types, in order of preference.
             If this attribute has a value, EAP must be
             included in the allowable authentication types.'
       EQUALITY caseIgnoreIA5Match
       SYNTAX 'IA5String{128}'

Aboba                         Experimental                     [Page 20]


INTERNET-DRAFT          RADIUS Schema for LDAP v3         20 August 1999

       SINGLE-VALUE
    )

   ( radius radiusProfileClass 258
       NAME 'npConstraint'
       DESC 'A string expressing conditions which must hold
            in order for an Access-Accept to be sent. The
            string is of the format MATCH ( <attribute> =
            <pattern/value> OR <pattern/value>)  <AND/OR>
            TIMEOFDAY. Brackets () can be used to group.
            When multiple msNPConstraints are present, all
            of them must be satisfied in order for a profile
            to be executed.'
       EQUALITY caseIgnoreIA5Match
       SYNTAX 'IA5String'
    )

   ( radius radiusProfileClass 259
       NAME 'npIPPoolName'
       DESC 'The name of the IP Address Pool out of which
             the user's IP address should be allocated.'
       EQUALITY caseIgnoreIA5Match
       SYNTAX 'IA5String'
    )

( radius radiusProfileClass 260
       NAME 'npSessionsAllowed'
       DESC 'This attribute indicates the number of
            simultaneous sessions allowed for this user.'
       EQUALITY integerMatch
       SYNTAX 'INTEGER'
       SINGLE-VALUE
    )

   ( radius radiusProfileClass 261
       NAME 'npAuthenticationType'
       DESC 'Allowable authentication types (EAP, CHAP, PAP,
             MS-CHAP, etc.) in order of preference.
             If an attribute isn't included, it isn't allowed.'
       EQUALITY caseIgnoreIA5Match
       SYNTAX 'IA5String{128}'
       SINGLE-VALUE
    )

   ( radius radiusProfileClass 262
       NAME 'radiusProfilePointer'
       DESC 'Distinguished Name of a RADIUS Profile Object.'
       EQUALITY distinguishedNameMatch

Aboba                         Experimental                     [Page 21]


INTERNET-DRAFT          RADIUS Schema for LDAP v3         20 August 1999

       SYNTAX 'DN'
       SINGLE-VALUE
    )

   ( radius radiusProfileClass 263
       NAME 'radiusVendorId'
       DESC 'SMI Vendor Id. A non-zero value denotes a
            profile non-compliant with RFC 2138 and 2139.'
       EQUALITY integerMatch
       SYNTAX 'INTEGER'
       SINGLE-VALUE
    )

   ( radius radiusProfileClass 264
       NAME 'radiusDictionaryPointer'
       DESC 'A Distinguished Name pointing to
            the RADIUS dictionary for this profile. If
            not present the default dictionary is used.'
       EQUALITY distinguishedNameMatch
       SYNTAX 'DN'
       SINGLE-VALUE
    )

8.2.  New Attribute Types Used in the RADIUS Policy Class

  ( radius radiusPolicyClass 2
      NAME 'npSequence'
      DESC 'An integer indicating the order in which
            policy objects are to be evaluated.'
      EQUALITY integerMatch
      SYNTAX 'INTEGER'
      SINGLE-VALUE
  )

8.3.  New Attribute Types Used in the RADIUS Dictionary Class

  ( radius radiusDictionaryClass 1
      NAME 'dictionaryEntry'
      DESC 'A dictionary entry in the RADIUS dictionary,
            of the form
            Attribute-Number:[Vendor-Type:]ldapDisplayName:Type.
            Vendor-Type may only be present with
            Attribute-Number=26 (Vendor Specific).'
      EQUALITY caseIgnoreIA5Match
      SYNTAX 'IA5String{128}'
  )

Aboba                         Experimental                     [Page 22]


INTERNET-DRAFT          RADIUS Schema for LDAP v3         20 August 1999

8.4.  New Attribute Types Used in the BIGCO Profile Class

( bigco bigcoProfileClass 263
       NAME 'bigcoBapRequired'
       DESC 'This attribute indicates whether Bandwidth
            Allocation Protocol (BAP) is required for
            this user. Values include
            BAP Not Required (0) and BAP Required (1).'
       EQUALITY integerMatch
       SYNTAX 'INTEGER'
       SINGLE-VALUE
    )

( bigco bigcoProfileClass 264
       NAME 'bigcoBapLinednLimit'
       DESC 'Percent of capacity utilized at which to
             bring a line down for this user. '
       EQUALITY integerMatch
       SYNTAX 'INTEGER'
       SINGLE-VALUE
    )

( bigco bigcoProfileClass 265
       NAME 'bigcoBapLinednTime'
       DESC 'Time in seconds for the capacity
             utilization calculation.'
       EQUALITY integerMatch
       SYNTAX 'INTEGER'
       SINGLE-VALUE
    )

   ( bigco bigcoProfileClass 266
       NAME 'bigcoDynDirServer'
       DESC 'Fully qualified domain name or IP address of
             the dynamic directory server for this user.'
       EQUALITY caseIgnoreIA5Match
       SYNTAX 'IA5String{128}'
       SINGLE-VALUE
    )

9.  Security issues

Integration of a RADIUS server with an LDAP-based directory service can
result in several security issues, including:

   Rogue LDAP-servers
   Inappropriate use

Aboba                         Experimental                     [Page 23]


INTERNET-DRAFT          RADIUS Schema for LDAP v3         20 August 1999

These threats are discussed in turn.

9.1.  Rogue LDAP servers

Were a rogue LDAP server to respond to queries from the RADIUS server
and have its responses accepted, it is possible that users could gain
inappropriate access to the network. In order to protect against this,
the conversation between the RADIUS server and the LDAP-based directory
service SHOULD be mutually authenticated via TLS [8] or IPSEC [9].

9.2.  Inappropriate use

This schema is intended for use by a RADIUS server integrating with an
LDAP-enabled directory. This schema was not designed for use by devices
looking to directly access the directory.

LDAP-enabling a RADIUS server requires that the RADIUS server be given
permissions to access a user's RADIUS objects and attributes.  As a
result, the administrator of the RADIUS server should exercise care to
ensure that the RADIUS account password is not compromised.  If at all
possible, the RADIUS server should be physically secured.

In contrast, LDAP-enabling of devices requires that devices be given
these access-rights.  This can be achieved by making the devices members
of a group, and giving the group access rights to this portion of the
schema. However, while RADIUS servers can often be physically secured,
widely deployed devices typically cannot be.

It should also be noted that direct use of LDAP across a WAN typically
requires that LDAP pass through a firewall. This is problematic since
LDAP-based directories can be used to store a wide variety of data, much
of it sensitive. Thus without implementing an LDAP proxy to limit access
only to appropriate portions of the schema, it is difficult to enforce
security. Since humans are notoriously lax in administration of access
rights, an attacker obtaining a device password would typically also
obtain access not only to RADIUS attributes for every user, but to other
information as well.

LDAP-enabling of devices has other potential downsides as well.  It
increases the size of the device binaries, and may in some cases
introduce dependencies in the device boot sequence that can be
problematic. In addition, permitting direct access to the directory
makes it very difficult to upgrade the schema since downlevel clients
will still need to be able to access the old schema after the upgrade.
Thus both the old and new schema will need to be maintained in parallel
during the transition period. In contrast, in the case of an LDAP-
enabled RADIUS server, only the RADIUS server will be affected by the
schema upgrade. The wire protocol spoken between the device and RADIUS

Aboba                         Experimental                     [Page 24]


INTERNET-DRAFT          RADIUS Schema for LDAP v3         20 August 1999

server will be unaffected. Thus a schema upgrade may be accomplished
without the need for a transition period.

10.  Acknowledgments

Thanks to Steven Judd, Ashwin Palekar, David Eitelbach, Narendra Gidwani
and Donald Rule of Microsoft for useful discussions of this problem
space.

11.  References

[1]  Rigney, C., Rubens, A., Simpson W., and S. Willens, "Remote
     Authentication Dial In User Service (RADIUS)", RFC 2138, April
     1997.

[2]  Rigney, C., "RADIUS Accounting", RFC 2139, April 1997.

[3]  Zorn, G., Leifer, D., Rubens, A., Shriver, J., Holdrege, M.,
     Goyret, I., "RADIUS Attributes for Tunnel Protocol Support",
     Internet draft (work in progress), draft-ietf-radius-tunnel-
     auth-09.txt, August 1999.
      .IP [4] Rigney, C., Willats, W., "RADIUS Extensions", Internet
     draft (work in progress), draft-ietf-radius-ext-04.txt, May 1999.

[5]  Wahl, M., Howes, T., Kille, S., "Lightweight Directory Access
     Protocol (v3)", RFC 2251, December 1997.

[6]  Wahl, M., Coulbeck, A., Howes, T., Kille S., "Lightweight Directory
     Access Protocol (v3): Attribute Syntax Definitions", RFC 2252,
     December 1997.

[7]  Blunk, L., Vollbrecht, J., "PPP Extensible Authentication Protocol
     (EAP)", RFC 2284, March 1998.

[8]  Dierks, T., Allen, C., "The TLS Protocol Version 1.0", RFC 2246,
     November 1998.
      .IP [9] Atkinson,  R.,  Kent,  S.,  "Security Architecture for the
     Internet Protocol", RFC 2401, November 1998.

[10] Case, J., McCloghrie, K., Rose, M., and S. Waldbusser, "Textual
     Conventions for Version 2 of the Simple Network Management Protocol
     (SNMPv2)", RFC 1903, January 1996.

12.  Authors' Addresses

Bernard Aboba
Microsoft Corporation

Aboba                         Experimental                     [Page 25]


INTERNET-DRAFT          RADIUS Schema for LDAP v3         20 August 1999

One Microsoft Way
Redmond, WA 98052

Phone: 425-936-6605
EMail: bernarda@microsoft.com

13.  Full Copyright Statement

Copyright (C) The Internet Society (1999).  All Rights Reserved.
This document and translations of it may be copied and furnished to
others, and derivative works that comment on or otherwise explain it or
assist in its implmentation may be prepared, copied, published and
distributed, in whole or in part, without restriction of any kind,
provided that the above copyright notice and this paragraph are included
on all such copies and derivative works.  However, this document itself
may not be modified in any way, such as by removing the copyright notice
or references to the Internet Society or other Internet organizations,
except s needed for the purpose of developing Internet standards in
which case the procedures for copyrights defined in the Internet
Standards process must be followed, or as required to translate it into
languages other than English.  The limited permissions granted above are
perpetual and will not be revoked by the Internet Society or its
successors or assigns.  This document and the information contained
herein is provided on an "AS IS" basis and THE INTERNET SOCIETY AND THE
INTERNET ENGINEERING TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE
INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE."

14.  Expiration Date

This memo is filed as <draft-aboba-radius-04.txt>,  and  expires March
1, 2000.

Aboba                         Experimental                     [Page 26]