其他分享
首页 > 其他分享> > OpenLDAP研究

OpenLDAP研究

作者:互联网

简介

OpenLDAP是轻型目录访问协议(Lightweight Directory Access Protocol,LDAP)的缩写, OpenLDAP的开源并已经被包含在众多流行的Linux发行版中。

LDAP 其实是一种目录服务, 类似于我们在文件系统中所使用的目录, 类似于我们查询电话号码使用的电话号码簿, 也类似于你在花园中所看到的树木。一句话:数据集中存放,方便使用和管理

LDAP目录树

目录服务是一种在分布式环境中发现目标的方法。目录具有两个主要组成部分:

      LDAP的基本模型是建立在“条目”(Entry)的基础上。一个条目是一个或多个属性的集合,并且具有一个全局唯一的“可区分名称”(用dn表示)。与关系型数据(后面简称数据库)进行类比,一个条目相当于数据库中的一条记录,而dn相当于数据库中记录的关键字,属性相当于数据库中的字段。提示:dn必须是全局唯一的。 

      LDAP中,将数据组织成一个树形结构,这与现实生活中的很多数据结构可以对应起来,而不像设计关系型数据库的表,需要进行多种变化。例如,图1-1所示就是一个树形结构的数据。

名称解释

ldif (LDAP Interchange Format)

objectclass:LDAP server要想启动必须能够识别每个对象的 Attribute

LDAP 中,一条记录必须包含一个 objectclass 属性,且其需要赋予至少一个值。每

一个值将用作一条 LDAP 记录进行数据存储的模板;模板中包含了一条记录中数个必须

被赋值的属性和一系列可选的是属性。

objectclass 有严格的等级之分,最顶层的类是 top 和 alias。

objectclass 分三大类:结构型的(person 和 organizaionUnit)

辅助型的(extensibeobject)

抽象型的 (这类不直接使用)

objectclass: person

objectclass: organizationalPerson

objectclass: inetOrgPerson

objectclass: fff

可以为任何一个对象根据需要分配多个对象类型。

person 对象类型要求 cn(common name)和sn(surname)这两个域不能为空。

persion 对象类型允许有其它的可选域,包括givenname、telephonenumber,等等。

organizationalPerson给person 加入更多的可选域

inetOrgPerson 又加入更多的可选域(包括电子邮件信息)。

fff 是为定制的对象类型,加入了很多定制的属性。

LDIF文件

对上图进行分析,该目录结构分为3层,有4个结点。根据上图可创建LDIF文件如下:

提示:每个结点可用一个dn表示,对于每个结点,又可继续添加新的结点。如在根结点中可添加其他部门ou,在ou=managers结点也可继续添加其他管理人员的信息。

ccxx.ldif

# root node

dn: dc=ccxx,dc=com

dc: ccxx

objectClass: dcObject

objectClass: organizationalUnit

ou: ccxx Dot com

LDAP协议

LDAP是一个目录服务协议,目前存在众多版本的LDAP,而最常见的则是V2和V3两个版本,它们分别于1995年和1997年首次发布。

LDAP协议的特点

安装环境

硬件要求

CPU: 8核心2.0GHz

内存: 16GB

硬盘: 100GB

网卡: 2*1000Mbps

CPU: 4核心2.0GHz

内存: 4GB

硬盘: 50GB

网卡: 100Mbps

系统要求

Linux

网络要求

OpenLDAP 安装

服务端的安装

# yum install -y openldap openldap-clients openldap-servers migrationtools

# rpm -qa |grep openldap

openldap-devel-2.4.44-15.el7_5.x86_64

openldap-clients-2.4.44-15.el7_5.x86_64

openldap-2.4.44-15.el7_5.x86_64

openldap-servers-2.4.44-15.el7_5.x86_64

compat-openldap-2.3.43-5.el7.x86_64

openldap-servers-sql-2.4.44-15.el7_5.x86_64

配置OpenLDAP

官方不推荐使用 slapd.conf 作为配置文件

【有两种配置方法:1、通过slapd.conf(centos6),2、通过hdb文件(centos7)】

注意:从OpenLDAP2.4.23版本开始所有配置数据都保存在/etc/openldap/slapd.d/中,建议不再使用slapd.conf作为配置文件。

# slappasswd -s 123456

服务启动

# service slapd start

# systemctl enable slapd

# systemctl start slapd

OpenLDAP数据库

配置OpenLDAP数据库,使用如下命令:

# cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG

# chown ldap:ldap -R /var/lib/ldap

# chmod 700 -R /var/lib/ldap

注意:OpenLDAP默认使用的数据库是BerkeleyDB,/var/lib/ldap/就是BerkeleyDB数据库默认存储的路径

# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif

# ldapadd -x -D "cn=Manager,dc=ccxx,dc=com" -W -f /tmp/ccxx.ldif导入基础数据库

# ldapadd -x -D "cn=Manager,dc=ccxx,dc=com" -W -f /tmp/my.ldif导入用户到数据库

LDAP常用命令

-x   进行简单认证

-D   用来绑定服务器的DN

-h   目录服务的地址

-w   绑定DN的密码

-f   使用ldif文件进行条目添加的文件

ldapadd -x -D "cn=root,dc=ccxx,dc=com" -w secret -f /root/test.ldif ldapadd -x -D "cn=root,dc=ccxx,dc=com" -w secret (这样写就是在命令行添加条目)

-x   进行简单认证

-D   用来绑定服务器的DN

-w   绑定DN的密码

-b   指定要查询的根节点

-H   制定要查询的服务器

#linux 查询方法

# ldapsearch -LLL -w syswin -x -H ldap://192.168.18.250 -D "cn=admin,dc=dev,dc=com" -b "dc=dev,dc=com" "(uid=user1)"

#windows 查询方法

# ldapsearch -LLL -x -h 172.28.4.103 -D "administrator@xx.com" -W -b "dc=ccxx,dc=com" "*"

ldapdelete -x -D "cn=Manager,dc=test,dc=com" -w secret "uid=test1,ou=People,dc=test,dc=com" 

-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

-a 添加新的条目.缺省的是修改存在的条目

-x 使用简单认证

-D binddn指定搜索的用户名(一般为一dn 值)

-W 该参数,提示入用户的密码

-H ldapuri 指定连接到服务器uri(ip 地址和端口号,常见格式为

   ldap://hostname:port).如果使用了-H 就不能使用-h 和-p 参数

-h ldaphost 指定要连接的主机的名称/ip 地址.它和-p 一起使用

-p ldapport 指定要连接目录服务器的端口号.它和-h 一起使用

# ldapmodify -x -D "cn=root,dc=it,dc=com" -W -f modify.ldif   

LDAP常见错误码

LDAP常见错误码

LDAP_SUCCESS = 0 成功

LDAP_OPERATIONS_ERROR = 1 操作错误

LDAP_PROTOCOL_ERROR = 2 协议错误

LDAP_TIME_LIMIT_EXCEEDED = 3 超过最大时间限制

LDAP_SIZE_LIMIT_EXCEEDED = 4 超过最大返回条目数

LDAP_COMPARE_FALSE = 5 比较不匹配

LDAP_COMPARE_TRUE = 6 比较匹配

LDAP_AUTH_METHOD_NOT_SUPPORTED = 7 认证方法未被支持

LDAP_STRONG_AUTH_REQUIRED = 8 需要强认证

LDAP_PARTIAL_RESULTS = 9 null

LDAP_REFERRAL = 10 Referral

LDAP_ADMIN_LIMIT_EXCEEDED = 11 超出管理员权限

LDAP_UNAVAILABLE_CRITICAL_EXTENSION = 12 Critical扩展无效

LDAP_CONFIDENTIALITY_REQUIRED = 13 需要Confidentiality

LDAP_SASL_BIND_IN_PROGRESS = 14 需要SASL绑定

LDAP_NO_SUCH_ATTRIBUTE = 16 未找到该属性

LDAP_UNDEFINED_ATTRIBUTE_TYPE = 17 未定义的属性类型

LDAP_INAPPROPRIATE_MATCHING = 18 不适当的匹配

LDAP_CONSTRAINT_VIOLATION = 19 约束冲突

LDAP_ATTRIBUTE_OR_value_EXISTS = 20 属性或值已存在

LDAP_INVALID_ATTRIBUTE_SYNTAX = 21 无效的属性语法

LDAP_NO_SUCH_OBJECT = 32 未找到该对象

LDAP_ALIAS_PROBLEM = 33 别名有问题

LDAP_INVALID_DN_SYNTAX = 34 无效的DN语法

LDAP_IS_LEAF = 35 null

LDAP_ALIAS_DEREFERENCING_PROBLEM = 36 Dereference别名有问题

LDAP_INAPPROPRIATE_AUTHENTICATION = 48 不适当的认证

LDAP_INVALID_CREDENTIALS = 49 无效的Credential

LDAP_INSUFFICIENT_ACCESS_RIGHTS = 50 访问权限不够

LDAP_BUSY = 51 遇忙

LDAP_UNAVAILABLE = 52 无效

LDAP_UNWILLING_TO_PERform = 53 意外问题

LDAP_LOOP_DETECT = 54 发现死循环

LDAP_NAMING_VIOLATION = 64 命名冲突

LDAP_OBJECT_CLASS_VIOLATION = 65 对象类冲突

LDAP_NOT_ALLOWED_ON_NON_LEAF = 66 不允许在非叶结点执行此操作

LDAP_NOT_ALLOWED_ON_RDN = 67 不允许对RDN执行此操作

LDAP_ENTRY_ALREADY_EXISTS = 68 Entry已存在

LDAP_OBJECT_CLASS_MODS_PROHIBITED = 69 禁止更改对象类

LDAP_AFFECTS_MULTIPLE_DSAS = 71 null

LDAP_OTHER = 80 其它


标签:研究,数据库,dc,OpenLDAP,LDAP,ldif,com
来源: https://blog.51cto.com/redone/2425465