LDAP 入门知识

2023-11-05

LDAP的基本概念
LDAP是轻量目录访问协议(Lightweight Directory Access Protocol)的缩写,是一种基于 客户机/服务器模式的目录服务访问协议.其实是一话号码簿,LDAP是一种特殊的数据库。

LDAP 目录的优势
LDAP协议是跨平台的和标准的协议,因此应用程序就不用为LDAP目录放在什么样的服务器上操心了。
LDAP服务器可以用 “推”或“拉”的方法复制部分或全部数据,例如:可以把数据“推”到远程的办公室,以增加数据的安全性。复制技术是内置在LDAP服务器中的而且很容易配 置。

LDAP同步配置:
# Where to store the replica logs for database #1
#replogfile     /var/lib/ldap/master-slapd.replog

replogfile /var/lib/ldap/master-slapd.replog
replica         host=192.168.7.108:389
                binddn="cn=admin,dc=ldap,dc=monkey,dc=com,dc=de"
                bindmethod=simple credentials='password'



LDAP 允许你根据需要使用ACI(一般都称为ACL或者访问控制列表)控制对数据读和写的权 限。例如,设备管理员可以有权改变员工的工作地点和办公室号码,但是不允许改变记录中其它的域。ACI可以根据谁访问数据、访问什么数据、数据存在什么地 方以及其它对数据进 行访问控制。因为这些都是由LDAP目录服务器完成的,所以不用担心在客户端的应用程序上是否要进行安全检查。

什么 时候该用LDAP存储数据?
LDAP对于存储下面这样的信息最为有用,也就是数据需要从不同的地点读取,但是不需要经常更新。例如,这些信息存储 在LDAP目录中是十分有效的:

    * 公司员工的电话号码簿和组织结构图
    * 客户的联系信息
    * 计算机管理需要的信息,包括NIS映射、email假名,等等
    * 软件包的配置信息
    * 公用证书和安全密匙




ldap 的存储规则

Information model 描述LDAP目录结构

ldap目录结构图如下

ldap 目录的根      dc=ldap,dc=monkey,dc=com,dc=de  (基准DN)
                 /       /
ou                       users          groups
                //      /   /
ou                    user1  user2    it      other
                       //   /  /
user                             admin bird  goog   qqq



LDAP 目录树的最顶部就是根,也就是所谓的“基准DN”。
基准DN通常使用下面列出的三种格式之一
1)以X.500格式表示的基准DN :o="monkey.com", c=de
2)用公司的Internet地址表示的基准DN:o=monkey.com.de
3)用 DNS域名的不同部分组成的基准DN,这也是现在最常用的格式:dc=monkey,dc=com,dc=de

在根目录下,要把数据从逻 辑上区分开。大多数LDAP目录用OU从逻辑上把数据分开来。OU表示 “Organization Unit”,在X.500协议中是用来表示公司内部的机构:销售部、财务部, 等等。现在LDAP还保留ou=这样的命名规则,但是扩展了分类的范围,可以分类为:ou=people, ou=groups, ou=devices,等等。更低一级的OU有时用来做更细的归类。例如:LDAP目 录树(不包括单个条目)可能会是这样的:

dc=ldap,dc=monkey, dc=com,dc=de
    ou=groups
        ou=it
        ou=purchase
        ou=administration
    ou=customer
        ou=usa
        ou=asia
        ou=japan
    ou=vendor
       ou=usa
       ou=asia
       ou=japan

一个单条LDAP记录就是一个条目,即目录条目.目录条目的组成如下:
dn: uid=goog,ou=Users,dc=ldap,dc=monkey,dc=com,dc=de (条目名)
objectClass: top
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
objectClass: sambaSamAccount
cn: goog
sn: goog
uid: goog
uidNumber: 1027
gidNumber: 513
homeDirectory: /home/goog
loginShell: /bin/nologin
gecos: System User
description: System User
sambaSID: S-1-5-21-2655127250-259968048-1391940258-3054
sambaPrimaryGroupSID: S-1-5-21-2655127250-259968048-1391940258-513
displayName: System User
sambaPwdMustChange: 2147483647
sambaPasswordHistory: 00000000000000000000000000000000000000000000000000000000
 00000000
sambaAcctFlags: [U          ]
sambaLMPassword: 44EFCE164AB921CAAAD3B435B51404EE
sambaNTPassword: 32ED87BDB5FDC5E9CBA88547376818D4
sambaPwdCanChange: 1178523372
sambaPwdLastSet: 1178523372
userPassword:: e1NNRDV9Q3dOM3BEaStHcnVvMUMrUTEzZm1BU1BDRVl3PQ==


每个条目都有一个条目名, 即DN(Distinguished Name)
条目是具有区别名DN(Distinguished Name)的属性(Attribute)集合,
属性由类型(Type)和多个值(Values)组成,类型规定了属性允许存放的值的约束条件,同 时也规定了该类型的数据进行比较时规则,LDAP中是用语法(syntax)这一概念来表式属性的取值约束和比较规则的。常用的LDAP Syntax是字符型,为了检索的需要添加了BIN(二进制数据)、CIS(忽略大小写)、CES(大小写敏感)、TEL(电话型)等语法 (Syntax), 而不是关系数据库提供的整数、浮点数、日期、货币等类型,同样也不提供象关系数据库中普遍包含的大量的函数,它主要面向数据的查询服务(查询和修改操作比 一般是大于10:1),

在属性的基础上LDAP还用schema进一步约束目录条目。schema是一种类型定义机制,每种类型定义又成 为objectClass,它规定一个该类型的目录条目实例必须的和可选的属性等其它 约束。和面向对象的编程语言相似,objectClass支持继承,并且所有的objectClass都是 top的子类型,因为top定义了必须的属性objectClass,所以所有的目录条目实例都有objectClass这个属性。常见的 objectClass有:
InetOrgPerson, OrganizationalUnit, Organization
extensibleObject 允许任何属性。

Example:

objectclass ( 1.3.6.1.4.1.42.2.27.4.2.10
        NAME 'corbaContainer'
        DESC 'Container for a CORBA object'
        SUP top
        STRUCTURAL
        MUST cn )

对象类有五个组 件:OID(对象标识)、唯一名称、父对象(SUP)、任何需要的属性(MUST)和允许的属性列表(MAY)。OID 是由 LDAP 目录的内部数据库机制使用的数据标识符。 从概念上讲,它们与 IP 地址相似,因为每个对象类都必须有一个唯一数字。并且象 DNS 和 IP 之间的关系那样,由创建它们的个人进行注册,并由这些人“拥有”。有关注册 OID 的更多信息,请参阅 Internet Assigned Numbers Authority(或 IANA)。


LDAP中条目的组织一般按照地理位置和组织关系进行组织,非常的直观。 LDAP把数据存放在文件中,为提高效率可以使用基于索引的文件数据库,而不是关系数据库

专用名词解释:
DN=Distinguished Name 一个目录条目的名字
CN=Common Name 为用户名或服务器名,最长可以到80个字符,可以为中文;
OU=Organization Unit为组织单元,最多可以有四级,每级最长32个字符,可以为中文;
O=Organization 为组织名,可以3—64个字符长
C=Country 为国家名,可选,为2个字符长
L=Location 地名,通常是城市的名称
ST 州或省的名称
O=Orgnization 组织名称
OU=Orgnizagion Unit 组织单位
STREET 街道地址
UID 用户标识


LDAP 客户端和LDAP服务器端交互的一般过程

   1. LDAP客户端发起连接请求与LDAP服务器建立会话,LDAP的术语是绑定(binding)。在 建立绑定时客户端通常需要指定访问用户,以便能够访问服务器上的目录信息。
   2. LDAP客户端发出目录查询、新建、更新、删除、移动目录条目、比较目录条目等操作   3. LDAP客户端结束与服务器的会话,即解除绑定(unbinding)

LDAP的操作基本上有三类:查询、更新和认证
查询是 LDAP中最复杂的操作,它允许客户端指定查询的起点、查询的深度、属性需要满足的条件以及最终返回的目录条目所包含的属性。
查询的起点是通过 base DN来指定的,查询的深度即范围有三种baseObject, singleLevel, wholeSubtree。baseObject只对base DN指定的目录条目进行查询;singleLevel只对base DN的直接子节点进行查询; wholeSubtree对base DN(包括base DN)的所有子节点查询。属性需要满足的条件是用search filter来表达的。此外,还可以指定别名的解析(Aliase Dereferrencing)和查询的结果集大小限定和查询时间限定。
search filter的基本语法是:
attribute operator value
主要的操作符有:=, >=, <=, =*, ~=其中=*可以表示匹配子字符串,~=近似相等。例子有sn=*表示sn有值的所有目录条目。cn=J*Smi*, sn~=smit。
多 个简单filter可以用关系操作符组成复合表达式,基本语法是:
(&(filter1)(filter2)...(filtern))
(|(filter1)(filter2)...(filtern))
(!(filter))
例 子有:(|(sn=Miler)(sn=Smith)), (|(sn=Miler)(&(ou=Austin)(sn=Smith)))

更 新操作
LDAP定义了以下更新操作:
add 创建新的目录条目到目录树种
delete 删除目录条目,只有叶子节点可以删除,删除别名并不影响被引用的节点
modify 修改目录条目的属性,包括增加、删除属性
modify DN 移动目录树

认证操作
LDAP定义了以下认证操作:
bind 该操作用于在LDAP的客户端和服务器之间建立会话
unbind 该操作用于结束LDAP会话
abandon 该操作用于放弃前一个操作



LDAP权限管理

可以 通过ACL(访问控制表,Access Control List)来控制对目录的访问。
access to attrs=userPassword,sambaNTPassword,sambaLMPassword,sambaPwdLastSet,sambaPwdMustChange
        by dn="cn=admin,ou=DSA,dc=ldap,dc=monkey,dc=com,dc=de" write
        by dn="cn=smbldap-tools,ou=DSA,dc=ldap,dc=monkey,dc=com,dc=de" write
        by dn="cn=nssldap,ou=DSA,dc=ldap,dc=monkey,dc=com,dc=de" write
        by self write
        by anonymous auth (need to bind)
        by * none (no access)

LDAP+APACHE

如果让ldap 支持apache,你需要做:
1) 在编译apache 时,加上以下参数:--with-ldap --enable-ldap --enable-auth-ldap
2)配置 apache ,在httpd.conf里加上如下配置:

<Directory "/www">
    Options ExecCGI
    AllowOverride None
    Order allow,deny
    Allow from all

###### ldap config
AuthType Basic
AuthLDAPEnabled on
AuthName "Secure Access"
AuthLDAPBindDN cn=admin,dc=ldap,dc=monkey,dc=com,dc=de
AuthLDAPBindPassword xxxxxx
AuthLDAPURL ldap://192.168.7.108:389/ou=Users,dc=ldap,dc=monkey,dc=com,dc=de?uid?sub?(objectClass=*)
require valid-user
 
</Directory>


LDAP+PHP
如果让ldap 支持php,你需要做:
1)在编译php时,加上以下参数:--with-ldap=/usr/local/ldap

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

LDAP 入门知识 的相关文章

  • 通过另一个对象数组过滤对象数组

    我想通过另一个对象数组过滤对象数组 我有 2 个这样的对象数组 const array id 1 name a1 sub id 6 name a1 sub id 2 name a2 sub null id 3 name a3 sub id
  • 如何使用java实现低通滤波器

    我正在尝试用 Java 实现低通滤波器 我的要求很简单 我必须消除超出特定频率 单维 的信号 看起来巴特沃斯滤波器可以满足我的需要 现在重要的是 CPU 时间应该尽可能低 过滤器必须处理近一百万个样本 而我们的用户不喜欢等待太久 是否有任何
  • 从列表中删除自定义单词 - Python

    我有一个数据框列 如下所示 我正在考虑删除特殊字符 我希望附加标签 在列表列表中 以便我可以将列附加到现有的 df 这是我收集了这么多 但似乎不起作用 正则表达式尤其给我带来了很大的痛苦 因为它总是返回 预期的字符串或类似字节的对象 df
  • Swift:在使用过滤器函数过滤后调用indexOf时无法将类型值转换为@noescape

    在 Swift 2 中 我收到一个错误 无法转换类型值 String AnyObject 预期的参数类型 noescape String AnyObject 抛出 gt 布尔 today NSDate array String AnyObj
  • 如何根据任意条件函数过滤字典?

    我有一本要点词典 说 gt gt gt points a 3 4 b 1 2 c 5 5 d 3 3 我想创建一个新字典 其中包含 x 和 y 值小于 5 的所有点 即点 a b 和 d 根据the book http docs pytho
  • WordPress 使用 GD 图像引擎以编程方式将图像转换为 WebP 格式

    有许多 PHP 解决方案和 WP 插件 它们都带有我不想要 不需要的附加选项 即如何提供转换后的文件 存储它们的位置等 我不需要所有这些 并且正在寻找使用 GD 的纯简单代码 我不想使用插件 谢谢 编码应该什么时候发生 任何时候你知道这是钩
  • django admin list_filter“或”条件

    抱歉 如果这个问题之前已经被回答过 但我做了很多谷歌搜索但没有成功 我知道如何创建自定义list filter管理视图中的 s 例如子类化SimpleFilter 我真正想要的是一种方法 在管理列表视图上 检查 将它们组合在 OR 公式中的
  • 在Python中从字典中删除某些键的最快方法

    我正在寻找删除 python 字典中某些键的最快 有效的方法 这里有一些选项 for k in somedict keys if k startswith someprefix del somedict k or dict k v for
  • 使用嵌套数组过滤对象数组

    所以我试图在对象数组上设置嵌套过滤器 问题是过滤器应用在对象内部的另一个对象数组的键上 这是代码 const items name 123 id 1 value true arr id 1 name 456 id 2 value false
  • Solr距离过滤

    我正在尝试使用 Solr 进行距离范围搜索 我知道在5公里范围内进行搜索过滤很容易 q fq geofilt pt 45 15 93 85 sfield store d 5 我所追求的是如果我正在寻找一系列的说法 如何做同样的事情5至10公
  • ActiveAdmin:按子对象计数过滤

    在严重依赖 ActiveAdmin 的 Ruby on Rails 应用程序中 我有一个赞助商模型 它与赞助商模型关联 一sponsor可以资助很多孩子 所以一个sponsor可以有很多sponsorships 我想做的是能够在赞助商索引页
  • Primefaces 中的过滤数据表仅有效一次

    我正在尝试使用 Primefaces 过滤数据表 就像这个例子 http www primefaces org showcase ui datatableFiltering jsf 在网络浏览器中 我输入要过滤的文本 它会工作一次 但是当我
  • 如何根据开始和结束条件过滤数据?

    我试图根据依赖于连续日期的两个条件来过滤数据 我在寻找对于 5 个以上的连续日期 值低于 2 with a 缓冲期 of 值 2 到 5 最多连续 3 天 它看起来像这样 很抱歉这里的 Excel 尝试很糟糕 第 1 天到第 10 天将包括
  • 删除特定值之前和之后的特定值的运行

    我有一个包含几列的数据框 基于 activity 列 我想删除特定值 pt 的整个连续运行 但前提是它们紧邻 outside 运行之前或之后发生 在下面的简化数据中 有一次运行的 activity 为 outside 并且前后都有大块 pt
  • HttpResponse 过滤器不返回任何内容

    我编写了一个 HttpModule 用于拦截对 WebResource axd 处理程序的调用 以便我可以对 javascript 执行一些后处理 该模块包装 Response Filter 流以执行其处理并将其更改写入底层流 我遇到的问题
  • 使用与后期步骤中的 Shell 脚本中的克隆相同的 http git 凭据

    我想要自动化我们的发布过程 并且我有一个 Maven 项目的以下 Jenkins 构建作业 使用配置的 Jenkins 凭证 用户名 密码 克隆 Git 存储库 执行一些 Maven 命令以进行构建 配置一个后步骤来执行一些额外的 Git
  • 将 dataGridView 绑定到绑定列表并按文本框过滤行

    我正在开发一个 Winforms 应用程序 并且有一个已经绑定到 dataGridView 的对象的 BindingList 我还有一个 过滤器 文本框 如果它们与文本框文本不匹配 我想从 datagridview 行中过滤掉行 我想以某种
  • 从字符串开头过滤 ng-repeat 元素

    我正在尝试 AngularJS 这是我的第一次尝试 我正在尝试使用 开头为 而不是 包含 之类的内容来过滤对象数组 但我不明白如何做到这一点 假设我有一个elements像这样的数组 amount 50 amount 25 如果我想过滤5两
  • 使用另一个对象数组过滤对象数组

    这个问题与这个问题类似Jquery 过滤带循环的对象数组 https stackoverflow com questions 30998424 jquery filter array of object with loop但这次我需要使用对
  • Android ListView数组索引过滤后越界

    我认为这是专家的问题 我接到电话getView with positon 出界来自ListView数据列表 当我使用适配器过滤器时会发生这种情况 过滤器publishResults 方法使用小于原始列表的过滤列表填充数据 当新的过滤列表时似

随机推荐

  • 【编程笔试】美团2021校招笔试-通用编程题第3场(附思路及C++代码)

    导览 练习地址 小美的仓库整理 小美的跑腿代购 小美的用户名 小美的区域会议 总结 练习地址 点此前往练习 小美的仓库整理 小美是美团仓库的管理员 她会根据单据的要求按顺序取出仓库中的货物 每取出一件货物后会把剩余货物重新堆放 使得自己方便
  • Jenkins pipeline中获取执行用户的账号和邮件地址

    有时候在pipeline中需要获取执行build 的用户信息 如用户名 用于自动给用户授权另外一个工具 用户邮箱 用于自动给用户发邮件 这时可以使用插件 Buid User Var 具体pipeline 写法如下 pipeline agen
  • ListView刷新的实现(加上自己的分析)

    本文转载地址为http blog csdn net guolin blog article details 9255575 这里我们将采取的方案是使用组合View的方式 先自定义一个布局继承自LinearLayout 然后在这个布局中加入下
  • 有哪些道理是你毕业多年后才明白的?

    12 1更新 1 感情的中不存在离开谁 ta就活不下去的说法 被甩了不要一直沉溺于悲痛中 伤身 你最初喜欢一个人开始可能因为他的颜值 身高等外在条件 后面被他的才华等等所吸引 最后被他的一些品质 诸如诚实 友善等等品质所折服 如果某一天 他
  • maximum call stack size exceeded ajax,javascript - AJAX Maximum call stack size exceeded - Stack Ove...

    I have a javascript function that reads an xml From that function it calls a second function to prompt the user to updat
  • python连接hiveserver2_hiveserver2 python client

    一个hiveserver2 python客户端的例子 大部分代码来自于hue 忽略了一些必要的判断 只是做一个简单的例子 需要安装thrift以及把hive 0 10 0 cdh4 3 0 src service src gen thrif
  • python中通过super()调用父类构造方法

    可能是java写多了 当我准备通过super self xxx 这样调用父类的构造方法时候 一直报错 上网查资料 发现python的super 的机制和java还是有很大区别的 首先看一下super 函数的定义 super type obj
  • 对“端到端”原则的理解

    对 端到端 原则的理解 前些天读了两篇论文 一篇是J H Saltzer D P Read和D D Clark在80年代初发表的 The End TO End Arguments in System Design 另一篇是David D C
  • java为什么有些异常throw出去需要在函数头用throws声明,一些就不用。

    https www cnblogs com paul011 p 7850552 html
  • python可以嵌在vba中吗_在python-cod中嵌入VB宏

    要使用WinI的新模块32COM 我在网上找到了以下生成excel的代码 import win32com client as win32 class generate excel def excel self excel win32 gen
  • nginx 的进程建通信机制-共享内存/channel/信号

    nginx是跨平台的库 但以下分享均为基于linux的 nginx 进程间通信的方法 1 共享内存 linux 提供了进程间通信的的共享内存的方式 通过mmap和shmget来获取一块连续的内存 然后通过munmapheshmdt来释放这块
  • vue导出pdf

    vue项目中导出pdf 纯前端操作 有很多时候我们需要在项目中导出pdf文件 其实是利用插件将vue组件渲染成图片 然后将图片添加到PDF文档进行导出 本文用到的插件是html2canvas和jsPDF 文章目录 vue项目中导出pdf 纯
  • 力扣226. 翻转二叉树(递归)

    力扣226 翻转二叉树 递归 翻转一棵二叉树 示例 输入 4 2 7 1 3 6 9 输出 4 7 2 9 6 3 1 递归 1 定义函数功能 函数功能 即这个递归原问题是 给出一颗树 然后翻转它 所以 函数可以定义为 ListNode r
  • Python字典中的值为列表或字典的构造方法

    1 值为列表的构造方法 dic dic setdefault key append value 示例如下 gt gt dic setdefault a append 1 gt gt dic setdefault a append 2 gt
  • 关于点击UIButton弹出键盘,并且键盘的上方还需添加UITextField或者UITextView的解决方法

    最近在做一个项目的时候 有这样一个需求 点击UIButton弹出键盘 键盘的上方还需添加一个输入框 UITextField UITextView 开始的想法是直接设置输入框的 inputAccessoryView 设置后发现键盘根本就没显示
  • 视频中的物理要素——提取人们产生共情的元素

    近几年油管 各种小视频的兴起 似乎在为我们打开一扇门 研究角度来看 人们为什么对小视频如此痴迷 短暂的欲望得到满足 为什么通过视觉刺激 听觉刺激可以在观看吃播的时候 观看者也可以得到同样的对食物满足的情绪刺激 很重要的原因是 我们很需要很需
  • 格式化字符串学习

    常见的格式化字符串函数 输出 函数 基本介绍 printf 输出到 stdout fprintf 输出到指定 FILE 流 vprintf 根据参数列表格式化输出到 stdout vfprintf 根据参数列表格式化输出到指定 FILE 流
  • c++ auto类型用法总结

    一 用途 auto是c 程序设计语言的关键字 用于两种情况 1 声明变量时根据初始化表达式自动推断该变量的类型 2 声明函数时函数返回值的占位符 二 简要理解 auto可以在声明变量时根据变量初始值的类型自动为此变量选择匹配的类型 举例 对
  • 安装Zookeeper和Kafka集群

    安装Zookeeper和Kafka集群 本文介绍如何安装Zookeeper和Kafka集群 为了方便 介绍的是在一台服务器上的安装 实际应该安装在多台服务器上 但步骤是一样的 安装Zookeeper集群 下载安装包 从官网上下载安装包 cu
  • LDAP 入门知识

    LDAP的基本概念 LDAP是轻量目录访问协议 Lightweight Directory Access Protocol 的缩写 是一种基于 客户机 服务器模式的目录服务访问协议 其实是一话号码簿 LDAP是一种特殊的数据库 LDAP 目