网站配色,京东商城网页设计分析,网站的栏目设计怎么做,朔州seo网站建设LDAP 基础知识目录简介协议概览目录结构架构#xff08;Schema#xff09;对象类#xff08;objectClass#xff09;属性#xff08;Attribute#xff09;条目#xff08;Entry#xff09;LDAP 中的数据常用命令启动和关闭: start-ds / stop-ds检查 LDAP 服务器状态: s…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 服务器。默认连接端口是 389LDAP或者 636LDAPS。客户端发起操作请求到服务器服务器返回响应结果。客户端无需等待服务器响应即可发送下一个请求。服务器则会依次返回响应结果。客户端可以发送如下操作请求• 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 TreeDIT。我们在目录信息树里创建一个条目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 - 不存在抽象的。最常见的 ABSTRACT objectClass 是 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 countrySUP top STRUCTURALMUST cMAY ( searchGuide $ description ) )解释• objectClass 是关键字指明这是一个 objectClass 的定义• 2.5.6.2 NAME country 定义 objectClass 的全局唯一识别名。它由两部分组成– NAME country 为 objectClass 定义一个好理解的名字 country– 2.5.6.2 定义全局唯一识别名这种形式称之为 OIDObjectIdentifier。由哪个组织分配这个号码并不重要但是必须是全局唯一的。通常推荐向 IANA申请一个 PEN Private Enterprise Number作为 OID 使用。• SUP top 表示该 objectClass 有一个父级的 objectClass也就是说它是一个层级的一部分。一个 objectClass 可以有一个或多个父级的 objectClass。• STRUCTURAL 表示该 objectClass 包含属性且可以形成目录信息树DIT里的条目entry。一个条目里只能包含一个 STRUCTURAL objectClass。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 可以是一个层级的一部分此时它继承所有来自父级的属性。比如commonNamecngivenName(gn) 和 surnamesn都是 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 使用。示例 2attributetype ( 2.5.4.41 NAME nameEQUALITY 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中的行为。比如nameandy。这里指定该属性在搜索中大小写不敏感。这里的 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 可以有子 entrychild entry父 entryparent entry同级 entrysibling entry• entry 有三种类型– object entry - 最常见的一种包含位于 objectClass 属性attributes里的用户数据– alias entry - 带有单一属性 aliasedObjectName 的 objectClass 别名– subentry - 用于存储与父 entry 相关的管理或者操作数据下图是关于 objectClass attribute 以及 entry 的示意图LDAP 中的数据LDAP 中的数据以条目entry的形式呈现就像英文字典里单词的条目。比如下面这个条目。它有很多属性例如uidbjensenmailbjensenexample.com。查找条目时只需要指定一个或者多个属性即可。同时该条目有一个唯一识别名称dn: uidbjensen,ouPeople,dcexample,dccom。DN 是 Distinguished Name 的缩合。在目录里没有两条相同的唯一识别名称。dn: uidbjensen,ouPeople,dcexample,dccom
uid: bjensen
cn: Babs Jensen
cn: Barbara Jensen
facsimileTelephoneNumber: 1 408 555 1992
gidNumber: 1000
givenName: Barbara
homeDirectory: /home/bjensen
l: San Francisco
mail: bjensenexample.com
objectClass: inetOrgPerson
objectClass: organizationalPerson
objectClass: person
objectClass: posixAccount
objectClass: top
ou: People
ou: Product Development
roomNumber: 0209
sn: Jensen
telephoneNumber: 1 408 555 1862
uidNumber: 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 cnManager -w ts -b optc uiddemo 其中– -p 389 -h 192.168.93.128 -D cnManager -w ts -b optc – uiddemo dn: uiddemo,oupeople,cnAdministrativeLdap,cnWindchill_11.2,optc
objectClass: organizationalPerson
objectClass: top
objectClass: person
objectClass: inetOrgPerson
uid: demo
mail: demouser
preferredLanguage: en-US
description: demo
sn: Demo
cn: Demo, Usero: Demo OrganizationuserPassword: {SSHA}IDSc3KN4Q1b2YSGfCBQiU4CXgBySgAQsWkpEA• 我们可以使用更复杂的条件比如 (|(uiddemo)(maildemouser)) ldapsearch -p 389 -h 192.168.93.128 -D cnManager -w ts -b optc (|(uiddemo)(maildemouser))修改密码 ldappasswordmodify• 语法 ldappasswordmodify • 示例 ldappasswordmodify -p 389 -h 192.168.93.128 -D cnManager -w ts -a uiddemo,oupeople,cnAdministrativeLdap,cnWindchill_11.2,optc -n tsts 其中– : -p 389 -h 192.168.93.128 -D cnManager -w ts -a uiddemo,oupeople,cnAdministrativeLdap,cnWindchill_11.2,optc -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 : cnadmin data
ads-truststore : cnads-truststore
backup : cnbackups
config : cnconfig
monitor : cnmonitor
schema : cnschema
tasks : cntasks
userRoot : optc导出 LDIF 文件 export-ldif• 语法 export-ldif • 示例– 即刻导出文件: export-ldif --ldifFile /root/config.ldif --backendID config --hostName localhost --port 4444 --bindDN cnManager --bindPassword ts --trustAll – 定时导出文件比如在 2017/03/09 11:25:00 导出文件 export-ldif --ldifFile /root/20170309112500.ldif --backendID userRoot --hostName http://en2k8-wnc-x24.ptcts.com --port 4444 --bindDN cnManager --bindPassword ts --trustAll --start 20170309112500– 定期导出文件比如每月的第一天1250 分导出文件 export-ldif --ldifFile /root/50121.ldif --backendID userRoot --hostName http://en2k8-wnc-x24.ptcts.com --port 4444 --bindDN cnManager --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-x24.ptcts.com --port 4444 --bindDN cnManager --bindPassword ts --trustAll管理账户: manage-account• 显示账户的信息 manage-account -D cnmanager -w ts get-all --targetDN uidwcadmin,oupeople,cnAdministrativeLdap,cnWindchill_11.2,optc Password Policy DN: cnDefault Password Policy,cnPassword Policies,cnconfig
Account Is Disabled: false
Account Expiration Time:
Seconds Until Account Expiration:
Password Changed Time: 20190607070745.945Z
Password Expiration Warned Time:
Seconds Until Password Expiration:
Seconds Until Password Expiration Warning:
Authentication Failure Times:
Seconds Until Authentication Failure Unlock:
Remaining Authentication Failure Count: 5
Last Login Time:
Seconds Until Idle Account Lockout:
Password Is Reset: false
Seconds Until Password Reset Lockout:
Grace Login Use Times:
Remaining Grace Login Count: 0
Password Changed by Required Time:
Seconds Until Required Change Time:
Password History:• 显示用户状态信息 manage-account -D cnmanager -w ts get-account-is-disabled --targetDN uidwcadmin,oupeople,cnAdministrativeLdap,cnWindchill_11.2,optc Account Is Disabled: false• 禁用/启用账户– 禁用账户manage-account -h localhost -p 4444 -D cnManager -w ts -X set-account-is-disabled --operationValue true --targetDN uidkongwusun,oupeople,cnAdministrativeLdap,cnWindchill_11.2,optc– 启用账户manage-account -h localhost -p 4444 -D cnManager -w ts clear-account-is-disabled --targetDN uidkongwushun,oupeople,cnAdministrativeLdap,cnWindchill_10.0,optc性能可以快速查看 /logs:BIND RES conn5 op2 msgID23 result0 authDNuidwcadmin,oupeople,cnAdministrativeLdap,cnWindchill_11.2,optc etime0其中etime 的值默认以毫秒milliseconds为单位表示服务器处理请求的时间。过大的 etime 通常暗示服务器存在性能问题。如果需要调整 LDAP 的 JVM运行参数可以编辑 /config/java.properties 然后使用 dsjavaproperties 命令使设置生效。具体示例可参考这里。其他需要考虑的性能调优因素可以参考官方文档。LDAP 浏览器LDAP 浏览器可以连接到 LDAP 服务器让我们可以方便的查看、搜索、编辑 LDAP 内容。JXplorer 就是这样一款免费的开源浏览器。当然有很多其他的 LDAP 浏览器大家可以自行下载尝试。参考文献1. LDAP_百度百科baike.baidu.com2. https://en.wikipedia.org/wiki/LightweightDirectoryAccess_Protocolen.wikipedia.org3. LDAP for Rocket Scientistswww.zytrax.com4. OpenDJ 3.5 Administration Guidebackstage.forgerock.com