条目 Entries LDAP
条目是有关实体的信息的集合。每个条目由三个主要组件组成:可分辨名称、属性集合和对象类集合
DIT是一个主要进行读操作的数据库 DIT由条目(Entry)组成,条目相当于关系数据库中表的记录;
条目的可分辨名称(通常称为 DN)唯一标识该条目及其在目录信息树 (DIT) 层次结构中的位置。LDAP 条目的 DN 很像文件系统上文件的路径
LDAP DN 由零个或多个称为相对可分辨名称或 RDN 的元素组成。每个 RDN 由一个或多个(通常只有一个)属性-值对组成。例如,“uid=john.doe”表示一个 RDN,该 RDN 由名为“uid”且值为“john.doe”的属性组成。如果 RDN 具有多个属性-值对,则它们由加号分隔,例如“givenName=John+sn=Doe”
LDAP目录中的信息是是按照树型结构组织,具体信息存储在条目(entry)的数据结构中。条目相当于关系数据库中表的记录;条目是具有区别名DN (Distinguished Name)的属性(Attribute),DN是用来引用条目的,DN相当于关系数据库表中的关键字(Primary Key)。属性由类型(Type)和一个或多个值(Values)组成,相当于关系数据库中的字段(Field)由字段名和数据类型组成,只是为了方便检索的需要,LDAP中的Type可以有多个Value,而不是关系数据库中为降低数据的冗余性要求实现的各个域必须是不相关的
dn :一条记录的位置
dc :一条记录所属区域
ou :一条记录所属组织
cn/uid:一条记录的名字/ID
DAP的信息是以树型结构存储的,在树根一般定义国家(c=CN)或域名(dc=com),在其下则往往定义一个或多个组织 (organization)(o=Acme)或组织单元(organizational units) (ou=People)。一个组织单元可能包含诸如所有雇员、大楼内的所有打印机等信息。此外,LDAP支持对条目能够和必须支持哪些属性进行控制,这是有一个特殊的称为对象类别(objectClass)的属性来实现的。该属性的值决定了该条目必须遵循的一些规则,其规定了该条目能够及至少应该包含哪些属性。例如:inetorgPerson对象类需要支持sn(surname)和cn(common name)属性,但也可以包含可选的如邮件,电话号码等属性
2. LDAP简称对应
o– organization(组织-公司)
ou – organization unit(组织单元-部门)
c - countryName(国家)
dc - domainComponent(域名)
sn – suer name(真实名称)
cn - common name(常用名称)
3. 目录设计
设计目录结构是LDAP最重要的方面之一。下面我们将通过一个简单的例子来说明如何设计合理的目录结构。该例子将通过Netscape地址薄来访文。假设有一个位于美国US(c=US)而且跨越多个州的名为Acme(o=Acme)的公司。Acme希望为所有的雇员实现一个小型的地址薄服务器。
我们从一个简单的组织DN开始:
dn: o=Acme, c=US
Acme所有的组织分类和属性将存储在该DN之下,这个DN在该存储在该服务器的目录是唯一的。Acme希望将其雇员的信息分为两类:管理者(ou= Managers)和普通雇员(ou=Employees),这种分类产生的相对区别名(RDN,relative distinguished names。表示相对于顶点DN)就shi :
dn: ou=Managers, o=Acme, c=US
dn: ou=Employees, o=Acme, c=US
在下面我们将会看到分层结构的组成:顶点是US的Acme,下面是管理者组织单元和雇员组织单元。因此包括Managers和Employees的DN组成为:
dn: cn=Jason H. Smith, ou=Managers, o=Acme, c=US
为了引用Jason H. Smith的通用名(common name )条目,LDAP将采用cn=Jason H. Smith的RDN。然后将前面的父条目结合在一起就形成如下的树型结构:
cn=Jason H. Smith
+ ou=Managers
+ o=Acme
+ c=US
-> dn: cn=Jason H. Smith,ou=Managers,o=Acme,c=US
现在已经定义好了目录结构,下一步就需要导入目录信息数据。目录信息数据将被存放在LDIF文件中,其是导入目录信息数据的默认存放文件。用户可以方便的编写Perl脚本来从例如/etc/passwd、NIS等系统文件中自动创建LDIF文件。
下面的实例保存目录信息数据为testdate.ldif文件,该文件的格式说明将可以在man ldif中得到。
在添加任何组织单元以前,必须首先定义Acme DN:
dn: o=Acme, c=US
objectClass: organization
这里o属性是必须的
o: Acme
下面是管理组单元的DN,在添加任何管理者信息以前,必须先定义该条目。
dn: ou=Managers, o=Acme, c=US
objectClass: organizationalUnit
这里ou属性是必须的。
ou: Managers
第一个管理者DN:
dn: cn=Jason H. Smith, ou=Managers, o=Acme, c=US
objectClass: inetOrgPerson
cn和sn都是必须的属性:
cn: Jason H. Smith
sn: Smith
但是还可以定义一些可选的属性:
telephoneNumber: 111-222-9999
mail: headhauncho@acme.com
localityName:Houston
可以定义另外一个组织单元:
dn: ou=Employees, o=Acme, c=US
objectClass: organizationalUnit
ou: Employees
并添加雇员信息如下:
dn: cn=Ray D. Jones, ou=Employees, o=Acme, c=US
objectClass: inetOrgPerson
cn: Ray D. Jones
sn: Jones
telephoneNumber: 444-555-6767
mail: jonesrd@acme.com
localityName:Houston
dn: cn=Eric S. Woods, ou=Employees, o=Acme, c=US
objectClass: inetOrgPerson
链接:https://www.jianshu.com/p/deae0356a1df
来源:简书
属性
属性保存条目的数据。每个属性都有一个属性类型、零个或多个属性选项以及一组包含实际数据的值。
属性类型是模式元素,用于指定 LDAP 客户机和服务器应如何处理属性。所有属性类型都必须具有对象标识符 (OID) 以及零个或多个可用于引用该类型属性的名称。它们还必须具有属性语法(指定可存储在该类型的属性中的数据类型)和一组匹配规则(指示应如何针对该类型的属性值执行比较)。属性类型还可以指示是否允许属性在同一条目中具有多个值,以及该属性是用于保存用户数据(用户属性)还是用于服务器的操作(操作属性)。操作属性通常用于配置和/或状态信息。
对象类
对象类是架构元素,用于指定可能与特定类型的对象、进程或其他实体相关的属性类型的集合。每个条目都有一个结构对象类,它指示条目表示的对象类型(例如,它是否是关于人,组,设备,服务等的信息),并且还可以具有零个或多个辅助对象类,这些对象类建议该条目的附加特征
对象标识符 (OID)
对象标识符 (OID) 是一个字符串,用于唯一标识 LDAP 协议中的各种元素,以及整个计算过程中的其他区域。OID 由一系列用句点分隔的数字组成(例如,“1.2.840.113556.1.4.473”是表示服务器端排序请求控制的 OID)。在 LDAP 中,OID 用于标识架构元素(如属性类型、对象类、语法、匹配规则等)、控件以及扩展请求和响应等内容。
搜索过滤器
搜索筛选器用于定义用于标识包含某些类型信息的条目的条件
用于执行匹配的逻辑封装在匹配规则中,这些规则在属性类型定义中指定。不同的匹配规则可能使用不同的逻辑来做出决定。
搜索基本 DN 和范围
所有搜索请求都包括一个基本 DN 元素(该元素指定要在其中查找匹配条目的 DIT 部分)和一个范围(指定应考虑该子树的多少)。定义的搜索范围包括:
- baseObject 范围(通常简称为“base”)指示只应考虑由搜索基 DN 指定的条目。
- 单一级别范围(通常称为“一”或“一级”)表示只应考虑紧邻搜索基础 DN 的条目(而不是基本条目本身)。
- 整个子树范围(通常称为“sub”)表示应考虑指定为搜索基础 DN 的条目及其下的所有条目(任何深度)。
- 从属 Subtree 范围指示应考虑搜索库 DN 以下的所有条目(任何深度),而不是搜索库条目本身。
修改和修改类型
LDAP 客户端可以使用修改请求对条目中存储的数据进行更改。修改请求指定要更新的条目的 DN 以及要应用于该条目的修改列表。每个修改都有一个修改类型、一个属性名称和一组可选的属性值。
LDAP 网址
LDAP URL 封装了许多信息片段,这些信息可用于引用目录服务器、目录服务器中的特定条目或搜索条件,以标识目录服务器中的匹配条目
以下是有效 LDAP URL 的示例:
- ldap:// — 这是 LDAP URL 的最小表示形式,仅包含方案。
- ldap://ds.example.com:389 — 此 LDAP URL 包括方案、地址和端口。
- ldap:/// — 此 LDAP URL 包括方案、隐含地址和端口以及零长度字符串的隐含 DN(由第三个正斜杠表示)。
- ldap://ds.example.com:389/dc=example,dc=com — 此 LDAP URL 包括方案、显式地址和端口以及 dc=example,dc=com 的目标条目 DN。
- ldap://ds.example.com:389/dc=example,dc=com?givenName,sn,cn?sub?(uid=john.doe)— 此 LDAP URL 提供了一套完整的搜索条件,包括方案、显式地址和端口、dc=example、dc=com 的基本 DN、包含 givenName、sn 和 cn 属性的请求属性列表、一个 wholeSubtree 范围和一个过滤器 (uid=john.doe)。
LDAP URL 遵循 RFC 3986 中定义的 URI 的基本约束,因此要求对特殊字符进行百分比编码(即,字符的 UTF-8 编码的每个字节应表示为百分号,后跟包含标识该字节的两个十六进制数字)。通常,特殊字符包括除 ASCII 字母和数字之外的所有字符,以及以下符号:短划线、句点、下划线、波浪号、冒号、正斜杠、问号、八位符、左方括号、右方括号、at 符号、感叹号、美元符号、&符号、单引号、左括号、右括号、星号、加号、逗号、分号和等号。
ldap 命令行工具
ldapadd
ldapadd -x -D "cn=Manager, dc=example, dc=com" -w secret -f mytest.ldif
-x 进行简单认证
-D 用来绑定服务器的DN
-h 目录服务的地址
-w 绑定DN的密码
-f 使用ldif文件进行条目添加的文件
例子
ldapadd -x -D "cn=root,dc=starxing,dc=com" -w secret -f /root/test.ldif
ldapadd -x -D "cn=root,dc=starxing,dc=com" -w secret (这样写就是在命令行添加条目)
ldapsearch
-x 进行简单认证
-D 用来绑定服务器的DN
-w 绑定DN的密码
-b 指定要查询的根节点
-H 制定要查询的服务器
ldapsearch -x -D "cn=root,dc=starxing,dc=com" -w secret -b "dc=starxing,dc=com"
使用简单认证,用 "cn=root,dc=starxing,dc=com" 进行绑定,
要查询的根是 "dc=starxing,dc=com"。这样会把绑定的用户能访问"dc=starxing,dc=com"下的
所有数据显示出来。
ldapsearch -x -W -D "cn=administrator,cn=users,dc=osdn,dc=zzti,dc=edu,dc=cn" -b "cn=administrator,cn=users,dc=osdn,dc=zzti,dc=edu,dc=cn" -h troy.osdn.zzti.edu.cn
ldapsearch -b "dc=canon-is,dc=jp" -H ldaps://192.168.0.92:636
ldapdelete
ldapdelete -x -D "cn=Manager,dc=test,dc=com" -w secret "uid=test1,ou=People,dc=test,dc=com"
ldapdelete -x -D 'cn=root,dc=it,dc=com' -w secert 'uid=zyx,dc=it,dc=com'
这样就可以删除'uid=zyx,dc=it,dc=com'记录了,应该注意一点,如果o或ou中有成员是不能删除的。
ldappasswd
-x 进行简单认证
-D 用来绑定服务器的DN
-w 绑定DN的密码
-S 提示的输入密码
-s pass 把密码设置为pass
-a pass 设置old passwd为pass
-A 提示的设置old passwd
-H 是指要绑定的服务器
-I 使用sasl会话方式
#ldappasswd -x -D 'cm=root,dc=it,dc=com' -w secret 'uid=zyx,dc=it,dc=com' -S
New password:
Re-enter new password:
就可以更改密码了,如果原来记录中没有密码,将会自动生成一个userPassword。
ldapmodify
-a 添加新的条目.缺省的是修改存在的条目.
-C 自动追踪引用.
-c 出错后继续执行程序并不中止.缺省情况下出错的立即停止.比如如果你的ldif 文
件内的某个条目在数据库内并不存在,缺省情况下程序立即退出,但如果使用了该参数,程
序忽略该错误继续执行.
-n 用于调试到服务器的通讯.但并不实际执行搜索.服务器关闭时,返回错误;服务器
打开时,常和-v 参数一起测试到服务器是否是一条通路.
-v 运行在详细模块.在标准输出中打出一些比较详细的信息.比如:连接到服务器的
ip 地址和端口号等.
-M[M] 打开manage DSA IT 控制. -MM 把该控制设置为重要的.
-f file 从文件内读取条目的修改信息而不是从标准输入读取.
-x 使用简单认证.
-D binddn 指定搜索的用户名(一般为一dn 值).
-W 指定了该参数,系统将弹出一提示入用户的密码.它和-w 参数相对使用.
-w bindpasswd 直接指定用户的密码. 它和-W 参数相对使用.
-H ldapuri 指定连接到服务器uri(ip 地址和端口号,常见格式为
ldap://hostname:port).如果使用了-H 就不能使用-h 和-p 参数.
-h ldaphost 指定要连接的主机的名称/ip 地址.它和-p 一起使用.
-p ldapport 指定要连接目录服务器的端口号.它和-h 一起使用.
如果使用了-h 和-p 参数就不能使用-H 参数.
-Z[Z] 使用StartTLS 扩展操作.如果使用-ZZ,命令强制使用StartTLS 握手成功.
-V 启用证书认证功能,目录服务器使用客户端证书进行身份验证,必须与-ZZ 强制启用
TLS 方式配合使用,并且匿名绑定到目录服务器.
-e 设置客户端证书文件,例: -e cert/client.crt
-E 设置客户端证书私钥文件,例: -E cert/client.key
#ldapmodify -x -D "cn=root,dc=it,dc=com" -W -f modify.ldif
将modify.ldif中的记录更新原有的记录。