File: naming-directory.1.0.en

package info (click to toggle)
doc-iana 2001.08-1
  • links: PTS
  • area: main
  • in suites: woody
  • size: 8,176 kB
  • ctags: 954
  • sloc: perl: 1,057; makefile: 83; sh: 27
file content (271 lines) | stat: -rw-r--r-- 11,705 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271

# Names of submitters: Jonathan Wood <jonathan.wood@eng.sun.com>
                       Roberto Tam <roberto.tam@eng.sun.com>
#
# Security Considerations:
#   If these services are used as authentication repositories, and they
#   are compromised, any clients of the service become susceptible to
#   forged identities. This could result in compromised systems, forged
#   messages, etc. Some security measure, such as SLP security, should
#   be used to authenticate service advertisements.
# 
#   In particular, it is important to understand what is trusted
#   during the process of service discovery. If no security measures
#   are used, all service advertisements are implicitly trusted. This
#   scenario allows for very trivial attacks: an attacker need only
#   insert a malicious advertisement for a bogus directory server into
#   the service name space. It should also be noted that this scenario
#   is open to inadvertant attacks. For example, someone may be testing
#   an LDAP server which advertises itself according to 
#   naming-directory:ldap. If the test server is configured in manner 
#   similar to production servers, clients will bind to the test server 
#   and find false or missing data.
# 
#   The triviality of the attacks outlined above should provide a strong
#   case for implementing security measures. However, even with security
#   measures it is important to understand trust dependencies.
#   Discovery frameworks like SLP [RFC2608] provide only the mechanism for
#   making service advertisements available and authenticated. Thus
#   advertisements obtained via the discovery framework are valid only
#   if a correct advertisement was originally injected into the
#   discovery name space. For example, if an LDAP server was incorrectly
#   configured, or became corrupted, the bogus configuration would
#   be reflected through the discovery framework to all clients. If the
#   configuration error pertained to security, the client and server may
#   end up using a weaker security flavor than necessary.
# 
#   Public key cryptography is ideal for discovery frameworks, since it
#   lends itself to store-and-forward mechanisms which can be very
#   efficient (for example, directory agents in SLP), and can be
#   scalably deployed. However, a PKI introduces another
#   complex set of trust considerations. For a PKI to be reasonably
#   secure, the public key of the principal to be authenticated must
#   have been obtained in a secure manner. Discovery frameworks which
#   use a PKI must thus trust that the public key or certificate it
#   is using for authentication is valid. For example, if a PKI were
#   implemented such that it dynamically retrieves a public key over
#   the network in an unsecured transfer, an attacker could substitute
#   a false public key and thus trick the discovery client into
#   believing a principal was to be trusted. The client could then be
#   tricked into using a false advertisement and connect to a bogus
#   server. 
#
#   PKI users must also trust that the site administrator has correctly
#   configured and populated the PKI. Finally, PKI users must trust the
#   method used to discover key servers. DNS is often implicitly
#   trusted in this step; insertion of a bogus address for a key server
#   into the DNS can prevent clients from accessing their PKI.

#   See also the security considerations from [RFC2608].

# -----------------------------------------------------------------------

# Introduction

#   This document defines a template for the naming and directory
#   service abstract type. Templates and service types are
#   defined in [RFC2609]. This type can be used with SLP [RFC2608] to
#   dynamically discover naming and directory servers. In
#   particular, this type applies to name spaces which contain
#   information intended primarily for system consumption;
#   examples of such information are UNIX-style system information
#   (such as passwd, hosts, and service tables), and public-key
#   certificates for authenticating principals such as people and
#   hosts.
#
#   Currently there is a wide variety of services which are used
#   to serve system information (i.e. NIS, NIS+, LDAP, NDS, etc.).
#   It is common for two or more of these services to be deployed
#   at the same time on the same network. This creates configuration
#   complexity for naming and directory clients on the network:
#   How does a client choose the right service, and once chosen,
#   how does the client find the access handle to that service?
#
#   The type defined by this document manages this complexity by
#   collecting attributes common to all naming and directory services,
#   allowing clients to select the right service from a
#   heterogeneous pool. This type can be used in conjunction with
#   SLP to implement a unified discovery solution.
#
#   Note that concrete types include all attributes defined in this
#   template; they may also define attributes specific to their
#   service. Examples of concrete type templates can be found in
#   naming-directory:nis, naming-directory:nis+, and naming-directory:ldap.

# Examples

#   This section presents two scenarios to illustrate how this type might
#   be used. For both scenarios, it is assumed that a number of naming
#   and directory services have been deployed in the network, and
#   that they are advertising their services via SLP. The following
#   list enumerates the registered servers and their attributes. Note
#   that in an actual registration, the template attributes would be
#   included in the attributes list, and all attributes and URLs would
#   be properly escaped. Here, however, these steps have been omitted
#   for the sake of brevity and readability:
#
#   URL:
#     service:naming-directory:nis://192.168.1.100/eng.wiz.com
#   Attributes:
#     naming-context=eng.wiz.com
#     organization=flat
#     dynamic-updates=false
#     jndi-sp-available=true
#     master=true
#
#   URL:
#     service:naming-directory:nis://192.168.1.200/eng.wiz.com
#
#   Attributes:
#     naming-context=eng.wiz.com
#     organization=flat
#     dynamic-updates=false
#     jndi-sp-available=true
#     master=false
#
#   URL:
#     service:naming-directory:nisplus://192.168.2.100/b17.eng.wiz.com
#   Attributes:
#     naming-context=b17.eng.wiz.com
#     organization=hierarchical
#     dynamic-updates=true
#     jndi-sp-available=false
#     master=true
#     security-mechanism=dh-ext
#     pubkey=(dh-ext)1a22345def3324f3ecbb...
#
#   URL:
#     service:naming-directory:ldap://192.168.3.100/dc=eng,dc=wiz,dc=com
#   Attributes:
#     naming-context=dc=eng,dc=wiz,dc=com
#     organization=hierarchical
#     dynamic-updates=true
#     jndi-sp-available=true
#     master=true
#     security-mechanism=clear,tls,kerb5
#     transport=cots
#
#   Note that some attributes are not defined in the template
#   given below; they are defined in the templates for the
#   particular services.

# System Configuration

#   A number of UNIX platforms currently bundle clients for the
#   NIS, NIS+, and LDAP services. When the system initially needs
#   to configure its name service, it has no idea with what services
#   its new network has been populated. It does, however, know
#   that it wants an authenticated connection to its server, and
#   that it has been configured with Kerberos and extended DH
#   security. Also, it would like to talk to an authoritative server
#   to populate its initial configuration.
#
#   So, in order to discover what naming services are available,
#   the system issues the following SLP service request:
#
#   <type>=service:naming-directory
#
#   <predicate>=(&(|(security=kerb5)(security=dh-ext))(master=true))
#
#   It receives the following service handles:
#
#   service:naming-directory:ldap://192.168.3.100/dc=eng,dc=wiz,dc=com
#   service:naming-directory:nisplus://192.168.2.100/b17.eng.wiz.com
#
#   Each service handle provides enough information to contact and
#   query the server.
#
#   The system then decides whether to use NIS+ or LDAP (or both),
#   and uses the access handle to contact the server.

# JNDI Configuration

#   The Java Naming and Directory Interface (JNDI)
#
#      The Java Naming and Directory Interface (TM) Specification,
#      Sun Microsystems, Inc.  Feb 1998.  http://java.sun.com/jndi/.
#
#   provides a common interface to naming and directory operations. 
#   Using JNDI, it is possible to write an application which accesses
#   directories without knowing which particular naming or directory 
#   service it is actually talking to.
#
#   However, JNDI applications require some initial configuration
#   in order to find and query a service; this configuration is
#   different for each different kind of service.
#
#   This example demonstrates how JNDI applications can use SLP to
#   configure themselves in a unified manner. All the application needs
#   to know in advance is in what manner it wishes to use a naming or
#   directory service.
#
#   In this example, the JNDI application wishes to obtain authentication
#   information for a user, and to update preferences for that user in
#   the directory. Therefore the required attributes for this directory
#   are:
#     - dynamic-updates = true
#     - jndi-sp-available = true
#   The 'jndi-sp-available' attribute is used to find only those services
#   for which a JNDI service provider exists, since the application
#   needs this driver to communicate with any found services. These
#   required attributes are all the application currently "knows"; it
#   does not know the address or even the access protocol of a server,
#   nor does it have any JNDI service provider available to it. All
#   it has are the JNDI framework classes, and a Java environment.
#
#   In order to obtain service handles to suitable service instances,
#   the application issues the following SLP service request:
#
#   <type>=service:naming-directory
#
#   <predicate>=(&(dynamic-updates=true)(jndi-sp-available))
#
#   It receives the following service handles:
#
#   service:naming-directory:ldap://192.168.3.100/dc=eng,dc=wiz,dc=com
#
#   At this point, the application now has enought configuration
#   information to contact the server. However, it does not have the
#   Java class files for the LDAP service provider implementation. It
#   can dynamically discover, download, and instantiate the necessary
#   classfiles using SLP and the JNDI Drivers service type.
#
#   The JNDI application is now able to configure itself to talk to a
#   directory server, and access the necessary JNDI service provider.

# -----------------------------------------------------------------------

template-type=naming-directory

template-version=1.0

template-description=
  This is an abstract service type. This type is intended to
  encompass all services which support directory-style operations
  for looking up and searching system information.

template-url-syntax=
  url-path=  ; Depends on concrete service type.

naming-context= string M
  # A list of the names of organizational units or domains which
  # this server serves.

organization= string
  # Names spaces can be either hierarchical (as in LDAP) or flat
  # (as in NIS).
flat,hierarchical

dynamic-updates= boolean
  # True if the service's namespace can be modified dynamically;
  # false if the namespace is static.

jndi-sp-available= boolean O
  # True if a JNDI service provider is available for this particular
  # service.

master= boolean
  # True if an instance of a service is the master or authoritative
  # server for a namespace. For multi-master services, all masters
  # should set this value to true.