schema 在 openldap 中是作为定义数据结构的描述工具,但是定义规则比较复杂,在这里简单的讨论一下相关的内容。
一般来说如果要使用到一组schema时我们都需要在slapd.conf中定义,例如下面的配中置将会加载三组schema配置。
include /etc/ldap/schema/core.schema
include /etc/ldap/schema/cosine.schema
include /etc/ldap/schema/inetorgperson.schema
如果需要定义自己数据结构或者在已有的ldap 对象上添加属性可以通过定义自己ldif信息文件来添加
dn: cn={2}inetorgperson,cn=schema,cn=config
changetype: modify
add: olcAttributeTypes
olcAttributeTypes: ( 2.16.840.1.113731.3.1.242 NAME 'enable' DESC 'freeze status' EQUALITY caseIgnoreMatch Syntax 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE )
olcAttributeTypes: ( 2.16.840.1.113731.3.1.243 NAME 'first-name' DESC 'account first name' EQUALITY caseIgnoreMatch Syntax 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE )
olcAttributeTypes: ( 2.16.840.1.113731.3.1.244 NAME 'last-name' DESC 'account last name' EQUALITY caseIgnoreMatch Syntax 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE )
olcAttributeTypes: ( 2.16.840.1.113731.3.1.245 NAME 'language' DESC 'account language' EQUALITY caseIgnoreMatch Syntax 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE )
olcAttributeTypes: ( 2.16.840.1.113731.3.1.246 NAME 'timezone' DESC 'account timezone' EQUALITY caseIgnoreMatch Syntax 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE )
dn: cn={2}inetorgperson,cn=config changetype: modify replace: olcObjectClasses olcObjectClasses: ( 2.16.840.1.113731.3.2.2 NAME 'inetOrgPerson' DESC 'RFC2 798: Internet Organizational Person' SUP organizationalPerson STRUCTURAL MAY ( audio $ businessCategory $ carLicense $ departmentNumber $ displayName $ em ployeeNumber $ employeeType $ givenName $ homePhone $ homePostalAddress $ ini tials $ jpegPhoto $ labeledURI $ mail $ manager $ mobile $ o $ pager $ photo $ roomNumber $ secretary $ uid $ userCertificate $ x500uniqueIdentifier $ pre ferredLanguage $ userSMIMECertificate $ userPKCS12 $ enable $ first-name $ last-name $ language $ timezone ) )
例如,在这一段定义定义中就向inetorgperson 对象添加 enable、first-name、last-name、language、timezone五个属性。这里简单的以enable属性来介绍定义的含义
名称 | 示例 | 说明 |
---|---|---|
OID | 2.16.840.1.113731.3.1.242 | 类型或属性描述唯一标识 |
属性名 | NAME ‘enable’ | 类型或属性名称 |
属性描述 | DESC ‘freeze status’ | 简单的属性说明 |
属性约束条件 | EQUALITY caseIgnoreMatch | 保证属性内容正确的验证方式 |
属性类型定义 | Syntax 1.3.6.1.4.1.1466.115.121.1.15 | 值类型的定义 |
存储方式 | SINGLE-VALUE | 属性可以多值或单值的定义 |
定义ObjectClasses的方式与AttributeTypes的方式类似这里不再赘述。
在定义好用户信息的方式后就可以使用ldapmodify将定义更新到openldap的config环境中,一般这里都是用的cn=admin,cn=config帐号
ldapmodify -D "cn=admin,cn=config" -w password -x -f $SLAPD_DIR/ldif/inetorgperson_add.ldif