ldap 订阅
轻型目录访问协议(英文:Lightweight Directory Access Protocol,缩写:LDAP,/ˈɛldæp/)是一个开放的,中立的,工业标准的应用协议,通过IP协议提供访问控制和维护分布式信息的目录信息。 展开全文
轻型目录访问协议(英文:Lightweight Directory Access Protocol,缩写:LDAP,/ˈɛldæp/)是一个开放的,中立的,工业标准的应用协议,通过IP协议提供访问控制和维护分布式信息的目录信息。
信息
所属学科
IT
外文名
Lightweight Directory Access Protocol
定    义
是一个访问在线目录服务的协议
所属领域
网络工程
中文名
轻型目录访问协议
英文简称
LDAP
轻型目录访问协议简介
轻型目录访问协议(英文:Lightweight Directory Access Protocol,缩写:LDAP,/ˈɛldæp/)是一个开放的,中立的,工业标准的应用协议,通过IP协议提供访问控制和维护分布式信息的目录信息。目录服务在开发内部网和与互联网程序共享用户、系统、网络、服务和应用的过程中占据了重要地位。例如,目录服务可能提供了组织有序的记录集合,通常有层级结构,例如公司电子邮件目录。同理,也可以提供包含了地址和电话号码的电话簿。LDAP由互联网工程任务组(IETF)的文档RFC定义,使用了描述语言ASN.1定义。最新的版本是版本3,由RFC 4511所定义。例如,一个用语言描述的LDAP的搜索如:“在公司邮件目录中搜索公司位于那什维尔名字中含有“Jessy”的有邮件地址的所有人。请返回他们的全名,电子邮件,头衔和简述。”LDAP的一个常用用途是单点登录,用户可以在多个服务中使用同一个密码,通常用于公司内部网站的登录中(这样他们可以在公司计算机上登录一次,便可以自动在公司内部网上登录)。LDAP基于X.500标准的子集。因为这个关系,LDAP有时被称为X.500-lite。
收起全文
精华内容
参与话题
问答
  • LDAP概念和原理介绍

    千次阅读 2019-10-17 19:17:30
    相信对于许多的朋友来说,可能听说过LDAP,但是实际中对LDAP的了解和具体的原理可能还比较模糊,今天就从“什么是LDAP”、“LDAP的主要产品”、“LDAP的基本模型”、“LDAP的使用案例”四个方面来做一个介绍。...

        相信对于许多的朋友来说,可能听说过LDAP,但是实际中对LDAP的了解和具体的原理可能还比较模糊,今天就从“什么是LDAP”、“LDAP的主要产品”、“LDAP的基本模型”、“LDAP的使用案例”四个方面来做一个介绍。

        我们在开始介绍之前先来看几个问题:

        • 我们日常的办公系统是不是有多个?

        • 每个系统之间是不是都有独立的账号密码?

        • 密码多了,有时候半天想不起来哪个密码对应哪个系统?

        • 每次新项目的开发,都需要重新开发和维护一套用户密码?

        • 维护多套系统的用户是不是非常头疼?

        So,如今大家再也不用为上面的的问题头疼了,因为“LDAP统一认证服务”已经帮助大家解决这些问题了。那么相信大家对“LDAP统一认证服务”是干嘛的已经有一个大概的了解了吧?那我们开始今天要讲解的内容吧!

     

    1.什么是LDAP?

    1.1 在介绍什么是LDAP之前,我们先来复习一个东西:“什么是目录服务?”

        • 目录服务是一个特殊的数据库,用来保存描述性的、基于属性的详细信息,支持过滤功能。

        • 是动态的,灵活的,易扩展的。

            如:人员组织管理,电话簿,地址簿。

    1.2 了解完目录服务后,我们再来看看LDAP的介绍:

        LDAP(Light Directory Access Portocol),它是基于X.500标准的轻量级目录访问协议。

        目录是一个为查询、浏览和搜索而优化的数据库,它成树状结构组织数据,类似文件目录一样。

        目录数据库和关系数据库不同,它有优异的读性能,但写性能差,并且没有事务处理、回滚等复杂功能,不适于存储修改频繁的数据。所以目录天生是用来查询的,就好象它的名字一样。

        LDAP目录服务是由目录数据库和一套访问协议组成的系统。

    1.3 为什么要使用

        LDAP是开放的Internet标准,支持跨平台的Internet协议,在业界中得到广泛认可的,并且市场上或者开源社区上的大多产品都加入了对LDAP的支持,因此对于这类系统,不需单独定制,只需要通过LDAP做简单的配置就可以与服务器做认证交互。“简单粗暴”,可以大大降低重复开发和对接的成本。

     

    2.LDAP的主要产品

        细心的朋友应该会主要到,LDAP的中文全称是:轻量级目录访问协议,说到底LDAP仅仅是一个访问协议,那么我们的数据究竟存储在哪里呢?来,我们一起看下下面的表格。

    厂商

    产品

    介绍

    SUN

    SUNONE Directory Server

    基于文本数据库的存储,速度快 。

    IBM

    IBM Directory Server

    基于DB2 的的数据库,速度一般。

    Novell

    Novell Directory Server

    基于文本数据库的存储,速度快, 不常用到。

    Microsoft 

    Microsoft Active Directory

    基于WINDOWS系统用户,对大数据量处理速度一般,但维护容易,生态圈大,管理相对简单。

    Opensource

    Opensource

    OpenLDAP 开源的项目,速度很快,但是非主 流应用。

         没错,这就是正常存储数据的地方,而访问这些数据就是通过我们上述所说的LDAP。相信到这里大家应该了解两者之间的关系了吧!

    3.LDAP的基本模型

        每一个系统、协议都会有属于自己的模型,LDAP也不例外,在了解LDAP的基本模型之前我们需要先了解几个LDAP的目录树概念:

    3.1 目录树概念

        • 目录树:在一个目录服务系统中,整个目录信息集可以表示为一个目录信息树,树中的每个节点是一个条目。

        • 条目:每个条目就是一条记录,每个条目有自己的唯一可区别的名称(DN)。

        • 对象类:与某个实体类型对应的一组属性,对象类是可以继承的,这样父类的必须属性也会被继承下来。

        • 属性:描述条目的某个方面的信息,一个属性由一个属性类型和一个或多个属性值组成,属性有必须属性和非必须属性。

    3.2 DC、UID、OU、CN、SN、DN、RDN

    关键字

    英文全称

    含义

    dc

    Domain Component

    域名的部分,其格式是将完整的域名分成几部分,如域名为example.com变成dc=example,dc=com(一条记录的所属位置)

    uid

    User Id

    用户ID songtao.xu(一条记录的ID)

    ou

    Organization Unit

    组织单位,组织单位可以包含其他各种对象(包括其他组织单元),如“oa组”(一条记录的所属组织)

    cn

    Common Name

    公共名称,如“Thomas Johansson”(一条记录的名称)

    sn

    Surname

    姓,如“许”

    dn

    Distinguished Name

    “uid=songtao.xu,ou=oa组,dc=example,dc=com”,一条记录的位置(唯一)

    rdn

    Relative dn

    相对辨别名,类似于文件系统中的相对路径,它是与目录树结构无关的部分,如“uid=tom”或“cn= Thomas Johansson”

     

    3.3 基本模型:

    信息模型:

    命名模型:

    功能模型:

    安全模型:

    4.LDAP的使用

      那我们是如何访问LDAP的数据库服务器呢?

     统一身份认证主要是改变原有的认证策略,使需要认证的软件都通过LDAP进行认证,在统一身份认证之后,用户的所有信息都存储在AD Server中。终端用户在需要使用公司内部服务的时候,都需要通过AD服务器的认证。

        那么程序中是如何访问的呢? 我们以PHP脚本作为例子:

    $ldapconn = ldap_connect(“10.1.8.78")
    $ldapbind = ldap_bind($ldapconn, 'username', $ldappass);
    $searchRows= ldap_search($ldapconn, $basedn, "(cn=*)");
    $searchResult = ldap_get_entries($ldapconn, $searchRows);
    ldap_close($ldapconn);
    

        • 连接到LDAP服务器;

        • 绑定到LDAP服务器;

        • 在LDAP服务器上执行所需的任何操作;

        • 释放LDAP服务器的连接;

     

    展开全文
  • LDAP详解

    千次阅读 2017-12-10 22:11:36
    什么是LDAPLDAP的英文全称是Lightweight Directory Access Protocol,一般都简称为LDAP。它是基于X.500标准的,  但是简单多了并且可以根据需要定制。与X.500不同,LDAP支持TCP/IP,这对访问Internet是必须的...
    什么是LDAP? 
    LDAP的英文全称是Lightweight Directory Access Protocol,一般都简称为LDAP。它是基于X.500标准的, 
    但是简单多了并且可以根据需要定制。与X.500不同,LDAP支持TCP/IP,这对访问Internet是必须的。LDAP 
    的核心规范在RFC中都有定义,所有与LDAP相关的RFC都可以在LDAPman RFC网页中找到。现在LDAP技术不仅 
    发展得很快而且也是激动人心的。在企业范围内实现LDAP可以让运行在几乎所有计算机平台上的所有的应 
    用程序从LDAP目录中获取信息。LDAP目录中可以存储各种类型的数据:电子邮件地址、邮件路由信息、人力 
    资源数据、公用密匙、联系人列表,等等。通过把LDAP目录作为系统集成中的一个重要环节,可以简化员工 
    在企业内部查询信息的步骤,甚至连主要的数据源都可以放在任何地方。 

    LDAP目录的优势 

    如果需要开发一种提供公共信息查询的系统一般的设计方法可能是采用基于WEB的数据库设计方式,即前端 
    使用浏览器而后端使用WEB服务器加上关系数据库。后端在Windows的典型实现可能是Windows NT + IIS + Acess 
    数据库或者是SQL服务器,IIS和数据库之间通过ASP技术使用ODBC进行连接,达到通过填写表单查询数据的功能; 

    后端在Linux系统的典型实现可能是Linux+ Apache + postgresql,Apache和数据库之间通过PHP3提供的函数进 
    行连接。使用上述方法的缺点是后端关系数据库的引入导致系统整体的性能降低和系统的管理比较繁琐,因为需 
    要不断的进行数据类型的验证和事务的完整性的确认;并且前端用户对数据的控制不够灵活,用户权限的设置一 
    般只能是设置在表一级而不是设置在记录一级。 

    目录服务的推出主要是解决上述数据库中存在的问题。目录与关系数据库相似,是指具有描述性的基于属性的记 
    录集合,但它的数据类型主要是字符型,为了检索的需要添加了BIN(二进制数据)、CIS(忽略大小写)、CES 
    (大小写敏感)、TEL(电话型)等语法(Syntax),而不是关系数据库提供的整数、浮点数、日期、货币等类型, 
    同样也不提供象关系数据库中普遍包含的大量的函数,它主要面向数据的查询服务(查询和修改操作比一般是大于 
    10:1),不提供事务的回滚(rollback)机制,它的数据修改使用简单的锁定机制实现All-or-Nothing,它的目标 
    是快速响应和大容量查询并且提供多目录服务器的信息复制功能。 

    现在该说说LDAP目录到底有些什么优势了。现在LDAP的流行是很多因数共同作用的结果。可能LDAP最大的优势是: 
    可以在任何计算机平台上,用很容易获得的而且数目不断增加的LDAP的客户端程序访问LDAP目录。而且也很容易 
    定制应用程序为它加上LDAP的支持。 

    LDAP协议是跨平台的和标准的协议,因此应用程序就不用为LDAP目录放在什么样的服务器上操心了。实际上,LDAP 
    得到了业界的广泛认可,因为它是Internet的标准。产商都很愿意在产品中加入对LDAP的支持,因为他们根本不用 
    考虑另一端(客户端或服务端)是怎么样的。LDAP服务器可以是任何一个开发源代码或商用的LDAP目录服务器(或 
    者还可能是具有LDAP界面的关系型数据库),因为可以用同样的协议、客户端连接软件包和查询命令与LDAP服务器 
    进行交互。与LDAP不同的是,如果软件产商想在软件产品中集成对DBMS的支持,那么通常都要对每一个数据库服务 
    器单独定制。不象很多商用的关系型数据库,你不必为LDAP的每一个客户端连接或许可协议付费 大多数的LDAP服务 
    器安装起来很简单,也容易维护和优化。 

    LDAP服务器可以用“推”或“拉”的方法复制部分或全部数据,例如:可以把数据“推”到远程的办公室,以增加 
    数据的安全性。复制技术是内置在LDAP服务器中的而且很容易配置。如果要在DBMS中使用相同的复制功能,数据库 
    产商就会要你支付额外的费用,而且也很难管理。 

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

    LDAP(Lightweight Directory Acess Protocol)是目录服务在TCP/IP上的实现(RFC 1777 V2版和RFC 2251 

    V3版)。它是对X500的目录协议的移植,但是简化了实现方法,所以称为轻量级的目录服务。在LDAP中目录是按照 
    树型结构组织,目录由条目(Entry)组成,条目相当于关系数据库中表的记录;条目是具有区别名DN(Distinguished 

    Name)的属性(Attribute)集合,DN相当于关系数据库表中的关键字(Primary 

    Key);属性由类型(Type)和多个值(Values)组成,相当于关系数据库中的域(Field)由域名和数据类型组成, 
    只是为了方便检索的需要,LDAP中的Type可以有多个Value,而不是关系数据库中为降低数据的冗余性要求实现的各 
    个域必须是不相关的。LDAP中条目的组织一般按照地理位置和组织关系进行组织,非常的直观。LDAP把数据存放在 
    文件中,为提高效率可以使用基于索引的文件数据库,而不是关系数据库。LDAP协议集还规定了DN的命名方法、存 
    取控制方法、搜索格式、复制方法、URL格式、开发接口等 

    LDAP对于这样存储这样的信息最为有用,也就是数据需要从不同的地点读取,但是不需要经常更新。 

    例如,这些信息存储在LDAP目录中是十分有效的: 

    l 公司员工的电话号码簿和组织结构图 

    l 客户的联系信息 

    l 计算机管理需要的信息,包括NIS映射、email假名,等等 

    l 软件包的配置信息 

    l 公用证书和安全密匙 

    什么时候该用LDAP存储数据 

    大多数的LDAP服务器都为读密集型的操作进行专门的优化。因此,当从LDAP服务器中读取数据的时候会比从专门为 
    OLTP优化的关系型数据库中读取数据快一个数量级。也是因为专门为读的性能进行优化,大多数的LDAP目录服务器 
    并不适合存储需要需要经常改变的数据。例如,用LDAP服务器来存储电话号码是一个很好的选择,但是它不能作为 
    电子商务站点的数据库服务器。 

    如果下面每一个问题的答案都是“是”,那么把数据存在LDAP中就是一个好主意。 

    l 需要在任何平台上都能读取数据吗? 

    l 每一个单独的记录项是不是每一天都只有很少的改变? 

    l 可以把数据存在平面数据库(flat database)而不是关系型数据库中吗?换句话来说,也就是不管什么范式不 
    范式的,把所有东西都存在一个记录中(差不多只要满足第一范式)。 

    最后一个问题可能会唬住一些人,其实用平面数据库去存储一些关系型的数据也是很一般的。例如,一条公司员工 
    的记录就可以包含经理的登录名。用LDAP来存储这类信息是很方便的。一个简单的判断方法:如果可以把保数据存 
    在一张张的卡片里,就可以很容易地把它存在LDAP目录里。 


    安全和访问控制 

    LDAP提供很复杂的不同层次的访问控制或者ACI。因这些访问可以在服务器端控制,这比用客户端的软件保证数据的 
    安全可安全多了。 

    用LDAP的ACI,可以完成: 

    l 给予用户改变他们自己的电话号码和家庭地址的权限,但是限制他们对其它数据(如,职务名称,经理的登录名, 
    等等)只有“只读”权限。 

    l 给予“HR-admins"组中的所有人权限以改变下面这些用户的信息:经理、工作名称、员工号、部门名称和部门号。 
    但是对其它域没有写权限。 

    l 禁止任何人查询LDAP服务器上的用户口令,但是可以允许用户改变他或她自己的口令。 

    l 给予经理访问他们上级的家庭电话的只读权限,但是禁止其他人有这个权限。 

    l 给予“host-admins"组中的任何人创建、删除和编辑所有保存在LDAP服务器中的与计算机主机有关的信息 

    l 通过Web,允许“foobar-sales"组中的成员有选择地给予或禁止他们自己读取一部分客户联系数据的读权限。这 
    将允许他们把客户联系信息下载到本地的笔记本电脑或个人数字助理(PDA)上。(如果销售人员的软件都支持LDAP, 
    这将非常有用) 

    l 通过Web,允许组的所有者删除或添加他们拥有的组的成员。例如:可以允许销售经理给予或禁止销售人员改变Web 
    页的权限。也可以允许邮件假名(mail aliase)的所有者不经过IT技术人员就直接从邮件假名中删除或添加用户。 
    “公用”的邮件列表应该允许用户从邮件假名中添加或删除自己(但是只能是自己)。也可以对IP地址或主机名加以 
    限制。例如,某些域只允许用户IP地址以192.168.200.*开头的有读的权限,或者用户反向查找DNS得到的主机名必须 
    为*.foobar.com。 

    LDAP目录树的结构 

    LDAP目录以树状的层次结构来存储数据。如果你对自顶向下的DNS树或UNIX文件的目录树比较熟悉,也就很容易掌握 
    LDAP目录树这个概念了。就象DNS的主机名那样,LDAP目录记录的标识名(Distinguished Name,简称DN)是用来读取 
    单个记录,以及回溯到树的顶部。后面会做详细地介绍。 

    为什么要用层次结构来组织数据呢?原因是多方面的。下面是可能遇到的一些情况: 

    l 如果你想把所有的美国客户的联系信息都“推”到位于到西雅图办公室(负责营销)的LDAP服务器上,但是你不想 
    把公司的资产管理信息“推”到那里。 

    l 你可能想根据目录树的结构给予不同的员工组不同的权限。在下面的例子里,资产管理组对“asset-mgmt"部分有完 
    全的访问权限,但是不能访问其它地方。 

    l 把LDAP存储和复制功能结合起来,可以定制目录树的结构以降低对WAN带宽的要求。位于西雅图的营销办公室需要每 
    分钟更新的美国销售状况的信息,但是欧洲的销售情况就只要每小时更新一次就行了。 

    刨根问底:基准DN 

    LDAP目录树的最顶部就是根,也就是所谓的“基准DN"。基准DN通常使用下面列出的三种格式之一。假定我在名为FooBar 
    的电子商务公司工作,这家公司在Internet上的名字是foobar.com。 

    o="FooBar, Inc.", c=US 

    (以X.500格式表示的基准DN) 

    在这个例子中,o=FooBar, Inc. 表示组织名,在这里就是公司名的同义词。c=US 表示公司的总部在美国。以前,一般 
    都用这种方式来表示基准DN。但是事物总是在不断变化的,现在所有的公司都已经(或计划)上Internet上。随着 
    Internet的全球化,在基准DN中使用国家代码很容易让人产生混淆。现在,X.500格式发展成下面列出的两种格式。 

    o=foobar.com 

    (用公司的Internet地址表示的基准DN) 

    这种格式很直观,用公司的域名作为基准DN。这也是现在最常用的格式。 

    dc=foobar, dc=com 

    (用DNS域名的不同部分组成的基准DN) 

    就象上面那一种格式,这种格式也是以DNS域名为基础的,但是上面那种格式不改变域名(也就更易读),而这种格式 
    把域名:foobar.com分成两部分 dc=foobar, dc=com。在理论上,这种格式可能会更灵活一点,但是对于最终用户来说 
    也更难记忆一点。考虑一下foobar.com这个例子。当foobar.com和gizmo.com合并之后,可以简单的把“dc=com"当作基 
    准DN。把新的记录放到已经存在的dc=gizmo, dc=com目录下,这样就简化了很多工作(当然,如果foobar.com和wocket.edu 
    合并,这个方法就不能用了)。如果LDAP服务器是新安装的,我建议你使用这种格式。再请注意一下,如果你打算使用活动 
    目录(Actrive Directory),Microsoft已经限制你必须使用这种格式。 

    更上一层楼:在目录树中怎么组织数据 

    在UNIX文件系统中,最顶层是根目录(root)。在根目录的下面有很多的文件和目录。象上面介绍的那样,LDAP目录也是 
    用同样的方法组织起来的。 

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

    dc=foobar, dc=com 

    ou=customers 

    ou=asia 

    ou=europe 

    ou=usa 

    ou=employees 

    ou=rooms 

    ou=groups 

    ou=assets-mgmt 

    ou=nisgroups 

    ou=recipes 

    单独的LDAP记录 

    DN是LDAP记录项的名字 

    在LDAP目录中的所有记录项都有一个唯一的“Distinguished Name",也就是DN。每一个LDAP记录项的DN是由两个部分 
    组成的:相对DN(RDN)和记录在LDAP目录中的位置。 

    RDN是DN中与目录树的结构无关的部分。在LDAP目录中存储的记录项都要有一个名字,这个名字通常存在cn(Common Name) 
    这个属性里。因为几乎所有的东西都有一个名字,在LDAP中存储的对象都用它们的cn值作为RDN的基础。如果我把最喜欢的 
    吃燕麦粥食谱存为一个记录,我就会用cn=Oatmeal Deluxe作为记录项的RDN。 

    l 我的LDAP目录的基准DN是dc=foobar,dc=com 

    l 我把自己的食谱作为LDAP的记录项存在ou=recipes 

    l 我的LDAP记录项的RDN设为cn=Oatmeal Deluxe 

    上面这些构成了燕麦粥食谱的LDAP记录的完整DN。记住,DN的读法和DNS主机名类似。下面就是完整的DN: 

    cn=Oatmeal Deluxe,ou=recipes,dc=foobar,dc=com 

    举一个实际的例子来说明DN 

    现在为公司的员工设置一个DN。可以用基于cn或uid(User ID),作为典型的用户帐号。例如,FooBar的员工Fran Smith 
    (登录名:fsmith)的DN可以为下面两种格式: 

    uid=fsmith,ou=employees,dc=foobar,dc=com 

    (基于登录名) 

    LDAP(以及X.500)用uid表示“User ID",不要把它和UNIX的uid号混淆了。大多数公司都会给每一个员工唯一的登录名, 
    因此用这个办法可以很好地保存员工的信息。你不用担心以后还会有一个叫Fran Smith的加入公司,如果Fran改变了她的 
    名字(结婚?离婚?或宗教原因?),也用不着改变LDAP记录项的DN。 

    cn=Fran Smith,ou=employees,dc=foobar,dc=com 

    (基于姓名) 

    可以看到这种格式使用了Common Name(CN)。可以把Common Name当成一个人的全名。这种格式有一个很明显的缺点就是: 
    如果名字改变了,LDAP的记录就要从一个DN转移到另一个DN。但是,我们应该尽可能地避免改变一个记录项的DN。 

    定制目录的对象类型 

    你可以用LDAP存储各种类型的数据对象,只要这些对象可以用属性来表示,下面这些是可以在LDAP中存储的一些信息: 

    l 员工信息:员工的姓名、登录名、口令、员工号、他的经理的登录名,邮件服务器,等等。 

    l 物品跟踪信息:计算机名、IP地址、标签、型号、所在位置,等等。 

    l 客户联系列表:客户的公司名、主要联系人的电话、传真和电子邮件,等等。 

    l 会议厅信息:会议厅的名字、位置、可以坐多少人、电话号码、是否有投影机。 

    l 食谱信息:菜的名字、配料、烹调方法以及准备方法。 

    因为LDAP目录可以定制成存储任何文本或二进制数据,到底存什么要由你自己决定。LDAP目录用对象类型 
    (object classes)的概念来定义运行哪一类的对象使用什么属性。在几乎所有的LDAP服务器中,你都要根据 
    自己的需要扩展基本的LDAP目录 
    的功能,创建新的对象类型或者扩展现存的对象类型。 

    LDAP目录以一系列“属性对”的形式来存储记录项,每一个记录项包括属性类型和属性值(这与关系型数据库 
    用行和列来存取数据有根本的不同)。下面是我存在LDAP目录中的一部分食谱记录: 

    dn: cn=Oatmeal Deluxe, ou=recipes, dc=foobar, dc=com 

    cn: Instant Oatmeal Deluxe 

    recipeCuisine: breakfast 

    recipeIngredient: 1 packet instant oatmeal 

    recipeIngredient: 1 cup water 

    recipeIngredient: 1 pinch salt 

    recipeIngredient: 1 tsp brown sugar 

    recipeIngredient: 1/4 apple, any type 

    请注意上面每一种配料都作为属性recipeIngredient值。LDAP目录被设计成象上面那样为一个属性保存多个值的, 
    而不是在每一个属性的后面用逗号把一系列值分开。 

    因为用这样的方式存储数据,所以数据库就有很大的灵活性,不必为加入一些新的数据就重新创建表和索引。更 
    重要的是,LDAP目录不必花费内存或硬盘空间处理“空”域,也就是说,实际上不使用可选择的域也不会花费你 
    任何资源。 
    作为例子的一个单独的数据项 

    让我们看看下面这个例子。我们用Foobar, Inc.的员工Fran Smith的LDAP记录。这个记录项的格式是LDIF,用来 
    导入和导出LDAP目录的记录项。 

    dn: uid=fsmith, ou=employees, dc=foobar, dc=com 

    objectclass: person 

    objectclass: organizationalPerson 

    objectclass: inetOrgPerson 

    objectclass: foobarPerson 

    uid: fsmith 

    givenname: Fran 

    sn: Smith 

    cn: Fran Smith 

    cn: Frances Smith 

    telephonenumber: 510-555-1234 

    roomnumber: 122G 

    o: Foobar, Inc. 

    mailRoutingAddress: 
    fsmith@foobar.com 

    mailhost: mail.foobar.com 

    userpassword: {crypt}3x1231v76T89N 

    uidnumber: 1234 

    gidnumber: 1200 

    homedirectory: /home/fsmith 

    loginshell: /usr/local/bin/bash 

    属性的值在保存的时候是保留大小写的,但是在默认情况下搜索的时候是不区分大小写的。某些特殊的属性 
    (例如,password)在搜索的时候需要区分大小写。 

    让我们一点一点地分析上面的记录项。 

    dn: uid=fsmith, ou=employees, dc=foobar, dc=com 

    这是Fran的LDAP记录项的完整DN,包括在目录树中的完整路径。LDAP(和X.500)使用uid(User ID),不要 
    把它和UNIX的uid号混淆了。 

    objectclass: person 

    objectclass: organizationalPerson 

    objectclass: inetOrgPerson 

    objectclass: foobarPerson 

    可以为任何一个对象根据需要分配多个对象类型。person对象类型要求cn(common name)和sn(surname) 
    这两个域不能为空。persion对象类型允许有其它的可选域,包括givenname、telephonenumber,等等。 
    organizational Person给person加入更多的可选域,inetOrgPerson又加入更多的可选域(包括电子邮件信息)。 
    最后,foobarPerson是为Foobar定制的对象类型,加入了很多定制的属性。 

    uid: fsmith 

    givenname: Fran 

    sn: Smith 

    cn: Fran Smith 

    cn: Frances Smith 

    telephonenumber: 510-555-1234 

    roomnumber: 122G 

    o: Foobar, Inc. 

    以前说过了,uid表示User ID。当看到uid的时候,就在脑袋里想一想“login"。 

    请注意CN有多个值。就象上面介绍的,LDAP允许某些属性有多个值。为什么允许有多个值呢?假定你在用 
    公司的LDAP服务器查找Fran的电话号码。你可能只知道她的名字叫Fran,但是对人力资源处的人来说她的 
    正式名字叫做Frances。因为保存了她的两个名字,所以用任何一个名字检索都可以找到Fran的电话号码、 
    电子邮件和办公房间号,等等。 

    mailRoutingAddress: 
    fsmith@foobar.com 

    mailhost: mail.foobar.com 

    就象现在大多数的公司都上网了,Foobar用Sendmail发送邮件和处理外部邮件路由信息。Foobar把所有用户 
    的邮件信息都存在LDAP中。最新版本的Sendmail支持这项功能。 

    Userpassword: {crypt}3x1231v76T89N 

    uidnumber: 1234 

    gidnumber: 1200 

    gecos: Frances Smith 

    homedirectory: /home/fsmith 

    loginshell: /usr/local/bin/bash 

    注意,Foobar的系统管理员把所有用户的口令映射信息也都存在LDAP中。FoobarPerson类型的对象具有这 
    种能力。再注意一下,用户口令是用UNIX的口令加密格式存储的。UNIX的uid在这里为uidnumber。提醒你一下, 
    关于如何在LDAP中保存NIS信息,有完整的一份RFC。在以后的文章中我会谈一谈NIS的集成。 

    LDAP复制 

    LDAP服务器可以使用基于“推”或者“拉”的技术,用简单或基于安全证书的安全验证,复制一部分或者所 
    有的数据。 

    例如,Foobar有一个“公用的”LDAP服务器,地址为ldap.foobar.com,端口为389。Netscape Communicator 
    的电子邮件查询功能、UNIX的“ph"命令要用到这个服务器,用户也可以在任何地方查询这个服务器上的员工 
    和客户联系信息。公司的主LDAP服务器运行在相同的计算机上,不过端口号是1389。 

    你可能即不想让员工查询资产管理或食谱的信息,又不想让信息技术人员看到整个公司的LDAP目录。为了解决 
    这个问题,Foobar有选择地把子目录树从主LDAP服务器复制到“公用”LDAP服务器上,不复制需要隐藏的信息。 
    为了保持数据始终是最新的,主目录服务器被设置成即时“推”同步。这些种方法主要是为了方便,而不是安全, 
    因为如果有权限的用户想查询所有的数据,可以用另一个LDAP端口。 

    假定Foobar通过从奥克兰到欧洲的低带宽数据的连接用LDAP管理客户联系信息。可以建立从ldap.foobar.com:1389 
    到munich-ldap.foobar.com:389的数据复制,象下面这样: 

    periodic pull: ou=asia,ou=customers,o=sendmail.com 

    periodic pull: ou=us,ou=customers,o=sendmail.com 

    immediate push: ou=europe,ou=customers,o=sendmail.com 

    “拉”连接每15分钟同步一次,在上面假定的情况下足够了。“推”连接保证任何欧洲的联系信息发生了变化就 
    立即被“推”到Munich。 
    用上面的复制模式,用户为了访问数据需要连接到哪一台服务器呢?在Munich的用户可以简单地连接到本地服务 
    器。如果他们改变了数据,本地的LDAP服务器就会把这些变化传到主LDAP服务器。然后,主LDAP服务器把这些变化 
    “推”回本地的“公用”LDAP服务器保持数据的同步。这对本地的用户有很大的好处,因为所有的查询(大多数是读)都在本地的服务器上进行,速度非常快。当需要改变信息的时候,最终用户不需要重新配置客户端的软件,因为LDAP目录服务器为他们完成了所有的数据交换工作。
    展开全文
  • LDAP (OpenLDAP)+ CentOS7.5 部署与实践

    千人学习 2019-01-07 10:30:24
    本套系统旨在 ” 带领大家搭建起公司内部的一套高可用支持TLS/SSL加密的统一账号管理系统OpenLDAP” ,但同样也如实告诉大家一点:这个教程并没有特深入的讲解 OpenLDAP 的理论知识,更加深入的学习,任重而道远,让...
  • LDAP入门使用

    千次阅读 2018-09-20 10:05:14
    LDAP介绍 一个为查询、浏览和搜索而优化的专业分布式数据库,它呈树状结构组织数据,和关系数据库不同,它有优异的读性能,但写性能差,并且没有事务处理、回滚等复杂功能,不适于存储修改频繁的数据,所以大多数...
    • LDAP介绍

    一个为查询、浏览和搜索而优化的专业分布式数据库,它呈树状结构组织数据,和关系数据库不同,它有优异的读性能,但写性能差,并且没有事务处理、回滚等复杂功能,不适于存储修改频繁的数据,所以大多数是用来查询的。

    LDAP组织数据方式:

    在这里插入图片描述

    dn :一条记录的详细位置
    dc :一条记录所属区域 (哪一颗树)
    ou :一条记录所属组织 (哪一个分支)
    cn/uid:一条记录的名字/ID (哪一个苹果名字)

    • JXplorer使用

    JXplorer连接LDAP,相当于是Navicat连接Mysql
    填写IP Port DN 用户名 密码后就可以看到数据库内容

    在这里插入图片描述

    • LDAP查询数据
    public String JNDILookup() {
        // 连接LDAP库
        Hashtable env = new Hashtable<>();
        String url = "ldap://xx.xx.xx.xx:389/";
        String searchBase = "OU=xx,DC=xx,DC=xx,DC=com,DC=cn";
        String user = "xxx";
        String password = "xxx";
        env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"); //LDAP工厂
        env.put(Context.SECURITY_AUTHENTICATION, "simple"); //LDAP访问安全级别
        env.put(Context.PROVIDER_URL, url);
        env.put(Context.SECURITY_PRINCIPAL, user);
        env.put(Context.SECURITY_CREDENTIALS, password);
        env.put("java.naming.ldap.attributes.binary", "objectSid objectGUID");
        LdapContext ctx = null;
        try {
          ctx = new InitialLdapContext(env, null);
    
          // 根据条件查询
          String cn = "xxx";
          String filter = "(&(objectClass=top)(objectClass=organizationalPerson)(cn=" + cn + "))";
          //String filter = "(&(objectClass=top)(objectClass=organizationalPerson))";
          SearchControls searchControls = new SearchControls();
          String[] attrNames = {"cn", "mail"};
          searchControls.setSearchScope(SearchControls.SUBTREE_SCOPE);
          //设置将被返回的Attribute
          searchControls.setReturningAttributes(attrNames);
          NamingEnumeration<SearchResult> search = ldapCtx.search(searchBase, filter.toString(), searchControls);
          while (search.hasMore()) {
            SearchResult result = search.next();
            NamingEnumeration<? extends Attribute> attrs = result.getAttributes().getAll();
            while (attrs.hasMore()) {
              Attribute attr = attrs.next();
              System.out.println(attr.getID() + "=====" + attr.get());
            }
            System.out.println("===========");
          }
        } catch (NamingException e) {
          e.printStackTrace();
        } finally {
          if (ctx != null) {
            try {
              ctx.close();
            } catch (NamingException e) {
            }
          }
    
        }
        return "返回信息";
      }
    
    • LdapQueryBuilder类封装使用

    在application.yml中写入LDAP相关的配置信息,通过@Value注解赋值

    @Configuration
    public class LdapConfig {
      @Autowired
      private GlobalSettings globalSettings;
    
      @Bean
      @Primary
      public LdapContextSource ldapContextSource() {
        LdapContextSource ldapContextSource = new LdapContextSource();
        ldapContextSource.setUrl(globalSettings.getLdapUrl());
        ldapContextSource.setBase(globalSettings.getLdapBase());
        ldapContextSource.setUserDn(globalSettings.getLdapUser());
        ldapContextSource.setPassword(globalSettings.getLdapPass());
        return ldapContextSource;
      }
    
      @Bean
      @Primary
      // LdapTemplate:连接LDAP库
      public LdapTemplate ldapTemplate() {
        LdapTemplate ldapTemplate = new LdapTemplate();
        ldapTemplate.setContextSource(ldapContextSource());
        return ldapTemplate;
      }
    }
    

    通过浏览器输入ldap中某一个用户的登录信息后获取其他信息,首先注入ldapTemplate

    public HashMap<Object, Object> login(String userid, String password) {
        HashMap<Object, Object> hashMap = new HashMap<>();
        try {
          // 查询的用户条件
          ContainerCriteria containerCriteria = LdapQueryBuilder.query()
                  .base(LdapUtils.emptyLdapName())
                  .where("objectClass").is("person")
                  .and("sAMAccountName").is(userid);
          LdapName ldapName = ldapTemplate.authenticate(containerCriteria, password, (ctx, ldapEntryIdentification) -> ldapEntryIdentification.getRelativeName());
          // 查询ldap中字段
          final String[] ATTRS = {"sAMAccountName", "mail", "name"};
          User lookupedUser = ldapTemplate.lookup(ldapName, ATTRS, new AbstractContextMapper<User>() {
            @Override
            protected User doMapFromContext(DirContextOperations ctx) {
              User user = new User();
              user.setUsername(ctx.getStringAttribute(ATTRS[0]));
              user.setEmail(ctx.getStringAttribute(ATTRS[1]));
              user.setName(ctx.getStringAttribute(ATTRS[2]));
              return user;
            }
          });
          hashMap.put("isSuccess",true);
          hashMap.put("info",lookupedUser.toString());
          return  hashMap;
        } 
    }
    

    没有不够学的知识呀,最近这种感慨是越来越多了,每天都是新的东西,这让一个很久不接触新技术的人很是不习惯呀,但没办法,我需要工作,需要生存。

    展开全文
  • LDAP-账号管理系统

    千次阅读 2019-12-12 16:02:18
    LDAP-账号管理系统LDAP-账号管理系统添加用户导入ldap数据库生成基本框架:生成用户和组的数据文件:配置客户端 ldap-client在ldap-server配置NFS,共享ldap用户的家...在centos7环境,搭建ldap-server: ## 1. 部...

    LDAP-账号管理系统

    在centos7环境,搭建ldap-server:

    ## 1. 部署ldap-S
    [root@ldapS ~]# yum install -y openldap openldap-servers openldap-clients openldap-devel migrationtools 
    
    首先 生成加密密码:
    [root@ldapS ~]# slappasswd 
    New password: 
    Re-enter new password: 
    {SSHA}nuH+UiLFv78g87XL3zybnwK/WjeTWU/n
    
    将dc=do-main 改为 dc=sgy(自定义名)
    [root@ldapS /etc/openldap/slapd.d/cn=config]# vim olcDatabase\=\{1\}monitor.ldif 
      7  al,cn=auth" read by dn.base="cn=Manager,dc=sgy,dc=com" read by * none
    	##增加管理员信息,自定义第一个dc= 
    
    将dc=do-main 改为 dc=sgy(自定义名)
    [root@ldapS /etc/openldap/slapd.d/cn=config]# vim olcDatabase\=\{2\}hdb.ldif
      8 olcSuffix: dc=sgy,dc=com
    	##基准DN
      9 olcRootDN: cn=Manager,dc=sgy,dc=com
    	##管理员用户的DN
     19 olcRootPW:{SSHA}nuH+UiLFv78g87XL3zybnwK/WjeTWU/n	# 添加这行,设置之前生成的密码
    	##管理员用户的密码
    
    准备数据库初始文件:
    [root@ldapS /var/lib/ldap]# cp /usr/share/openldap-servers/DB_CONFIG.example .
    [root@ldapS /var/lib/ldap]# mv DB_CONFIG.example DB_CONFIG
    给当前目录设置权限 . 
    [root@ldapS /var/lib/ldap]# chown -R ldap:ldap .	<---这有个点
    
    [root@ldapS ~]# systemctl start slapd
    [root@ldapS ~]# systemctl enable slapd
    
    [root@ldapS ~]# netstat -antpl | grep slapd
    tcp        0      0 0.0.0.0:389   0.0.0.0:*   LISTEN      1133/slapd
    tcp6       0      0 :::389        :::*        LISTEN      1133/slapd
    
    将配置加入数据库的schemas(模式)中:
    [root@ldapS ~]# lftp 172.16.0.99
    lftp 172.16.0.99:~> cd scripts/     
    lftp 172.16.0.99:/scripts> get add_config-to_ldif.sh 
    
    [root@ldapS ~]# chmod +x add_config-to_ldif.sh 
    [root@ldapS ~]# ./add_config-to_ldif.sh
    	没有报错就可以。
    

    添加用户

    写个脚本,添加10个用户:
    [root@ldapS ~]# vim useradd.sh
    #!/bin/bash
    # 添加10个用户
    
    if [ ! -d /ldaphome ]
        then
        mkdir /ldaphome
    fi
    echo -e "username\tpassword" > /root/userfile
    for i in `seq 1 10`
    do
        id ldap${i} &> /dev/null
        if [ $? -ne 0 ]
            then
            useradd ldap${i} -d /ldaphome/ldap${i}
            pass=$(tr -dc a-zA-Z0-9_# < /dev/urandom | head -c 6 | xargs)
            echo $pass | passwd --stdin ldap$i &> /dev/null
            echo -e "ldap${i}\t${pass}" >> /root/userfile
        fi
    done
    
    [root@ldapS ~]# cat userfile 
    username	password
    ldap1	#2cutH
    ldap2	nhdVZj
    ldap3	VwDhB_
    ldap4	vqnyTj
    ldap5	J_lYiM
    ldap6	lZSBap
    ldap7	WgC6#G
    ldap8	IObNFD
    ldap9	_mVFFV
    ldap10	IGveyi
    
    [root@ldapS ~]# tail /etc/passwd
    [root@ldapS ~]# tail /etc/shadow
    

    导入ldap数据库

    将这10个用户的信息,导入到ldap数据库里:
    [root@ldapS ~]# cd /var/lib/ldap/
    [root@ldapS /var/lib/ldap]# ls
    	== /var/lib/mysql
    
    [root@ldapS ~]# tail /etc/passwd > /tmp/passwd
    [root@ldapS ~]# tail /etc/shadow > /tmp/shadow
    [root@ldapS ~]# tail /etc/group  > /tmp/group
    
    编辑配置文件:
    [root@ldapS ~]# cd /usr/share/migrationtools/
    [root@ldapS /usr/share/migrationtools]# ls
    
    migrate_common.ph文件主要是用于生成ldif文件使用
    [root@ldapS /usr/share/migrationtools]# vim migrate_common.ph
     61     $NAMINGCONTEXT{'group'}             = "ou=Groups";
     71 $DEFAULT_MAIL_DOMAIN = "sgy.com";
     74 $DEFAULT_BASE = "dc=sgy,dc=com";
     90 $EXTENDED_SCHEMA = 1;
    
    [root@ldapS /usr/share/migrationtools]# vim migrate_passwd.pl
    188     open(SHADOW, "/tmp/shadow") || return;
    

    生成基本框架:

    [root@ldapS /usr/share/migrationtools]# ./migrate_base.pl > /tmp/base.ldif
    
    编辑配置文件,只保留sgy(自定义的dc),People,Groups,其它都删除。
    [root@ldapS /usr/share/migrationtools]# vim /tmp/base.ldif
    dn: dc=sgy,dc=com
    dc: sgy
    objectClass: top
    objectClass: domain
    objectClass: domainRelatedObject
    associatedDomain: sgy.com
    
    dn: ou=People,dc=sgy,dc=com
    ou: People
    objectClass: top
    objectClass: organizationalUnit
    objectClass: domainRelatedObject
    associatedDomain: sgy.com
    
    dn: ou=Groups,dc=sgy,dc=com
    ou: Groups
    objectClass: top
    objectClass: organizationalUnit
    objectClass: domainRelatedObject
    associatedDomain: sgy.com
    

    生成用户和组的数据文件:

    [root@ldapS /usr/share/migrationtools]# ./migrate_passwd.pl /tmp/passwd > /tmp/user.ldif
    [root@ldapS /usr/share/migrationtools]# ./migrate_group.pl  /tmp/group  > /tmp/group.ldif
    	== xxx.sql
    
    将这3个ldif文件,导入数据库:
    [root@ldapS ~]# ldapadd -x -W -D "cn=Manager,dc=sgy,dc=com" -f /tmp/base.ldif 
    Enter LDAP Password: 
    adding new entry "dc=sgy,dc=com"
    adding new entry "ou=People,dc=sgy,dc=com"
    adding new entry "ou=Groups,dc=sgy,dc=com"
    	-x	进行认证
    	-W  输入密码
    	-D	绑定服务器的基准DN
    	-f	使用的ldif文件
    	cn=Manager,dc=sgy,dc=com	ldap的管理员用户
    	输入的密码:生成的加密密码
    
    [root@ldapS ~]# ldapadd -x -W -D "cn=Manager,dc=sgy,dc=com" -f /tmp/user.ldif
    [root@ldapS ~]# ldapadd -x -W -D "cn=Manager,dc=sgy,dc=com" -f /tmp/group.ldif
    
    查看用户的信息:
    [root@ldapS ~]# ldapsearch -xWD "cn=Manager,dc=sgy,dc=com" -b "uid=ldap1,ou=People,dc=sgy,dc=com" -LLL
    Enter LDAP Password:
    

    配置客户端 ldap-client

    ldap-client
    [root@node1 ~]# yum install -y nss-pam-ldapd pam_krb5 setuptool
    
    [root@node1 ~]# setup
    

    在这里插入图片描述在这里插入图片描述
    配置完成后,开启xshell,用ldap用户访问ldap-client

    [c:\~]$ ssh ldap1@172.16.0.61
    -bash-4.2$ 
    -bash-4.2$ su - 		没有家目录
    Password: 
    [root@node1 ~]# 
    

    在ldap-server配置NFS,共享ldap用户的家目录

    在ldap-server配置NFS,共享ldap用户的家目录:
    [root@ldapS ~]# yum install -y nfs-utils
    
    [root@ldapS ~]# vim /etc/exports
    /ldaphome   172.16.0.0/16(rw,sync)
    
    [root@ldapS ~]# systemctl start nfs
    [root@ldapS ~]# systemctl enable nfs
    
    在ldap-client,配置autofs,自动挂载nfs的共享:
    [root@node1 ~]# yum install -y nfs-utils autofs
    
    [root@node1 ~]# showmount -e 172.16.0.60
    Export list for 172.16.0.60:
    /ldaphome 172.16.0.0/16
    
    [root@node1 ~]# mkdir /ldaphome
    [root@node1 ~]# cp /etc/auto.misc /etc/auto.ldap	<--auto.misc文件是autofs生成的
    
    [root@node1 ~]# vim /etc/auto.master
    /ldaphome   /etc/auto.ldap
    
    [root@node1 ~]# vim /etc/auto.ldap
    *   -rw,soft,intr   172.16.0.60:/ldaphome/&		# 对应共享服务端的地址和目录
    	* 所有的挂载点
    	-rw	nfs的挂载选项
    	& nfs-server端的共享目录
    
    [root@node1 ~]# systemctl start autofs
    [root@node1 ~]# systemctl enable autofs
    
    [c:\~]$ ssh ldap1@172.16.0.61
    [ldap1@node1 ~]$ 
    
    [ldap1@node1 ~]$ cp /etc/passwd .
    [ldap1@node1 ~]$ ls
    passwd
    
    [root@ldapS ~]# cd /ldaphome/ldap1
    [root@ldapS /ldaphome/ldap1]# ls
    passwd
    

    应用场景

    在ldap-client上,可以直接使用ldap-server的用户:

    应用1:ssh

    应用2:vsftpd

    [root@node1 ~]# yum install -y vsftpd
    [root@node1 ~]# systemctl start vsftpd
    
    [root@centos7-bj ~]# ftp 172.16.0.61
    Connected to 172.16.0.61 (172.16.0.61).
    220 (vsFTPd 3.0.2)
    Name (172.16.0.61:root): ldap1
    331 Please specify the password.
    Password:
    230 Login successful.
    Remote system type is UNIX.
    Using binary mode to transfer files.
    

    应用3:samba

    [root@node1 ~]# yum install -y samba
    
    [root@node1 ~]# vim /etc/samba/smb.conf
    [share]
        comment = test ldap
        path = /samba
        writable = yes
        create mask = 0664
        directory mask = 0775
    
    [root@node1 ~]# mkdir /samba
    [root@node1 ~]# chmod 1757 /samba/
    
    [root@node1 ~]# smbpasswd -a ldap1
    New SMB password:
    Retype new SMB password:
    Added user ldap1.
    [root@node1 ~]# smbpasswd -a ldap2
    New SMB password:
    Retype new SMB password:
    Added user ldap2.
    
    [root@node1 ~]# systemctl start smb
    

    ==========================================

    ldap的维护:

    增加用户:

    [root@ldapS ~]# ./useradd.sh 
    	增加10个用户
    
    保存新的用户名,组,密码,重新命名
    [root@ldapS ~]# tail /etc/passwd > /tmp/newpasswd
    [root@ldapS ~]# tail /etc/group  > /tmp/newgroup
    [root@ldapS ~]# tail /etc/shadow >> /tmp/shadow 
    	##shadow是 >>
    
    导入新的数据
    [root@ldapS /usr/share/migrationtools]# ./migrate_passwd.pl /tmp/newpasswd > /tmp/user1.ldif
    [root@ldapS /usr/share/migrationtools]# ./migrate_group.pl /tmp/newgroup   > /tmp/group1.ldif
    
    [root@ldapS ~]# ldapadd -xWD "cn=Manager,dc=sgy,dc=com" -f /tmp/user1.ldif 
    [root@ldapS ~]# ldapadd -xWD "cn=Manager,dc=sgy,dc=com" -f /tmp/group1.ldif 
    
    [root@node1 ~]# su - ldap11
    [ldap11@node1 ~]$
    

    删除用户:

    [root@ldapS ~]# ldapdelete -xWD "cn=Manager,dc=sgy,dc=com" "uid=ldap1,ou=People,dc=sgy,dc=com"
    Enter LDAP Password:
    
    [root@node1 ~]# su - ldap1
    su: user ldap1 does not exist
    

    问题参考:

    使用ldap用户登录ldap-client时,xshell提示访问密码被拒绝:
    检查是否成功设置ldap密码,查看ldap用户时,是否可以查看到加密密码.

    如果重新设置密码后,依旧无法登录,提示密码访问被拒绝
    检查密码是否成功设置并成功导入数据库,如果没有这些问题,那么,重启client系统

    如果 /ldaphome 下的家目录已经生成,但是命令行显示不对
    检查对应用户的家目录权限是否是对应用户
    ll /ldaphome/ldap1 # 正常情况 所属者和所属组应为该用户
    检查autofs是否成功挂载,重新启动autofs

    展开全文
  • LDAP安装与简介

    千次阅读 2019-09-09 14:31:17
    安装禅道 正常安装即可。 安装外接用的mysql
  • Ldap基础知识

    千次阅读 2014-10-15 20:34:10
    什么是JNDI 在一个企业中,命名服务为读者的应用程序在网络上定位对象提供了一种方法。一个命名服务将对象和名称联系在了一起,并且可以通过它们指定的名称找到相应的对象。 JNDI是Java命名和目录接口,是一个为...
  • LDAP

    千次阅读 2018-08-08 19:29:06
    今天在书上看到ldap, 比较好奇是什么. 在百度上看到一个比较清楚的解释, fork一下. 原文地址 LDAP入门 首先要先理解什么是LDAP,当时我看了很多解释,也是云里雾里,弄不清楚。在这里给大家稍微捋一捋。 首先...
  • LDAP快速入门

    千次阅读 2014-06-08 17:03:06
    1. LDAP简介  LDAP(轻量级目录访问协议,Lightweight Directory Access Protocol)是实现提供被称为目录服务的信息服务。目录服务是一种特殊的数据库系统,其专门针对读取,浏览和搜索操作进行了特定的优化。...
  • ldap 教程

    千次阅读 2017-10-24 17:16:36
    能对LDAP进行操作的客户端程序很多,本节简单介绍在Linux命令方式下进行这些操作的方法。 14.4.1 向目录数据库中添加数据 初始状态下,LDAP是一个空目录,即没有任何数据。可通过程序代码向目录数据库中添加数据
  • LDAP简介

    千次阅读 2019-04-08 09:19:55
    LDAP是轻量目录访问协议,英文全称是Lightweight Directory Access Protocol,一般都简称为LDAP。它是基于X.500标准的,但是简单多了并且可以根据需要定制。与X.500不同,LDAP支持TCP/IP,这对访问Internet是必须的...
  • LDAP Admin操作指南

    千次阅读 2019-05-28 15:44:50
    在CDH集群中集成了OpenLDAP后,在向LDAP中添加一个用户需要通过编辑ldif文件,对于一些不熟悉的新手来说是非常不方便的,在前面的文章《12.OpenLDAP管理工具Phpldapadmin的安装及使用》介绍了一个中管理工具,是一个...
  • ldap服务器

    千次阅读 2013-07-17 17:42:10
    LDAP快速入门 1. LDAP简介  LDAP(轻量级目录访问协议,Lightweight Directory Access Protocol)是实现提供被称为目录服务的信息服务。目录服务是一种特殊的数据库系统,其专门针对读取,浏览和搜索操作进行了...
  • Java ldap服务器连接和修改密码

    千次阅读 2018-09-04 10:16:00
    终于解放了,昨天需求刚刚上线,感觉真不容易啊,踩得坑太多了。 ... 于是就在这方面下了一点功夫,把这将近两周的学习...要想了解ldap服务器,前提得知道相关的一些基本概念。我参考的是 https://www.cnblogs.com...
  • ldap服务一直启动失败

    千次阅读 2018-06-26 13:04:45
    一:bug截图二:解决方案1:虚拟机重新启动reboot2:再次启动ldap服务
  • LDAP 客户端包括如以下过程使用 Wldap 32.dll,任何进程: 使用 Active Directory Services Interfaces (ADSI) 来调用的过程。 使用 LDAP 从 Windows 通讯簿 (WAB) 的过程。 此过程会启动通过使用 Microsoft Outlook...
  • ldap服务器什么意思

    千次阅读 2019-06-17 09:53:19
    LDAP服务器简单来说它是一种得到某些数据的快捷方式,同时LDAP服务器也是一个协议,它经常被用作集体的地址本使用,甚至可以做到更加庞大。它是一种特殊的数据库,与一般的数据库相比有很大的差距,LDAP服务器的读性...
  • <p>I'm using an LDAP server and I'm trying to create an object at Organsation level. <p>But when I try to create an object filling all properties, it throws me the below error. <pre><code>Could not ...
  • Ldap admin连接ad域报错处理:

    千次阅读 2019-07-05 11:41:22
    Ldap admin连接ad域报错处理 1、事件描述 因虚拟化环境中需要连接AD获取相关用户信息,但是频繁登录虚拟机,比较麻烦,遂找到Ldap admin连接工具,但是在连接ad时报错: 1)测试ldap所在主机可以ping通AD的IP地址 2...
  • 使用PHP登录Ldap服务器

    万次阅读 2013-09-03 19:05:56
    LDAP 的全称是“轻量级目录访问协议(Lightweight Directory Access Protocol)”,是一种简单的目录协议。所谓目录,是一种专门的数据库,可以用来服务于任何应用程序。公司的域帐号登录采用的是Ldap登录验证,所有的...

空空如也

1 2 3 4 5 ... 20
收藏数 90,818
精华内容 36,327
关键字:

ldap