前言
这是我在这个网站整理的笔记,有错误的地方请指出,关注我,接下来还会持续更新。 作者:神的孩子都在歌唱
百度百科:轻型目录访问协议(英文:Lightweight Directory Access Protocol,缩写:LDAP,)是一个开放的,中立的,工业标准的应用协议,通过IP协议提供访问控制和维护分布式信息的目录信息。
官方文档介绍:LDAP 代表轻量级目录访问协议。顾名思义,它是一种用于访问目录服务的轻量级协议,特别是基于 X.500 的目录服务。LDAP 通过 TCP/IP 或其他面向连接的传输服务运行。
目录是专门为搜索和浏览而设计的数据库,目录服务对于网络的作用就像白页对电话系统的作用一样。目录服务将有关现实世界中的事物(如人、计算机、打印机等等)的信息存储为具有描述性属性的对象。人们可以使用该服务按名称查找对象或者像使用黄页一样,可使用它们查找服务。
目录服务器的主要功能是提供资源与地址的对应关系,比如你想找一台网上的共享打印机或主机时,你只需要知道名字就可以了,而不必去关心它真正的物理位置。而目录服务器帮助维护这样的资源-地址映射。
目录服务主要作用是使目录中所有信息和资源发挥作用的服务,如用户和资源管理、基于目录的网络服务、基于网络的应用管理等!活动目录服务(AD)是将网络中的各种资源组合起来,进行集中管理,以方便网络资源的搜索,使企业可以轻松地管理复杂的网络环境。
有许多不同的方法可以提供目录服务。不同的方法允许将不同类型的信息存储在目录中,对如何引用、查询和更新该信息、如何防止未经授权的访问等提出不同的要求。某些目录服务是本地的,为受限上下文提供服务(例如,单台计算机上的手指服务)。其他服务是全球性的,为更广泛的环境(例如,整个互联网)提供服务。全局服务通常是分布式的,这意味着它们包含的数据分布在许多机器上,所有这些机器都合作提供目录服务。通常,全局服务定义一个统一的命名空间,无论您与数据本身的关系在哪里,它都会提供相同的数据视图。
我们已经知道,LDAP是一种用于访问目录服务的轻量级协议,那么目录中可以存储哪些类型的信息,他的信息是如何排列的呢?
LDAP 信息模型基于条目。条目是具有全局唯一名称 (DN) 的属性集合。DN 用于明确引用条目。每个条目的属性都有一个类型和一个或多个值。LDAP中的属性类型(Attribute Types)如下:
cn=admin,dc=testldap,dc=org
是一个 DN,其中包含了三个 RDN:cn=admin
,dc=testldap
和dc=org
。cn=张三
。在 DN 中,CN 是最常见的 RDN 之一。ou=Sales
或ou=IT
,并且可以在 DN 中用来层次化地组织条目,例如:ou=IT,dc=testldap,dc=org
。o=ExampleCorp
,可以在 DN 中表示为o=ExampleCorp,dc=testldap,dc=org
。uid=jdoe
。dc=org
表示顶级域名,dc=testldap
表示二级域名。这些组件可以组合在一起形成一个完整的域名,例如:dc=testldap,dc=org
。每个这些属性类型都可以组合在一起,形成完整的 DN,用于唯一标识 LDAP 目录中的条目。完整的 DN 提供了一个路径,描述了从根节点到特定条目的所有层次结构信息。
在 LDAP 中,目录条目以分层树状结构排列。传统上,这种结构反映了地理和/或组织边界。代表国家/地区的条目显示在树的顶部。在它们下面是代表国家和国家组织的条目。它们下方可能是代表组织单位、人员、打印机、文档或您能想到的任何其他内容的条目。以下图片显示了使用传统命名的 LDAP 目录树示例。
图片来自官网 LDAP 目录树(传统命名)
树也可以根据互联网域名进行排列。这种命名方法正变得越来越流行,因为它允许使用 DNS 定位目录服务。
图片来自官网 LDAP 目录树(Internet 命名)
通过目录树,我们可以很快的从dc=example,dc=com
目录子树中搜索特定名称的人员。
我们这里安装openldap,OpenLDAP 软件是轻量级目录访问协议的开源实现。
openLdap开源路径:openLdap
我们选择docker方式安装
docker pull osixia/openldap
目录/var/lib/ldap
(LDAP 数据库文件)和/etc/ldap/slapd.d
(LDAP 配置文件)用于保存架构和数据信息,应映射为卷,以便将 LDAP 文件保存在容器外部。
docker run--hostname192.168.1.47--name openldap-p389:389-p636:636--volume /study/data/slapd/database:/var/lib/ldap \
--volume /study/data/slapd/config:/etc/ldap/slapd.d \
--volume /study/project/ldap/certs:/container/service/slapd/assets/certs \
--envLDAP_ENABLE_TLS=yes \
--envLDAP_TLS_CRT_FILENAME=ldap_server.crt \
--envLDAP_TLS_KEY_FILENAME=ldap_server.key \
--envLDAP_TLS_CA_CRT_FILENAME=ldap_ca.crt \
--detach osixia/openldap:latest
默认情况下,管理员的密码为 admin。它的组织是 Example Inc. 和域是 example.org 。
如果要更改可以修改dockers的启动条件
docker run \
--envLDAP_ORGANISATION="My Company" \
--envLDAP_DOMAIN="my-company.com" \
--envLDAP_ADMIN_PASSWORD="JonSn0w" \
--detach osixia/openldap:1.5.0
docker cp phpldapadmin:/container /study/project/phpldapdamin/
OpenLDAP 提供了许多命令行工具,用于管理和操作 LDAP 目录。
我们可以进入到docker容器中进行一些命令操作
docker exec-it openldapbash
比如查询某个用户信息
ldapsearch-x-D"cn=admin,dc=example,dc=org"-W-b"dc=example,dc=org""cn=chen"
具体的操作命令如下
ldapadd -x -D "cn=admin,dc=example,dc=org" -W -f newentry.ldif
-x
使用简单绑定,-D
指定绑定的 DN,-W
提示输入密码,-f
指定 LDIF 文件。ldapmodify -x -D "cn=admin,dc=example,dc=org" -W -f modify.ldif
ldapadd
类似,但用于修改条目。ldapdelete -x -D "cn=admin,dc=example,dc=org" -W "cn=John Doe,dc=example,dc=org"
ldapsearch -x -D "cn=admin,dc=example,dc=org" -W -b "dc=example,dc=org" "(objectClass=*)" cn mail
-b
指定搜索的基准 DN,(objectClass=*)
是搜索过滤器,cn mail
指定返回的属性。ldapcompare -x -D "cn=admin,dc=example,dc=org" -W "cn=John Doe,dc=example,dc=org" "cn=John Doe"
ldapwhoami -x -D "cn=admin,dc=example,dc=org" -W
ldappasswd -x -D "cn=admin,dc=example,dc=org" -W "uid=jdoe,dc=example,dc=org"
slapcat -n 1 -l backup.ldif
-n
指定数据库编号,-l
指定输出文件。slapadd -n 1 -l import.ldif
slapcat
相反,用于将 LDIF 文件中的数据导入到 LDAP 数据库。slapindex -n 1
slaptest -f /etc/openldap/slapd.conf
ldapmodrdn -x -D "cn=admin,dc=example,dc=org" -W "cn=John Doe,dc=example,dc=org" "cn=Johnny Doe"
ldif2ldbm -i input.ldif -o output.ldbm
ldbmcat -i input.ldbm -o output.ldif
ldapurl -h ldap://localhost -b "dc=example,dc=org" "(objectClass=*)" cn
ldapaddent -f /path/to/file
-f
指定输入文件。ldif -m merge.ldif
osixia/openLdap开源路径:phpldapadmin
docker安装
docker pull osixia/phpldapadmin
指定端口路径启动
docker run-p6543:80 \
--name phpldapadmin \
--envPHPLDAPADMIN_HTTPS=false \
--envPHPLDAPADMIN_LDAP_HOSTS=192.168.1.47 \
--volume /study/project/phpldapdamin/container:/container \
--detach osixia/phpldapadmin:latest
说明
-p 6543:80
:将容器的 80 端口映射到主机的 6543 端口。你可以通过http://localhost:6543
访问 phpLDAPadmin。--name phpldapadmin
:指定容器的名称为phpldapadmin
。--env PHPLDAPADMIN_HTTPS=false
:禁用 HTTPS,使 phpLDAPadmin 通过 HTTP 访问。--env PHPLDAPADMIN_LDAP_HOSTS=192.168.1.47
:设置 LDAP 服务器的主机地址。将192.168.1.47
替换为你的 LDAP 服务器地址。--detach
:后台运行容器。运行成功后访问 http://192.168.1.47:6543/输入DN和密码
如果是默认设置的就输入以下信息 Login DN:cn=admin,dc=example,dc=org Password:admin
这样子我们就可以通过web页面去操作ldap了
参考文章:https://zhuanlan.zhihu.com/p/678707699
官方文档:https://www.openldap.org/doc/admin24/index.html
osixia/openLdap开源路径:openLdap
官方网站:https://www.openldap.org/
docker下载地址:https://hub.docker.com/r/osixia/openldap/
LDAP简单介绍及使用:LDAP简单介绍及使用
docker 安装 OpenLDAP 及 LdapAdmin桌面版、页面版(osixia/openldap):docker 安装 OpenLDAP 及 LdapAdmin桌面版、页面版(osixia/openldap)
作者:神的孩子都在歌唱 本人博客:https://blog.csdn.net/weixin_46654114 转载说明:务必注明来源,附带本人博客连接。