ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

OpenLDAP研究

2019-08-01 10:01:55  阅读:274  来源: 互联网

标签:研究 数据库 dc OpenLDAP LDAP ldif com


简介

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

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

LDAP目录树

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

  • 第一部分是数据库,数据库是分布式的,且拥有一个描述数据的规划。

  • 第二部分则是访问和处理数据的各种协议。

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

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

名称解释

  • dn: Distinguished Name (一条记录的位置)基准DN

  • cn: Common Name(一条记录的名字)

  • ou: Organization Unit(一条记录的组织)

  • dc: domain component(一条记录的区域)

  • sn: surname姓

  • givenname: GivenName名

  • uid: User ID

  • o: (organizationName)组织名

  • c: 国家

  • mail: 电子信箱地址

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协议的特点

  • LDAP是一种目录服务,保存在特殊的数据库中,数据的读取速度远高于写入速度。

  • LDAP对查询做了优化,读取速度优于普通关系数据库。

  • LDAP不支持事务、不能进行回滚,需要进行这些操作的应用只有选择关系数据库。

  • LDAP采用服务器/客户端模式,支持分布式结构。

  • LDAP中的条目以树形结构组织和存储。

  • LDAP基于Internet协议,直接运行在简单和通用的TCP/IP或其他可靠的传输协议层上,使连接的建立和包的处理简单、快捷,对于互联网和企业网应用都很方便。

  • LDAP协议简单,通过使用查找操作实现列表操作和读操作。

  • LDAP通过引用机制实现分布式访问,通过客户端API实现分布式操作(对于应用透明),平衡了负载。

  • LDAP实现具有低费用、易配置和易管理的特点,并提供了满足应用程序对目录服务所需求的特性。

安装环境

硬件要求

  • 标准配置:

CPU: 8核心2.0GHz

内存: 16GB

硬盘: 100GB

网卡: 2*1000Mbps

  • 最低配置:

CPU: 4核心2.0GHz

内存: 4GB

硬盘: 50GB

网卡: 100Mbps

系统要求

Linux

  • CentOS 6.9

  • CentOS 7.4

网络要求

  • 准备一个块网卡

  • 公网:支持路由器NAT模式和路由模式

OpenLDAP 安装

服务端的安装

  • yum安装OpenLDAP

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

  • centos7.4安装的rpm包

# 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 -V

配置OpenLDAP

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

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

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

  • OpenLDAP的管理员密码:

# slappasswd -s 123456

  • 修改olcDatabase={2}hdb.ldif文件

  • 修改olcDatabase={1}monitor.ldif文件

  • 验证OpenLDAP的基本配置,使用如下命令:# slaptest -u

服务启动

  • Centos6.9.下启动OpenLDAP

# service slapd start

  • Centos7.4下启动OpenLDAP

# 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数据库默认存储的路径

  • 导入基本 Schema(可以有选择的导入)

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

  • 导入OpenLDAP数据库

# 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常用命令

  • ldapadd 

-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 (这样写就是在命令行添加条目)

  • ldapsearch

-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 

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

  • 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

  • ldapmodify

-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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有