Network Working Group Bernard Aboba
INTERNET-DRAFT Microsoft
Category: Experimental
<draft-aboba-radius-03.txt>
2 February 1999
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."
To view the list Internet-Draft Shadow Directories, see
http://www.ietf.org/shadow.html.
The distribution of this memo is unlimited. It is filed as <draft-
aboba-radius-03.txt>, and expires August 1, 1999. Please send comments
to the authors.
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 2 February 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].
Operating 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 2 February 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 2 February 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 2 February 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 2 February 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
Aboba Experimental [Page 6]
INTERNET-DRAFT RADIUS Schema for LDAP v3 2 February 1999
stores of user information.
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
Aboba Experimental [Page 7]
INTERNET-DRAFT RADIUS Schema for LDAP v3 2 February 1999
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
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.
Aboba Experimental [Page 8]
INTERNET-DRAFT RADIUS Schema for LDAP v3 2 February 1999
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,
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
Aboba Experimental [Page 9]
INTERNET-DRAFT RADIUS Schema for LDAP v3 2 February 1999
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
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 $
Aboba Experimental [Page 10]
INTERNET-DRAFT RADIUS Schema for LDAP v3 2 February 1999
radiusArapZoneAccess $ radiusArapSecurity $
radiusPasswordRetry $ radiusPrompt $ npSessionsAllowed $
npAuthenticationType $ npEAPType $ npConstraint $
npIPPoolName $ radiusProfilePointer $ radiusVendorId
)
7. Object definitions
The RADIUS schema includes definition of the following objects:
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 $
Aboba Experimental [Page 11]
INTERNET-DRAFT RADIUS Schema for LDAP v3 2 February 1999
radiusTunnelClientEndpoint $
radiusTunnelPreference $
radiusTunnelPassword $ radiusArapFeatures $
radiusArapZoneAccess $ radiusArapSecurity $
radiusPasswordRetry $ radiusPrompt $
npSessionsAllowed $ npAuthenticationType $
npEAPType $ npConstraint $ npIPPoolName $
radiusProfilePointer $ radiusVendorId $
radiusDictionaryPointer
)
)
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
)
)
Aboba Experimental [Page 12]
INTERNET-DRAFT RADIUS Schema for LDAP v3 2 February 1999
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
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),
Aboba Experimental [Page 13]
INTERNET-DRAFT RADIUS Schema for LDAP v3 2 February 1999
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'
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
Aboba Experimental [Page 14]
INTERNET-DRAFT RADIUS Schema for LDAP v3 2 February 1999
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)'
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
Aboba Experimental [Page 15]
INTERNET-DRAFT RADIUS Schema for LDAP v3 2 February 1999
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
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'
)
Aboba Experimental [Page 16]
INTERNET-DRAFT RADIUS Schema for LDAP v3 2 February 1999
( 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
)
( 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
Aboba Experimental [Page 17]
INTERNET-DRAFT RADIUS Schema for LDAP v3 2 February 1999
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
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}'
Aboba Experimental [Page 18]
INTERNET-DRAFT RADIUS Schema for LDAP v3 2 February 1999
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'
)
( 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'
Aboba Experimental [Page 19]
INTERNET-DRAFT RADIUS Schema for LDAP v3 2 February 1999
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
)
( 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
Aboba Experimental [Page 20]
INTERNET-DRAFT RADIUS Schema for LDAP v3 2 February 1999
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}'
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
Aboba Experimental [Page 21]
INTERNET-DRAFT RADIUS Schema for LDAP v3 2 February 1999
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
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
)
Aboba Experimental [Page 22]
INTERNET-DRAFT RADIUS Schema for LDAP v3 2 February 1999
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}'
)
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
Aboba Experimental [Page 23]
INTERNET-DRAFT RADIUS Schema for LDAP v3 2 February 1999
)
( 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
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.
Aboba Experimental [Page 24]
INTERNET-DRAFT RADIUS Schema for LDAP v3 2 February 1999
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.
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., and J. Shriver, "RADIUS Attributes
for Tunnel Protocol Support", Internet draft (work in progress), draft-
ietf-radius-tunnel-auth-06.txt, September 1998.
[4] Rigney, C., Willats, W., "RADIUS Extensions", Internet draft (work
in progress), draft-ietf-radius-ext-02.txt, October 1998.
Aboba Experimental [Page 25]
INTERNET-DRAFT RADIUS Schema for LDAP v3 2 February 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.
[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
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
Aboba Experimental [Page 26]
INTERNET-DRAFT RADIUS Schema for LDAP v3 2 February 1999
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-03.txt>, and expires August
1, 1999
Aboba Experimental [Page 27]