300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > 无法将该对象添加到ldap服务器_LDAP 基础知识

无法将该对象添加到ldap服务器_LDAP 基础知识

时间:2018-10-17 12:29:13

相关推荐

无法将该对象添加到ldap服务器_LDAP 基础知识

LDAP 基础知识

目录

简介

协议概览

目录结构

架构(Schema)

对象类(objectClass)

属性(Attribute)

条目(Entry)

LDAP 中的数据

常用命令

启动和关闭: start-ds / stop-ds

检查 LDAP 服务器状态: status

搜寻条目: ldapsearch

修改密码: ldappasswordmodify

列出 backends: list-backends

导出 LDIF 文件: export-ldif

导入 LDIF 文件: import-ldif

管理账户: manage-account

性能

LDAP 浏览器

参考文献

简介

LDAP 是Lightweight Directory Access Protocol的缩写,即轻量目录访问协议。它基于X.500标准下更简单的子集标准开发,因此有时 LDAP 也被称之为X.500-lite,即轻量级 x.500。

目录服务在发展内部网络和因特网应用方面扮演着重要角色,它可以通过互联网分享用户、系统、网络、服务以及应用信息。

目录服务可以提供任何系统化的数据集,并以等级结构(hiearchical structure)呈现结果。比如,公司的邮件目录,或者包含地址和电话号码的电话目录。

LDAP 的一个常用功能是提供用户名和密码的集中存储。不同的应用和服务可以用其来认证用户。

协议概览

客户端发起 LDAP 会话连接到 LDAP 服务器。默认连接端口是 389(LDAP),或者 636(LDAPS)。客户端发起操作请求到服务器,服务器返回响应结果。客户端无需等待服务器响应即可发送下一个请求。服务器则会依次返回响应结果。

客户端可以发送如下操作请求:

• StartTLS - 使用 LDAPv3 TLS 扩展来请求安全连接

• Bind - 认证并指定 LDAP 协议版本

• Search - 搜索目录条目

• Compare - 测试命名条目是否包含指定的属性值

• Add a new entry - 添加一个条目

• Delete an entry - 删除一个条目

• Modify an entry - 修改一个条目

• Modify DN - 修改唯一识别名

• Extended Operation - 用于定义其他操作的通用操作

• Unbind - 关闭连接(注意,并非指 Bind 的逆向操作)

目录结构

在 LDAP 里, 一切都是等级化的,或者称之为层级化(hiearchical)。

一棵树有树干,树枝和树叶;树叶长在树枝上,树枝依附于树干。这就是一个简单的层级结构。LDAP 的结构同一棵树类似。假设 LDAP 里存储的是公司的信息,那么可以把公司(company)本身理解为树干,公司里面的各个部门,比如组(group),理解为树干,把用户(user)理解为树叶。这样的结构称之为目录信息树(DIrectory Information Tree,DIT)。

我们在目录信息树里创建一个条目(entry)时,条目的信息存储在属性(attribute)里,属性又被组合成对象类(objectClass),对象类进一步组成了架构(schema)。

下满我们来解释一下这几个重要的概念。

架构(Schema)

•Schema就是一个集合。所有的objectClass和attribute都定义在Schema里。

• 每一个attribute和objectClass,包括其父级attribute和objectClass都必须定义在一个Schema里,且该Schema必须能够被 LDAP 服务器识别。

• 定义在一个Schema里的attribute可以被另一个Schema里的objectClass使用。

对象类(objectClass)

•objectClass是attribute的集合。

•objectClass定义在Shema里。

•objectClass可以是下面的类型:

–STRUCTURAL- 可以用于创建条目,即数据对象

–AUXILIARY- 可以添加到任何条目

–ABSTRACT- 不存在,抽象的。最常见的ABSTRACTobjectClass是top,表示每个objectClass层级的最高形式,用来结束一个层级。

•objectClass可以以层级的形式呈现,这里它可以继承来自父级的属性。也就是说,objectClass可以是一个层级的一部分,这种情况下,objectClass必须和它的父级objectClass保持同样的类型,即STRUCTURAL或者AUXILIARY类型。当父级是top ABSTRACT时无需遵守此规则,因为 top ABSTRACT 用结束任何层级结构。

• 一个objectClass可以有一个或多个父级的objectClass。

•objectClass是用来包含属性的方式。

•objectClass定义一个attribute是否是必须的(MUST)或者是可选的(MAY)。

•objectClass遵守ASN.1注释标准。

示例:下面是一个简单的 objectClass 定义

objectclass ( 2.5.6.2 NAME 'country' DESC 'RFC2256: a country'SUP top STRUCTURALMUST cMAY ( searchGuide $ description ) )

解释:

•objectClass是关键字,指明这是一个objectClass的定义

•2.5.6.2 NAME 'country'定义 objectClass 的全局唯一识别名。它由两部分组成:

–NAME 'country'为 objectClass 定义一个好理解的名字country

–2.5.6.2定义全局唯一识别名,这种形式称之为OID(ObjectIdentifier)。由哪个组织分配这个号码并不重要,但是必须是全局唯一的。通常推荐向IANA申请一个PEN(Private Enterprise Number)作为 OID 使用。

•SUP 'top'表示该objectClass有一个父级的objectClass,也就是说它是一个层级的一部分。一个objectClass可以有一个或多个父级的objectClass。

•STRUCTURAL表示该objectClass包含属性且可以形成目录信息树(DIT)里的条目(entry)。一个条目里只能包含一个STRUCTURALobjectClass。objectClass 也可以是AUXILIARY,这说明它包含attributes,可以和任何STRUCTURAL objectClass一起使用构成一个条目,但是不可以单独构成一个条目。

•DESC 'a country'为可选值,用来描述objectClass。

•MUST c表示c属性是必须的。这里的属性c(c 或者 countryName)必须存在,否则objectClass实例无法创建成功。如果要指明多个属性是必须的,写法是( attr1 $ attr2 $ attrn)。

•MAY ( searchGuide $ description )表示searchGuide和description是可选的,即创建objectClass时这两个属性不需要一定存在。

属性(Attribute)

•attribute定义在Schema里。

• 一个attribute可以包含在一个或多个 objectClass 里。

• 一个attribute可以在包含它的objectClass里出现一次(SINGLE-VALUE)或多次(MULTI-VALUE)。默认为多次。

• 一个attribute可以是一个层级的一部分,此时它继承所有来自父级的属性。比如,commonName(cn),givenName(gn) 和 surname(sn)都是 name 属性的子类。

•attribute的定义包含它的类型(SYNTAX),比如,通过matchingRules定义字符串(string)或者数字(number)比较时是否大小写敏感。

•attribute定义遵守ASN.1注释标准

示例 1:下面是一个简单的 attribute 定义

attributetype ( 2.5.4.3 NAME ( 'cn' 'commonName' ) SUP name )

解释:

•attributetype说明这是一个关于 attribute 的定义

•2.5.4.3 NAME ('cn' 'commonName')定义一个全局唯一识别名。该识别名由两部分组成:

–NAME ('cn' 'commonName')定义一个可理解的名字commonName或者短别名cn。原则上,短别名的个数没有限制。cn排在第一位,它被称为主要名称(primary name)。这在为搜索优化做条目索引时非常重要。

–2.5.4.3定义全局唯一的 OID (ObjectIdentifier)。由哪个组织分配这个号码并不重要,但是必须是全局唯一的。通常推荐向IANA申请一个PEN(Private Enterprise Number)作为 OID 使用。

示例 2:

attributetype ( 2.5.4.41 NAME 'name'EQUALITY caseIgnoreMatchSUBSTR caseIgnoreSubstringsMatchSYNTAX 1.3.6.1.4.1.1466.115.121.1.15{32768} )

解释:

•attributetype同上。

•2.5.4.41 NAME 'name'同上。

•EQUALITY caseIgnoreMatch定义了该属性在搜索过滤(serach filter)中的行为。比如,(name=andy)。这里指定该属性在搜索中大小写不敏感。这里的caseIgnoreSubstringMatch就是一个matchingRule。

•SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{32768}是一个 OID,定义数据类型(data type)和要应用到数据的规则(data validation)。完整的定义可参考 RFC 2252 section 4.3.2。在本例中,OID 定义该属性为目录字符串(Directory String)类型(参考 RFC 2252 section 6.10)。{32768}定义字符串的最大长度,这是可选的。

条目(Entry)

•目录信息树里objectClass的集合

•entry有且只能有一个 STRUCTURAL objectClass。一个STRUCTURAL objectClass可能有一个同为STRUCTURAL类型的父级。

•entry可以包含任意数目的AUXILIARY objectClass。

•entry可以有子 entry(child entry),父 entry(parent entry),同级 entry(sibling entry)

•entry有三种类型:

–object entry- 最常见的一种,包含位于 objectClass 属性(attributes)里的用户数据

–alias entry- 带有单一属性aliasedObjectName的objectClass别名

–subentry- 用于存储与父 entry相关的管理或者操作数据

下图是关于 objectClass, attribute 以及 entry 的示意图:

LDAP 中的数据

LDAP 中的数据以条目(entry)的形式呈现,就像英文字典里单词的条目。比如下面这个条目。它有很多属性,例如:uid:bjensen,mail:bjensen@。查找条目时,只需要指定一个或者多个属性即可。

同时,该条目有一个唯一识别名称:dn: uid=bjensen,ou=People,dc=example,dc=com。DN 是 Distinguished Name 的缩合。在目录里没有两条相同的唯一识别名称。

dn: uid=bjensen,ou=People,dc=example,dc=comuid: bjensencn: Babs Jensencn: Barbara JensenfacsimileTelephoneNumber: +1 408 555 1992gidNumber: 1000givenName: BarbarahomeDirectory: /home/bjensenl: San Franciscomail: bjensen@objectClass: inetOrgPersonobjectClass: organizationalPersonobjectClass: personobjectClass: posixAccountobjectClass: topou: Peopleou: Product DevelopmentroomNumber: 0209sn: JensentelephoneNumber: +1 408 555 1862uidNumber: 1076

常用命令

鉴于大多数的 LDAP 软件大同小异,这里的内容就以OpenDS/OpenDJ 为例。

启动和关闭: start-ds / stop-ds

• 语法:start-ds/stop-ds

• Windows:

– 打开命令窗口

– 浏览到到bat

– 运行:

• 启动:start-ds

• 关闭:stop-ds

• *nix:

– 打开命令窗口

– 浏览到到/bin

– 运行:

• 启动: ./start-ds

– 关闭: ./stop-ds

检查 LDAP 服务器状态: status

• 语法:status

• Windows:

– 打开命令窗口

– 浏览到到bat

– 运行:status

• *nix:

– 打开命令窗口

– 浏览到到/bin

• 运行:./status

搜寻条目: ldapsearch

• 语法:ldapsearch,其中: 为选项, 为过滤条件, 为显示的属性

• 示例:ldapsearch -p 389 -h 192.168.93.128 -D cn=Manager -w ts -b o=ptc uid=demo,其中:

– :-p 389 -h 192.168.93.128 -D cn=Manager -w ts -b o=ptc

– : uid=demo

dn: uid=demo,ou=people,cn=AdministrativeLdap,cn=Windchill_11.2,o=ptcobjectClass: organizationalPersonobjectClass: topobjectClass: personobjectClass: inetOrgPersonuid: demomail: demouserpreferredLanguage: en-USdescription: demosn: Democn: Demo, Usero: Demo OrganizationuserPassword: {SSHA}IDSc3KN4Q1b2YSGfCBQiU4CXgBySg+AQsWkpEA==

• 我们可以使用更复杂的条件,比如"(|(uid=demo)(mail=demouser))":ldapsearch -p 389 -h 192.168.93.128 -D cn=Manager -w ts -b o=ptc "(|(uid=demo)(mail=demouser))"

修改密码: ldappasswordmodify

• 语法:ldappasswordmodify

• 示例:ldappasswordmodify -p 389 -h 192.168.93.128 -D cn=Manager -w ts -a uid=demo,ou=people,cn=AdministrativeLdap,cn=Windchill_11.2,o=ptc -n tsts,其中:

– : -p 389 -h 192.168.93.128 -D cn=Manager -w ts -a uid=demo,ou=people,cn=AdministrativeLdap,cn=Windchill_11.2,o=ptc -n tsts

• 如果修改成功,则会输出: The LDAP password modify operation was successful

列出 backends: list-backends

• 语法:list-backends,其中:

– -b, --baseDN {baseDN}

– -n, --backendID {backendName}

• 示例:list-backends

Backend ID : Base DN---------------:------------------adminRoot : cn=admin dataads-truststore : cn=ads-truststorebackup : cn=backupsconfig : cn=configmonitor : cn=monitorschema : cn=schematasks : cn=tasksuserRoot : o=ptc

导出 LDIF 文件: export-ldif

• 语法:export-ldif

• 示例:

– 即刻导出文件:export-ldif --ldifFile /root/config.ldif --backendID config --hostName localhost --port 4444 --bindDN cn=Manager --bindPassword ts --trustAll

– 定时导出文件,比如,在 /03/09 11:25:00 导出文件:export-ldif --ldifFile "/root/0309112500.ldif" --backendID userRoot --hostName "http://en2k8-wnc-" --port 4444 --bindDN "cn=Manager" --bindPassword ts --trustAll --start "0309112500"

– 定期导出文件,比如,每月的第一天,12:50 分导出文件:export-ldif --ldifFile "/root/50121.ldif" --backendID userRoot --hostName "http://en2k8-wnc-" --port 4444 --bindDN "cn=Manager" --bindPassword ts --trustAll --recurringTask "50 12 1 * *"

导入 LDIF 文件: import-ldif

• 语法:import-ldif

• 示例:import-ldif --ldifFile "/root/export.ldif" --backendID "userRoot" --overwrite --hostName "http://en2k8-wnc-" --port "4444" --bindDN "cn=Manager" "--bindPassword" ts --trustAll

管理账户: manage-account

• 显示账户的信息:manage-account -D "cn=manager" -w ts get-all --targetDN "uid=wcadmin,ou=people,cn=AdministrativeLdap,cn=Windchill_11.2,o=ptc"

Password Policy DN: cn=Default Password Policy,cn=Password Policies,cn=configAccount Is Disabled: falseAccount Expiration Time:Seconds Until Account Expiration:Password Changed Time: 0607070745.945ZPassword Expiration Warned Time:Seconds Until Password Expiration:Seconds Until Password Expiration Warning:Authentication Failure Times:Seconds Until Authentication Failure Unlock:Remaining Authentication Failure Count: 5Last Login Time:Seconds Until Idle Account Lockout:Password Is Reset: falseSeconds Until Password Reset Lockout:Grace Login Use Times:Remaining Grace Login Count: 0Password Changed by Required Time:Seconds Until Required Change Time:Password History:

• 显示用户状态信息:manage-account -D "cn=manager" -w ts get-account-is-disabled --targetDN "uid=wcadmin,ou=people,cn=AdministrativeLdap,cn=Windchill_11.2,o=ptc"

Account Is Disabled: false

• 禁用/启用账户

– 禁用账户:manage-account -h localhost -p 4444 -D "cn=Manager" -w ts -X set-account-is-disabled --operationValue true --targetDN "uid=kongwusun,ou=people,cn=AdministrativeLdap,cn=Windchill_11.2,o=ptc"

– 启用账户:manage-account -h localhost -p 4444 -D "cn=Manager" -w ts clear-account-is-disabled --targetDN "uid=kongwushun,ou=people,cn=AdministrativeLdap,cn=Windchill_10.0,o=ptc"

性能

可以快速查看 /logs:

BIND RES conn=5 op=2 msgID=23 result=0 authDN="uid=wcadmin,ou=people,cn=AdministrativeLdap,cn=Windchill_11.2,o=ptc" etime=0

其中,etime的值默认以毫秒(milliseconds)为单位,表示服务器处理请求的时间。过大的etime通常暗示服务器存在性能问题。

如果需要调整 LDAP 的 JVM运行参数,可以编辑 /config/java.properties, 然后使用dsjavaproperties命令使设置生效。具体示例可参考这里。

其他需要考虑的性能调优因素可以参考官方文档。

LDAP 浏览器

LDAP 浏览器可以连接到 LDAP 服务器,让我们可以方便的查看、搜索、编辑 LDAP 内容。JXplorer 就是这样一款免费的开源浏览器。当然,有很多其他的 LDAP 浏览器,大家可以自行下载尝试。

参考文献

1.

LDAP_百度百科​

2.

/wiki/LightweightDirectoryAccess_Protocol​

3.

LDAP for Rocket Scientists​

4.

OpenDJ 3.5 > Administration Guide​

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。