1 2 3 4 5 6 7 Network Working Group L. Howard 8 Request for Comments: 2307 Independent Consultant 9 Category: Experimental March 1998 10 11 12 An Approach for Using LDAP as a Network Information Service 13 14 Status of this Memo 15 16 This memo defines an Experimental Protocol for the Internet 17 community. It does not specify an Internet standard of any kind. 18 Discussion and suggestions for improvement are requested. 19 Distribution of this memo is unlimited. 20 21 Copyright Notice 22 23 Copyright (C) The Internet Society (1998). All Rights Reserved. 24 25 Abstract 26 27 This document describes an experimental mechanism for mapping 28 entities related to TCP/IP and the UNIX system into X.500 [X500] 29 entries so that they may be resolved with the Lightweight Directory 30 Access Protocol [RFC2251]. A set of attribute types and object 31 classes are proposed, along with specific guidelines for interpreting 32 them. 33 34 The intention is to assist the deployment of LDAP as an 35 organizational nameservice. No proposed solutions are intended as 36 standards for the Internet. Rather, it is hoped that a general 37 consensus will emerge as to the appropriate solution to such 38 problems, leading eventually to the adoption of standards. The 39 proposed mechanism has already been implemented with some success. 40 41 1. Background and Motivation 42 43 The UNIX (R) operating system, and its derivatives (specifically, 44 those which support TCP/IP and conform to the X/Open Single UNIX 45 specification [XOPEN]) require a means of looking up entities, by 46 matching them against search criteria or by enumeration. (Other 47 operating systems that support TCP/IP may provide some means of 48 resolving some of these entities. This schema is applicable to those 49 environments also.) 50 51 These entities include users, groups, IP services (which map names to 52 IP ports and protocols, and vice versa), IP protocols (which map 53 names to IP protocol numbers and vice versa), RPCs (which map names 54 to ONC Remote Procedure Call [RFC1057] numbers and vice versa), NIS 55 56 57 58 Howard Experimental [Page 1] 59 61 RFC 2307 Using LDAP as a Network Information Service March 1998 62 63 64 netgroups, booting information (boot parameters and MAC address 65 mappings), filesystem mounts, IP hosts and networks, and RFC822 mail 66 aliases. 67 68 Resolution requests are made through a set of C functions, provided 69 in the UNIX system's C library. For example, the UNIX system utility 70 "ls", which enumerates the contents of a filesystem directory, uses 71 the C library function getpwuid() in order to map user IDs to login 72 names. Once the request is made, it is resolved using a "nameservice" 73 which is supported by the client library. The nameservice may be, at 74 its simplest, a collection of files in the local filesystem which are 75 opened and searched by the C library. Other common nameservices 76 include the Network Information Service (NIS) and the Domain Name 77 System (DNS). (The latter is typically used for resolving hosts, 78 services and networks.) Both these nameservices have the advantage of 79 being distributed and thus permitting a common set of entities to be 80 shared amongst many clients. 81 82 LDAP is a distributed, hierarchical directory service access protocol 83 which is used to access repositories of users and other network- 84 related entities. Because LDAP is often not tightly integrated with 85 the host operating system, information such as users may need to be 86 kept both in LDAP and in an operating system supported nameservice 87 such as NIS. By using LDAP as the the primary means of resolving 88 these entities, these redundancy issues are minimized and the 89 scalability of LDAP can be exploited. (By comparison, NIS services 90 based on flat files do not have the scalability or extensibility of 91 LDAP or X.500.) 92 93 The object classes and attributes defined below are suitable for 94 representing the aforementioned entities in a form compatible with 95 LDAP and X.500 directory services. 96 97 2. General Issues 98 99 2.1. Terminology 100 101 The key words "MUST", "SHOULD", and "MAY" used in this document are 102 to be interpreted as described in [RFC2119]. 103 104 For the purposes of this document, the term "nameservice" refers to a 105 service, such as NIS or flat files, that is used by the operating 106 system to resolve entities within a single, local naming context. 107 Contrast this with a "directory service" such as LDAP, which supports 108 extensible schema and multiple naming contexts. 109 110 111 112 113 114 115 Howard Experimental [Page 2] 116 118 RFC 2307 Using LDAP as a Network Information Service March 1998 119 120 121 The term "NIS-related entities" broadly refers to entities which are 122 typically resolved using the Network Information Service. (NIS was 123 previously known as YP.) Deploying LDAP for resolving these entities 124 does not imply that NIS be used, as a gateway or otherwise. In 125 particular, the host and network classes are generically applicable, 126 and may be implemented on any system that wishes to use LDAP or X.500 127 for host and network resolution. 128 129 The "DUA" (directory user agent) refers to the LDAP client querying 130 these entities, such as an LDAP to NIS gateway or the C library. The 131 "client" refers to the application which ultimately makes use of the 132 information returned by the resolution. It is irrelevant whether the 133 DUA and the client reside within the same address space. The act of 134 the DUA making this information to the client is termed 135 "republishing". 136 137 To avoid confusion, the term "login name" refers to the user's login 138 name (being the value of the uid attribute) and the term "user ID" 139 refers to he user's integer identification number (being the value of 140 the uidNumber attribute). 141 142 The phrases "resolving an entity" and "resolution of entities" refer 143 respectively to enumerating NIS-related entities of a given type, and 144 matching them against a given search criterion. One or more entities 145 are returned as a result of successful "resolutions" (a "match" 146 operation will only return one entity). 147 148 The use of the term UNIX does not confer upon this schema the 149 endorsement of owners of the UNIX trademark. Where necessary, the 150 term "TCP/IP entity" is used to refer to protocols, services, hosts, 151 and networks, and the term "UNIX entity" to its complement. (The 152 former category does not mandate the host operating system supporting 153 the interfaces required for resolving UNIX entities.) 154 155 The OIDs defined below are derived from iso(1) org(3) dod(6) 156 internet(1) directory(1) nisSchema(1). 157 158 2.2. Attributes 159 160 The attributes and classes defined in this document are summarized 161 below. 162 163 The following attributes are defined in this document: 164 165 uidNumber 166 gidNumber 167 gecos 168 homeDirectory 169 170 171 172 Howard Experimental [Page 3] 173 175 RFC 2307 Using LDAP as a Network Information Service March 1998 176 177 178 loginShell 179 shadowLastChange 180 shadowMin 181 shadowMax 182 shadowWarning 183 shadowInactive 184 shadowExpire 185 shadowFlag 186 memberUid 187 memberNisNetgroup 188 nisNetgroupTriple 189 ipServicePort 190 ipServiceProtocol 191 ipProtocolNumber 192 oncRpcNumber 193 ipHostNumber 194 ipNetworkNumber 195 ipNetmaskNumber 196 macAddress 197 bootParameter 198 bootFile 199 nisMapName 200 nisMapEntry 201 202 Additionally, some of the attributes defined in [RFC2256] are 203 required. 204 205 2.3. Object classes 206 207 The following object classes are defined in this document: 208 209 posixAccount 210 shadowAccount 211 posixGroup 212 ipService 213 ipProtocol 214 oncRpc 215 ipHost 216 ipNetwork 217 nisNetgroup 218 nisMap 219 nisObject 220 ieee802Device 221 bootableDevice 222 223 Additionally, some of the classes defined in [RFC2256] are required. 224 225 226 227 228 229 Howard Experimental [Page 4] 230 232 RFC 2307 Using LDAP as a Network Information Service March 1998 233 234 235 2.4. Syntax definitions 236 237 The following syntax definitions [RFC2252] are used by this schema. 238 The nisNetgroupTripleSyntax represents NIS netgroup triples: 239 240 ( nisSchema.0.0 NAME 'nisNetgroupTripleSyntax' 241 DESC 'NIS netgroup triple' ) 242 243 Values in this syntax are represented by the following: 244 245 nisnetgrouptriple = "(" hostname "," username "," domainname ")" 246 hostname = "" / "-" / keystring 247 username = "" / "-" / keystring 248 domainname = "" / "-" / keystring 249 250 X.500 servers may use the following representation of the above 251 syntax: 252 253 nisNetgroupTripleSyntax ::= SEQUENCE { 254 hostname [0] IA5String OPTIONAL, 255 username [1] IA5String OPTIONAL, 256 domainname [2] IA5String OPTIONAL 257 } 258 259 The bootParameterSyntax syntax represents boot parameters: 260 261 ( nisSchema.0.1 NAME 'bootParameterSyntax' 262 DESC 'Boot parameter' ) 263 264 where: 265 266 bootparameter = key "=" server ":" path 267 key = keystring 268 server = keystring 269 path = keystring 270 271 X.500 servers may use the following representation of the above 272 syntax: 273 274 bootParameterSyntax ::= SEQUENCE { 275 key IA5String, 276 server IA5String, 277 path IA5String 278 } 279 280 Values adhering to these syntaxes are encoded as strings by LDAP 281 servers. 282 283 284 285 286 Howard Experimental [Page 5] 287 289 RFC 2307 Using LDAP as a Network Information Service March 1998 290 291 292 3. Attribute definitions 293 294 This section contains attribute definitions to be implemented by DUAs 295 supporting this schema. 296 297 ( nisSchema.1.0 NAME 'uidNumber' 298 DESC 'An integer uniquely identifying a user in an 299 administrative domain' 300 EQUALITY integerMatch SYNTAX 'INTEGER' SINGLE-VALUE ) 301 302 ( nisSchema.1.1 NAME 'gidNumber' 303 DESC 'An integer uniquely identifying a group in an 304 administrative domain' 305 EQUALITY integerMatch SYNTAX 'INTEGER' SINGLE-VALUE ) 306 307 ( nisSchema.1.2 NAME 'gecos' 308 DESC 'The GECOS field; the common name' 309 EQUALITY caseIgnoreIA5Match 310 SUBSTRINGS caseIgnoreIA5SubstringsMatch 311 SYNTAX 'IA5String' SINGLE-VALUE ) 312 313 ( nisSchema.1.3 NAME 'homeDirectory' 314 DESC 'The absolute path to the home directory' 315 EQUALITY caseExactIA5Match 316 SYNTAX 'IA5String' SINGLE-VALUE ) 317 318 ( nisSchema.1.4 NAME 'loginShell' 319 DESC 'The path to the login shell' 320 EQUALITY caseExactIA5Match 321 SYNTAX 'IA5String' SINGLE-VALUE ) 322 323 ( nisSchema.1.5 NAME 'shadowLastChange' 324 EQUALITY integerMatch 325 SYNTAX 'INTEGER' SINGLE-VALUE ) 326 327 ( nisSchema.1.6 NAME 'shadowMin' 328 EQUALITY integerMatch 329 SYNTAX 'INTEGER' SINGLE-VALUE ) 330 331 ( nisSchema.1.7 NAME 'shadowMax' 332 EQUALITY integerMatch 333 SYNTAX 'INTEGER' SINGLE-VALUE ) 334 335 ( nisSchema.1.8 NAME 'shadowWarning' 336 EQUALITY integerMatch 337 SYNTAX 'INTEGER' SINGLE-VALUE ) 338 339 ( nisSchema.1.9 NAME 'shadowInactive' 340 341 342 343 Howard Experimental [Page 6] 344 346 RFC 2307 Using LDAP as a Network Information Service March 1998 347 348 349 EQUALITY integerMatch 350 SYNTAX 'INTEGER' SINGLE-VALUE ) 351 352 ( nisSchema.1.10 NAME 'shadowExpire' 353 EQUALITY integerMatch 354 SYNTAX 'INTEGER' SINGLE-VALUE ) 355 356 ( nisSchema.1.11 NAME 'shadowFlag' 357 EQUALITY integerMatch 358 SYNTAX 'INTEGER' SINGLE-VALUE ) 359 360 ( nisSchema.1.12 NAME 'memberUid' 361 EQUALITY caseExactIA5Match 362 SUBSTRINGS caseExactIA5SubstringsMatch 363 SYNTAX 'IA5String' ) 364 365 ( nisSchema.1.13 NAME 'memberNisNetgroup' 366 EQUALITY caseExactIA5Match 367 SUBSTRINGS caseExactIA5SubstringsMatch 368 SYNTAX 'IA5String' ) 369 370 ( nisSchema.1.14 NAME 'nisNetgroupTriple' 371 DESC 'Netgroup triple' 372 SYNTAX 'nisNetgroupTripleSyntax' ) 373 374 ( nisSchema.1.15 NAME 'ipServicePort' 375 EQUALITY integerMatch 376 SYNTAX 'INTEGER' SINGLE-VALUE ) 377 378 ( nisSchema.1.16 NAME 'ipServiceProtocol' 379 SUP name ) 380 381 ( nisSchema.1.17 NAME 'ipProtocolNumber' 382 EQUALITY integerMatch 383 SYNTAX 'INTEGER' SINGLE-VALUE ) 384 385 ( nisSchema.1.18 NAME 'oncRpcNumber' 386 EQUALITY integerMatch 387 SYNTAX 'INTEGER' SINGLE-VALUE ) 388 389 ( nisSchema.1.19 NAME 'ipHostNumber' 390 DESC 'IP address as a dotted decimal, eg. 192.168.1.1, 391 omitting leading zeros' 392 EQUALITY caseIgnoreIA5Match 393 SYNTAX 'IA5String{128}' ) 394 395 ( nisSchema.1.20 NAME 'ipNetworkNumber' 396 DESC 'IP network as a dotted decimal, eg. 192.168, 397 398 399 400 Howard Experimental [Page 7] 401 403 RFC 2307 Using LDAP as a Network Information Service March 1998 404 405 406 omitting leading zeros' 407 EQUALITY caseIgnoreIA5Match 408 SYNTAX 'IA5String{128}' SINGLE-VALUE ) 409 410 ( nisSchema.1.21 NAME 'ipNetmaskNumber' 411 DESC 'IP netmask as a dotted decimal, eg. 255.255.255.0, 412 omitting leading zeros' 413 EQUALITY caseIgnoreIA5Match 414 SYNTAX 'IA5String{128}' SINGLE-VALUE ) 415 416 ( nisSchema.1.22 NAME 'macAddress' 417 DESC 'MAC address in maximal, colon separated hex 418 notation, eg. 00:00:92:90:ee:e2' 419 EQUALITY caseIgnoreIA5Match 420 SYNTAX 'IA5String{128}' ) 421 422 ( nisSchema.1.23 NAME 'bootParameter' 423 DESC 'rpc.bootparamd parameter' 424 SYNTAX 'bootParameterSyntax' ) 425 426 ( nisSchema.1.24 NAME 'bootFile' 427 DESC 'Boot image name' 428 EQUALITY caseExactIA5Match 429 SYNTAX 'IA5String' ) 430 431 ( nisSchema.1.26 NAME 'nisMapName' 432 SUP name ) 433 434 ( nisSchema.1.27 NAME 'nisMapEntry' 435 EQUALITY caseExactIA5Match 436 SUBSTRINGS caseExactIA5SubstringsMatch 437 SYNTAX 'IA5String{1024}' SINGLE-VALUE ) 438 439 4. Class definitions 440 441 This section contains class definitions to be implemented by DUAs 442 supporting the schema. 443 444 The rfc822MailGroup object class MAY be used to represent a mail 445 group for the purpose of alias expansion. Several alternative schemes 446 for mail routing and delivery using LDAP directories, which are 447 outside the scope of this document. 448 449 ( nisSchema.2.0 NAME 'posixAccount' SUP top AUXILIARY 450 DESC 'Abstraction of an account with POSIX attributes' 451 MUST ( cn $ uid $ uidNumber $ gidNumber $ homeDirectory ) 452 MAY ( userPassword $ loginShell $ gecos $ description ) ) 453 454 455 456 457 Howard Experimental [Page 8] 458 460 RFC 2307 Using LDAP as a Network Information Service March 1998 461 462 463 ( nisSchema.2.1 NAME 'shadowAccount' SUP top AUXILIARY 464 DESC 'Additional attributes for shadow passwords' 465 MUST uid 466 MAY ( userPassword $ shadowLastChange $ shadowMin 467 shadowMax $ shadowWarning $ shadowInactive $ 468 shadowExpire $ shadowFlag $ description ) ) 469 470 ( nisSchema.2.2 NAME 'posixGroup' SUP top STRUCTURAL 471 DESC 'Abstraction of a group of accounts' 472 MUST ( cn $ gidNumber ) 473 MAY ( userPassword $ memberUid $ description ) ) 474 475 ( nisSchema.2.3 NAME 'ipService' SUP top STRUCTURAL 476 DESC 'Abstraction an Internet Protocol service. 477 Maps an IP port and protocol (such as tcp or udp) 478 to one or more names; the distinguished value of 479 the cn attribute denotes the service's canonical 480 name' 481 MUST ( cn $ ipServicePort $ ipServiceProtocol ) 482 MAY ( description ) ) 483 484 ( nisSchema.2.4 NAME 'ipProtocol' SUP top STRUCTURAL 485 DESC 'Abstraction of an IP protocol. Maps a protocol number 486 to one or more names. The distinguished value of the cn 487 attribute denotes the protocol's canonical name' 488 MUST ( cn $ ipProtocolNumber $ description ) 489 MAY description ) 490 491 ( nisSchema.2.5 NAME 'oncRpc' SUP top STRUCTURAL 492 DESC 'Abstraction of an Open Network Computing (ONC) 493 [RFC1057] Remote Procedure Call (RPC) binding. 494 This class maps an ONC RPC number to a name. 495 The distinguished value of the cn attribute denotes 496 the RPC service's canonical name' 497 MUST ( cn $ oncRpcNumber $ description ) 498 MAY description ) 499 500 ( nisSchema.2.6 NAME 'ipHost' SUP top AUXILIARY 501 502 DESC 'Abstraction of a host, an IP device. The distinguished 503 value of the cn attribute denotes the host's canonical 504 name. Device SHOULD be used as a structural class' 505 MUST ( cn $ ipHostNumber ) 506 MAY ( l $ description $ manager ) ) 507 508 ( nisSchema.2.7 NAME 'ipNetwork' SUP top STRUCTURAL 509 DESC 'Abstraction of a network. The distinguished value of 510 the cn attribute denotes the network's canonical name' 511 512 513 514 Howard Experimental [Page 9] 515 517 RFC 2307 Using LDAP as a Network Information Service March 1998 518 519 520 MUST ( cn $ ipNetworkNumber ) 521 MAY ( ipNetmaskNumber $ l $ description $ manager ) ) 522 523 ( nisSchema.2.8 NAME 'nisNetgroup' SUP top STRUCTURAL 524 DESC 'Abstraction of a netgroup. May refer to other netgroups' 525 MUST cn 526 MAY ( nisNetgroupTriple $ memberNisNetgroup $ description ) ) 527 528 ( nisSchema.2.09 NAME 'nisMap' SUP top STRUCTURAL 529 DESC 'A generic abstraction of a NIS map' 530 MUST nisMapName 531 MAY description ) 532 533 ( nisSchema.2.10 NAME 'nisObject' SUP top STRUCTURAL 534 DESC 'An entry in a NIS map' 535 MUST ( cn $ nisMapEntry $ nisMapName ) 536 MAY description ) 537 538 ( nisSchema.2.11 NAME 'ieee802Device' SUP top AUXILIARY 539 DESC 'A device with a MAC address; device SHOULD be 540 used as a structural class' 541 MAY macAddress ) 542 543 ( nisSchema.2.12 NAME 'bootableDevice' SUP top AUXILIARY 544 DESC 'A device with boot parameters; device SHOULD be 545 used as a structural class' 546 MAY ( bootFile $ bootParameter ) ) 547 548 5. Implementation details 549 550 5.1. Suggested resolution methods 551 552 The preferred means of directing a client application (one using the 553 shared services of the C library) to use LDAP as its information 554 source for the functions listed in 5.2 is to modify the source code 555 to directly query LDAP. As the source to commercial C libraries and 556 applications is rarely available to the end-user, one could emulate a 557 supported nameservice (such as NIS). (This is also an appropriate 558 opportunity to perform caching of entries across process address 559 spaces.) In the case of NIS, reference implementations are widely 560 available and the RPC interface is well known. 561 562 The means by which the operating system is directed to use LDAP is 563 implementation dependent. For example, some operating systems and C 564 libraries support end-user extensible resolvers using dynamically 565 loadable libraries and a nameservice "switch". The means in which the 566 DUA locates LDAP servers is also implementation dependent. 567 568 569 570 571 Howard Experimental [Page 10] 572 574 RFC 2307 Using LDAP as a Network Information Service March 1998 575 576 577 5.2. Affected library functions 578 579 The following functions are typically found in the C libraries of 580 most UNIX and POSIX compliant systems. An LDAP search filter 581 [RFC2254] which may be used to satisfy the function call is included 582 alongside each function name. Parameters are denoted by %s and %d for 583 string and integer arguments, respectively. Long lines are broken. 584 585 getpwnam() (&(objectClass=posixAccount)(uid=%s)) 586 getpwuid() (&(objectClass=posixAccount) 587 (uidNumber=%d)) 588 getpwent() (objectClass=posixAccount) 589 590 getspnam() (&(objectClass=shadowAccount)(uid=%s)) 591 getspent() (objectClass=shadowAccount) 592 593 getgrnam() (&(objectClass=posixGroup)(cn=%s)) 594 getgrgid() (&(objectClass=posixGroup) 595 (gidNumber=%d)) 596 getgrent() (objectClass=posixGroup) 597 598 getservbyname() (&(objectClass=ipService) 599 (cn=%s)(ipServiceProtocol=%s)) 600 getservbyport() (&(objectClass=ipService) 601 (ipServicePort=%d) 602 (ipServiceProtocol=%s)) 603 getservent() (objectClass=ipService) 604 605 getrpcbyname() (&(objectClass=oncRpc)(cn=%s)) 606 getrpcbynumber() (&(objectClass=oncRpc)(oncRpcNumber=%d)) 607 getrpcent() (objectClass=oncRpc) 608 609 getprotobyname() (&(objectClass=ipProtocol)(cn=%s)) 610 getprotobynumber() (&(objectClass=ipProtocol) 611 (ipProtocolNumber=%d)) 612 getprotoent() (objectClass=ipProtocol) 613 614 gethostbyname() (&(objectClass=ipHost)(cn=%s)) 615 gethostbyaddr() (&(objectClass=ipHost)(ipHostNumber=%s)) 616 gethostent() (objectClass=ipHost) 617 618 getnetbyname() (&(objectClass=ipNetwork)(cn=%s)) 619 getnetbyaddr() (&(objectClass=ipNetwork) 620 (ipNetworkNumber=%s)) 621 getnetent() (objectClass=ipNetwork) 622 623 setnetgrent() (&(objectClass=nisNetgroup)(cn=%s)) 624 625 626 627 628 Howard Experimental [Page 11] 629 631 RFC 2307 Using LDAP as a Network Information Service March 1998 632 633 634 5.3. Interpreting user and group entries 635 636 User and group resolution is initiated by the functions prefixed by 637 getpw and getgr respectively. The uid attribute contains the user's 638 login name. The cn attribute, in posixGroup entries, contains the 639 group's name. 640 641 The account object class provides a convenient structural class for 642 posixAccount, and SHOULD be used where additional attributes are not 643 required. 644 645 It is suggested that uid and cn are used as the RDN attribute type 646 for posixAccount and posixGroup entries, respectively. 647 648 An account's GECOS field is preferably determined by a value of the 649 gecos attribute. If no gecos attribute exists, the value of the cn 650 attribute MUST be used. (The existence of the gecos attribute allows 651 information embedded in the GECOS field, such as a user's telephone 652 number, to be returned to the client without overloading the cn 653 attribute. It also accommodates directories where the common name 654 does not contain the user's full name.) 655 656 An entry of class posixAccount, posixGroup, or shadowAccount without 657 a userPassword attribute MUST NOT be used for authentication. The 658 client should be returned a non-matchable password such as "x". 659 660 userPassword values MUST be represented by following syntax: 661 662 passwordvalue = schemeprefix encryptedpassword 663 schemeprefix = "{" scheme "}" 664 scheme = "crypt" / "md5" / "sha" / altscheme 665 altscheme = "x-" keystring 666 encryptedpassword = encrypted password 667 668 The encrypted password contains of a plaintext key hashed using the 669 algorithm scheme. 670 671 userPassword values which do not adhere to this syntax MUST NOT be 672 used for authentication. The DUA MUST iterate through the values of 673 the attribute until a value matching the above syntax is found. Only 674 if encryptedpassword is an empty string does the user have no 675 password. DUAs are not required to consider encryption schemes which 676 the client will not recognize; in most cases, it may be sufficient to 677 consider only "crypt". 678 679 Below is an example of a userPassword attribute: 680 681 userPassword: {crypt}X5/DBrWPOQQaI 682 683 684 685 Howard Experimental [Page 12] 686 688 RFC 2307 Using LDAP as a Network Information Service March 1998 689 690 691 A future standard may specify LDAP v3 attribute descriptions to 692 represent hashed userPasswords, as noted below. This schema MUST NOT 693 be used with LDAP v2 DUAs and DSAs. 694 695 attributetype = attributename sep attributeoption 696 attributename = "userPassword" 697 sep = ";" 698 attributeoption = schemeclass "-" scheme 699 schemeclass = "hash" / altschemeclass 700 scheme = "crypt" / "md5" / "sha" / altscheme 701 altschemeclass = "x-" keystring 702 altscheme = keystring 703 704 705 Below is an example of a userPassword attribute, represented with an 706 LDAP v3 attribute description: 707 708 userPassword;hash-crypt: X5/DBrWPOQQaI 709 710 711 A DUA MAY utilise the attributes in the shadowAccount class to 712 provide shadow password service (getspnam() and getspent()). In such 713 cases, the DUA MUST NOT make use of the userPassword attribute for 714 getpwnam() et al, and MUST return a non-matchable password (such as 715 "x") to the client instead. 716 717 5.4. Interpreting hosts and networks 718 719 The ipHostNumber and ipNetworkNumber attributes are defined in 720 preference to dNSRecord (defined in [RFC1279]), in order to simplify 721 the DUA's role in interpreting entries in the directory. A dNSRecord 722 expresses a complete resource record, including time to live and 723 class data, which is extraneous to this schema. 724 725 Additionally, the ipHost and ipNetwork classes permit a host or 726 network (respectively) and all its aliases to be represented by a 727 single entry in the directory. This is not necessarily possible if a 728 DNS resource record is mapped directly to an LDAP entry. 729 Implementations that wish to use LDAP to master DNS zone information 730 are not precluded from doing so, and may simply avoid the ipHost and 731 ipNetwork classes. 732 733 This document redefines, although not exclusively, the ipNetwork 734 class defined in [RFC1279], in order to achieve consistent naming 735 with ipHost. The ipNetworkNumber attribute is also used in the 736 siteContact object class [ROSE]. 737 738 739 740 741 742 Howard Experimental [Page 13] 743 745 RFC 2307 Using LDAP as a Network Information Service March 1998 746 747 748 The trailing zeros in a network address MUST be omitted. CIDR-style 749 network addresses (eg. 192.168.1/24) MAY be used. 750 751 Hosts with IPv6 addresses MUST be written in their "preferred" form 752 as defined in section 2.2.1 of [RFC1884], such that all components of 753 the address are indicated and leading zeros are omitted. This 754 provides a consistent means of resolving ipHosts by address. 755 756 5.5. Interpreting other entities 757 758 In general, a one-to-one mapping between entities and LDAP entries is 759 proposed, in that each entity has exactly one representation in the 760 DIT. In some cases this is not feasible; for example, a service which 761 is represented in more than one protocol domain. Consider the 762 following entry: 763 764 dn: cn=domain, dc=aja, dc=com 765 cn: domain 766 cn: nameserver 767 objectClass: top 768 objectClass: ipService 769 ipServicePort: 53 770 ipServiceProtocol: tcp 771 ipServiceProtocol: udp 772 773 This entry MUST map to the following two (2) services entities: 774 775 domain 53/tcp nameserver 776 domain 53/udp nameserver 777 778 While the above two entities may be represented as separate LDAP 779 entities, with different distinguished names (such as 780 cn=domain+ipServiceProtocol=tcp, ... and 781 cn=domain+ipServiceProtocol=udp, ...) it is convenient to represent 782 them as a single entry. (If a service is represented in multiple 783 protocol domains with different ports, then multiple entries are 784 required; multivalued RDNs may be used to distinguish them.) 785 786 With the exception of userPassword values, which are parsed according 787 to the syntax considered in section 5.2, any empty values (consisting 788 of a zero length string) are returned by the DUA to the client. The 789 DUA MUST reject any entries which do not conform to the schema 790 (missing mandatory attributes). Non-conforming entries SHOULD be 791 ignored while enumerating entries. 792 793 The nisObject object class MAY be used as a generic means of 794 representing NIS entities. Its use is not encouraged; where support 795 for entities not described in this schema is desired, an appropriate 796 797 798 799 Howard Experimental [Page 14] 800 802 RFC 2307 Using LDAP as a Network Information Service March 1998 803 804 805 schema should be devised. Implementors are strongly advised to 806 support end-user extensible mappings between NIS entities and object 807 classes. (Where the nisObject class is used, the nisMapName attribute 808 may be used as a RDN.) 809 810 5.6. Canonicalizing entries with multi-valued naming attributes 811 812 For entities such as hosts, services, networks, protocols, and RPCs, 813 where there may be one or more aliases, the respective entry's 814 relative distinguished name SHOULD be used to determine the canonical 815 name. Any other values for the same attribute are used as aliases. 816 For example, the service described in section 5.5 has the canonical 817 name "domain" and exactly one alias, "nameserver". 818 819 The schema in this document generally only defines one attribute per 820 class which is suitable for distinguishing an entity (excluding any 821 attributes with integer syntax; it is assumed that entries will be 822 distinguished on name). Usually, this is the common name (cn) 823 attribute. This aids the DUA in determining the canonical name of an 824 entity, as it can examine the value of the relative distinguished 825 name. Aliases are thus any values of the distinguishing attribute 826 (such as cn) which do not match the canonical name of the entity. 827 828 In the event that a different attribute is used to distinguish the 829 entry, as may be the case where these object classes are used as 830 auxiliary classes, the entry's canonical name may not be present in 831 the RDN. In this case, the DUA MUST choose one of the non- 832 distinguished values to represent the entity's canonical name. As the 833 directory server guarantees no ordering of attribute values, it may 834 not be possible to distinguish an entry deterministically. This 835 ambiguity SHOULD NOT be resolved by mapping one directory entry into 836 multiple entities. 837 838 6. Implementation focus 839 840 A NIS server which uses LDAP instead of local files has been 841 developed which supports the schema defined in this document. 842 843 A reference implementation of the C library resolution code has been 844 written for the Free Software Foundation. It may support other C 845 libraries which support the Name Service Switch (NSS) or the 846 Information Retrieval Service (IRS). 847 848 The author has made available a freely distributable set of scripts 849 which parses local databases such as /etc/passwd and /etc/hosts into 850 a form suitable for loading into an LDAP server. 851 852 853 854 855 856 Howard Experimental [Page 15] 857 859 RFC 2307 Using LDAP as a Network Information Service March 1998 860 861 862 7. Security Considerations 863 864 The entirety of related security considerations are outside the scope 865 of this document. It is noted that making passwords encrypted with a 866 widely understood hash function (such as crypt()) available to non- 867 privileged users is dangerous because it exposes them to dictionary 868 and brute-force attacks. This is proposed only for compatibility 869 with existing UNIX system implementations. Sites where security is 870 critical SHOULD consider using a strong authentication service for 871 user authentication. 872 873 Alternatively, the encrypted password could be made available only to 874 a subset of privileged DUAs, which would provide "shadow" password 875 service to client applications. This may be difficult to enforce. 876 877 Because the schema represents operating system-level entities, access 878 to these entities SHOULD be granted on a discretionary basis. (There 879 is little point in restricting access to data which will be 880 republished without restriction, however.) It is particularly 881 important that only administrators can modify entries defined in this 882 schema, with the exception of allowing a principal to change their 883 password (which may be done on behalf of the user by a client bound 884 as a superior principal, such that password restrictions may be 885 enforced). For example, if a user were allowed to change the value of 886 their uidNumber attribute, they could subvert security by 887 equivalencing their account with the superuser account. 888 889 A subtree of the DIT which is to be republished by a DUA (such as a 890 NIS gateway) SHOULD be within the same administrative domain that the 891 republishing DUA represents. (For example, principals outside an 892 organization, while conceivably part of the DIT, should not be 893 considered with the same degree of authority as those within the 894 organization.) 895 896 Finally, care should be exercised with integer attributes of a 897 sensitive nature (particularly the uidNumber and gidNumber 898 attributes) which contain zero-length values. DUAs MAY treat such 899 values as corresponding to the "nobody" or "nogroup" user and group, 900 respectively. 901 902 8. Acknowledgements 903 904 Thanks to Leif Hedstrom of Netscape Communications Corporation, 905 Michael Grant and Rosanna Lee of Sun Microsystems Inc., Ed Reed of 906 Novell Inc., and Mark Wahl of Critical Angle Inc. for their valuable 907 contributions to the development of this schema. Thanks to Andrew 908 Josey of The Open Group for clarifying the use of the UNIX trademark, 909 and to Tim Howes and Peter J. Cherny for their support. 910 911 912 913 Howard Experimental [Page 16] 914 916 RFC 2307 Using LDAP as a Network Information Service March 1998 917 918 919 UNIX is a registered trademark of The Open Group. 920 921 9. References 922 923 [RFC1057] 924 Sun Microsystems, Inc., "RPC: Remote Procedure Call: Protocol 925 Specification Version 2", RFC 1057, June 1988. 926 927 [RFC1279] 928 Kille, S., "X.500 and Domains", RFC 1279, November 1991. 929 930 [RFC1884] 931 Hinden, R., and S. Deering, "IP Version 6 Addressing 932 Architecture", RFC 1884, December 1995. 933 934 [RFC2119] 935 Bradner, S., "Key Words for use in RFCs to Indicate Requirement 936 Levels", BCP 14, RFC 2119, March 1997. 937 938 [RFC2251] 939 Wahl, M., Howes, T., and S. Kille, "Lightweight Directory Access 940 Protocol (v3)", RFC 2251, December 1997. 941 942 [RFC2252] 943 Wahl, M., Coulbeck, A., Howes, T., and S. Kille, "Lightweight 944 Directory Access Protocol (v3): Attribute Syntax Definitions", 945 RFC 2252, December 1997. 946 947 [RFC2254] 948 Howes, T., "The String Representation of LDAP Search Filters", 949 RFC 2254, December 1997. 950 951 [RFC2256] 952 Wahl, M., "A Summary of the X.500(96) User Schema for use with 953 LDAPv3", RFC 2256, December 1997. 954 955 [ROSE] 956 M. T. Rose, "The Little Black Book: Mail Bonding with OSI 957 Directory Services", ISBN 0-13-683210-5, Prentice-Hall, Inc., 958 1992. 959 960 [X500] 961 "Information Processing Systems - Open Systems Interconnection - 962 The Directory: Overview of Concepts, Models and Service", 963 ISO/IEC JTC 1/SC21, International Standard 9594-1, 1988. 964 965 966 967 968 969 970 Howard Experimental [Page 17] 971 973 RFC 2307 Using LDAP as a Network Information Service March 1998 974 975 976 [XOPEN] 977 ISO/IEC 9945-1:1990, Information Technology - Portable Operating 978 Systems Interface (POSIX) - Part 1: Systems Application 979 Programming Interface (API) [C Language] 980 981 10. Author's Address 982 983 Luke Howard 984 PO Box 59 985 Central Park Vic 3145 986 Australia 987 988 EMail: lukeh (a] xedoc.com 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 Howard Experimental [Page 18] 1028 1030 RFC 2307 Using LDAP as a Network Information Service March 1998 1031 1032 1033 A. Example entries 1034 1035 The examples described in this section are provided to illustrate the 1036 schema described in this memo. They are not meant to be exhaustive. 1037 1038 The following entry is an example of the posixAccount class: 1039 1040 dn: uid=lester, dc=aja, dc=com 1041 objectClass: top 1042 objectClass: account 1043 objectClass: posixAccount 1044 uid: lester 1045 cn: Lester the Nightfly 1046 userPassword: {crypt}X5/DBrWPOQQaI 1047 gecos: Lester 1048 loginShell: /bin/csh 1049 uidNumber: 10 1050 gidNumber: 10 1051 homeDirectory: /home/lester 1052 1053 1054 This corresponds the UNIX system password file entry: 1055 1056 lester:X5/DBrWPOQQaI:10:10:Lester:/home/lester:/bin/sh 1057 1058 The following entry is an example of the ipHost class: 1059 1060 dn: cn=peg.aja.com, dc=aja, dc=com 1061 objectClass: top 1062 objectClass: device 1063 objectClass: ipHost 1064 objectClass: bootableDevice 1065 objectClass: ieee802Device 1066 cn: peg.aja.com 1067 cn: www.aja.com 1068 ipHostNumber: 10.0.0.1 1069 macAddress: 00:00:92:90:ee:e2 1070 bootFile: mach 1071 bootParameter: root=fs:/nfsroot/peg 1072 bootParameter: swap=fs:/nfsswap/peg 1073 bootParameter: dump=fs:/nfsdump/peg 1074 1075 This entry represents the host canonically peg.aja.com, also known as 1076 www.aja.com. The Ethernet address and four boot parameters are also 1077 specified. 1078 1079 1080 1081 1082 1083 1084 Howard Experimental [Page 19] 1085 1087 RFC 2307 Using LDAP as a Network Information Service March 1998 1088 1089 1090 An example of the nisNetgroup class: 1091 1092 dn: cn=nightfly, dc=aja, dc=com 1093 objectClass: top 1094 objectClass: nisNetgroup 1095 cn: nightfly 1096 nisNetgroupTriple: (charlemagne,peg,dunes.aja.com) 1097 nisNetgroupTriple: (lester,-,) 1098 memberNisNetgroup: kamakiriad 1099 1100 This entry represents the netgroup nightfly, which contains two 1101 triples (the user charlemagne, the host peg, and the domain 1102 dunes.aja.com; and, the user lester, no host, and any domain) and one 1103 netgroup (kamakiriad). 1104 1105 Finally, an example of the nisObject class: 1106 1107 dn: nisMapName=tracks, dc=dunes, dc=aja, dc=com 1108 objectClass: top 1109 objectClass: nisMap 1110 nisMapName: tracks 1111 1112 dn: cn=Maxine, nisMapName=tracks, dc=dunes, dc=aja, dc=com 1113 objectClass: top 1114 objectClass: nisObject 1115 cn: Maxine 1116 nisMapName: tracks 1117 nisMapEntry: Nightfly$4 1118 1119 This entry represents the NIS map tracks, and a single map entry. 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 Howard Experimental [Page 20] 1142 1144 RFC 2307 Using LDAP as a Network Information Service March 1998 1145 1146 1147 Full Copyright Statement 1148 1149 Copyright (C) The Internet Society (1998). All Rights Reserved. 1150 1151 This document and translations of it may be copied and furnished to 1152 others, and derivative works that comment on or otherwise explain it 1153 or assist in its implementation may be prepared, copied, published 1154 and distributed, in whole or in part, without restriction of any 1155 kind, provided that the above copyright notice and this paragraph are 1156 included on all such copies and derivative works. However, this 1157 document itself may not be modified in any way, such as by removing 1158 the copyright notice or references to the Internet Society or other 1159 Internet organizations, except as needed for the purpose of 1160 developing Internet standards in which case the procedures for 1161 copyrights defined in the Internet Standards process must be 1162 followed, or as required to translate it into languages other than 1163 English. 1164 1165 The limited permissions granted above are perpetual and will not be 1166 revoked by the Internet Society or its successors or assigns. 1167 1168 This document and the information contained herein is provided on an 1169 "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING 1170 TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING 1171 BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION 1172 HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF 1173 MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 Howard Experimental [Page 21] 1199 1201