LDAP学习

什么是LDAP?

LDAP(Lightweight Directory Access Protocol),轻量级目录访问协议。LDAP是一种通讯协议,LDAP支持TCP/IP。协议就是标准,并且是抽象的。提供LDAP服务的软件有很多商业上获得成功的,其中以MS的AD(Active Directory)和Redhat的NDS(Netscape directory server)使用最为广泛,而开源领域则是OpenLdap。
什么是OpenLDAP?

什么是OpenLDAP?OpenLDAP就是LDAP的一个具体实现,属于开源集中账号管理架构的实现,且支持众多系统版本,被广大互联网公司所采用。我们暂且把它理解成是个数据库。像数据库一样,LDAP也是有client端和server端。server端是用来存放资源,client端用来操作增删改查等操作。而我们通常说的LDAP是指运行这个数据库的服务器。而我们通常说的LDAP是指运行这个数据库的服务器。可以简单理解AD =LDAP服务器+LDAP应用。

那LDAP这种数据库有什么特殊的呢?
我们知道,像MySQL数据库,数据都是按记录一条条记录存在表中。而LDAP数据库,是树结构的,数据存储在叶子节点上,具体信息存储在条目(entry)中,条目可以看成关系数据库中的表记录,条目是具有区别名(Distinguished Name,DN)的属性(attribute),DN 是用来引用条目,DN 相当于关系数据库(Oracle/MySQL)中的主键(primary key),是唯一的。属性由类型(type)和一个或者多个值(value)组成,相当于关系数据库中字段的概念。看看下面的比喻:

假设你要树上的一个苹果(一条记录),你怎么告诉园丁它的位置呢?当然首先要说明是哪一棵树(dc,相当于MYSQL的DB),然后是从树根到那个苹果所经过的所有“分叉”(ou),最后就是这个苹果的名字(uid,相当于MySQL表主键id)。好了!这时我们可以清晰的指明这个苹果的位置了

总结一下LDAP树形数据库如下:
DC (Domain Component) :一条记录的详细位置
CN (Common Name) :一条记录所属区域 (哪一颗树)
OU (Organizational Unit) :一条记录所属组织 (哪一个分支)
CN/uid:一条记录的名字/ID (哪一个苹果名字)
LDAP目录树的最顶部就是根,也就是所谓的“基准DN"。
为什么要用LDAP目录树来存储数据,用MySQL不行吗,为什么非要搞出一个树形的数据库呢?
是因为用树形结构存储数据,查询效率更高(具体为什么,可以看一下关系型数据库索引的实现原理——B树/B+树)。在某些特定的场景下,使用树形数据库更理想。比如:需要储存大量的数据,而且数据不是经常更改,需要很快速的查找。

Docker搭建OpenLDAP服务器

拉取openldap镜像

docker pull osixia/openldap:latest

在这里插入图片描述

运行

sudo docker run -itd -p 389:389 --name ldap-server --restart=always --env LDAP_ORGANISATION="example" --env LDAP_DOMAIN="example.com" --env LDAP_ADMIN_PASSWORD="123456" --detach  osixia/openldap:latest

在这里插入图片描述
查看OpenLDAP相关信息

docker ps | grep openldap

在这里插入图片描述进入容器

docker exec -it my-openldap-container bash

在这里插入图片描述
测试配置文件
使用slaptest可以确认配置文件信息是否正确

slaptest

在这里插入图片描述
修改国内镜像源
https://www.cnblogs.com/xlizi/p/13452554.html

使用ldapsearch命令进行数据查询

查询Option介绍

Option说明
-Hldapuri,格式为ldap://机器名或者IP:端口号,不能与-h和-p同时使用
-hLDAP服务器IP或者可解析的hostname,与-p可结合使用,不能与-H同时使用
-pLDAP服务器端口号,与-h可结合使用,不能与-H同时使用
-D所绑定的服务器的DN
-x使用简单认证方式
-w绑定DN的密码,与-W二者选一
-W不输入密码,会交互式的提示用户输入密码,与-w二者选一
-f指定输入条件,在RFC 4515中有更详细的说明
-c出错后忽略当前错误继续执行,缺省情况下遇到错误即终止
-n模拟操作但并不实际执行,用于验证,常与-v一同使用进行问题定位
-v显示详细信息
-d显示debug信息,可设定级别
-s指定搜索范围, 可选值:base/one/sub/children
指定ldapuri查询
ldapsearch -x -H ldap://localhost:389 -b dc=example,dc=org -D "cn=admin,dc=example,dc=com" -w 123456

指定主机名和端口号

ldapsearch -x -h ldap://192.168.23.198 -p 389 -b    cn=example,dc=org -D "cn=admin,dc=example,dc=com"   -w 123456

指定过滤条件:按照dn进行过滤

ldapsearch -x -H ldap://localhost  -b cn=admin,dc=example,dc=org -D "cn=admin,dc=example,dc=com" -w 123456

使用模糊匹配
查看当期根下的ou信息

ldapsearch -x -H ldap://localhost  -b dc=example,dc=org -D "cn=admin,dc=example,dc=com" -w 123456 "ou=*"

使用cn=xxx,dc=xxx,ou=xxx进行过滤

ldapsearch -x -H ldap://localhost  -b dc=example,dc=org -D "cn=admin,dc=example,dc=com" -w 123456 "cn=admin"
ldapsearch -x -H ldap://localhost  -b dc=example,dc=org -D "cn=admin,dc=example,dc=com" -w 123456 "ou=People"
ldapsearch -x -H ldap://localhost  -b dc=example,dc=org -D "cn=admin,dc=example,dc=com" -w 123456 "dc=example"


返回指定条件
后面可以加sn cn title mail uid

ldapsearch -x -H ldap://localhost  -b cn=admin,dc=example,dc=org -D "cn=admin,dc=example,dc=com" -w 123456 sn cn  title mail uid

容器外查询

docker exec -it my-openldap-container ldapsearch -x -H ldap://localhost -b dc=example,dc=org -D "cn=admin,dc=example,dc=com" -w 123456

参考:
https://www.jianshu.com/p/7e4d99f6baaf

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值