openldap(一):简介和安装

目录

  • 1 OpenLDAP简介
    • 1.1 LDAP介绍
      • 1、什么LDAP
      • 2、为什么要使用LDAP
      • 3、LDAP 的特点
      • 4、LDAP常用关键字
      • 5、LDAP的objectClass
      • 6、LADP使用场景
    • 1.2 OpenLDAP介绍
      • 1、什么OpenLDAP
      • 2、OpenLDAP特点
      • 3、OpenLDAP的组件
  • 2 OpenLDAP安装
  • 3 简单使用
    • 3.1 创建用户
      • 1、创建ou
      • 2、创建Group
  • 3、创建User Account
      • 4、 为用户填写其他属性

1 OpenLDAP简介

1.1 LDAP介绍

1、什么LDAP

LDAP(轻量级目录访问协议,Lightweight Directory Access Protocol)是一种用于访问分布式目录服务的网络协议。它提供了一种标准化的方法来查询和操作目录中的信息,这些信息通常以树状结构组织,用于存储用户、组织和其他实体的数据。

2、为什么要使用LDAP

LDAP是开放的Internet标准,市场上或者开源社区的绝大多数软件都支持LDAP协议。简单来说,LDAP协议最大的好处就是能统一管理用户密码,如果有新人报道,只需要创建一个用户就能登录公司的所有平台(gitlab、jumpserver、监控等等),离职时一键删除即可。

3、LDAP 的特点

LDAP有如下特定:

  • 1.目录结构:LDAP 目录是树状结构组织,每个节点称为条目(Entry),每个条目包含属性(Attributes)。
  • 2.基于标准的协议:LDAP 遵循一系列 RFC(Request for Comments)文档,确保了不同系统间的兼容性和互操作性。
  • 3.分层命名空间:LDAP 使用分层的命名空间(称为 Distinguished Names, DN),用于唯一标识目录中的每个条目。
  • 4.搜索和访问控制:LDAP 提供了强大的搜索功能,允许用户根据属性值查询条目。同时,它支持复杂的访问控制机制,以保护目录数据的安全。
  • 5.可扩展性:LDAP 支持通过添加新的条目和属性来扩展目录结构,同时保持向后兼容性。

4、LDAP常用关键字

  • dn(Distinguished Name):区分名称,LDAP中每个条目都有自己的dn,dn是该条目在整棵树中的唯一标识,如同文件系统中,带路径的文件名就是DN。
  • rdn(Relative dn):相对区别名称,好比linux中的相对路径。
  • dc(Domain Component):域名组件。其格式是将完整的域名分成几部分,如将http://example.com变成dc=example,dc=com。
  • uid(User ID):用户ID,如 san.zhang。
  • ou(Organization Unit):组织单元。
  • cn(Common Name):公共名称。
  • sn(surname):姓氏。
  • c(Country):国家,如“CN”或者“US”。
  • o(Organization):组织名,如XXX银行,XXX部门,XXX公司等等。
    这里把dn当做用户唯一主键, cn是common name,应该等同于用户名,因为用户名必须唯一,通常为邮箱前缀,比如ryan.miao. sn作为姓氏, uid作为用户id。通常用户id也是唯一的。所以在使用ldap做认证的时候,大概逻辑如下:
  • 配置ldap host, admin, admin pass
  • 用户登录时传递username
  • 读取配置的ldap信息,查询cn或者uid等于username的数据
  • 取出第一个记录, 获得dn, 根据dn和password再次去ldap服务器认证。即必须保证cn或uid是全局唯一的

5、LDAP的objectClass

objectClass含义
olcGlobal全局配置文件类型, 主要是cn=config.ldif 的配置项
top顶层的对象
organization组织,比如公司名称,顶层的对象
organizationalUnit重要, 一个目录节点,通常是group,或者部门这样的含义
inetOrgPerson重要, 我们真正的用户节点类型,person类型, 叶子节点
groupOfNames重要, 分组的group类型,标记一个group节点olcModuleList配置模块的对象

6、LADP使用场景

LDAP 通常用于以下场景:

  • 身份验证:验证用户身份,允许或拒绝对系统资源的访问。
  • 授权:管理用户权限,控制对目录数据的访问。
  • 目录服务:存储和检索关于用户、组织结构和其他实体的信息。
  • 单点登录(SSO):作为身份提供者,允许用户使用一组凭据访问多个相关但独立的系统。

1.2 OpenLDAP介绍

1、什么OpenLDAP

OpenLDAP 是 LDAP 协议的一个开源实现,由 OpenLDAP 项目提供。它包括服务器、客户端库、工具和示例应用程序,用于构建和操作 LDAP 目录服务。OpenLDAP 可以运行在多种操作系统上,包括 Linux、Unix、Windows 等。

2、OpenLDAP特点

OpenLADP的特点如下:

  • 1.开源:OpenLDAP 是开源软件,可以自由下载、使用和修改。
  • 2.跨平台:OpenLDAP 可以在多种操作系统上运行,包括 Linux、Unix、Windows 等。
  • 3.灵活性:OpenLDAP 支持自定义模式(Schemas),允许管理员定义新的数据类型和对象类,以满足特定的业务需求。
  • 4.安全性:OpenLDAP 支持多种安全机制,包括 TLS/SSL 加密、SASL 认证等,确保数据传输的安全性。
  • 5.性能:OpenLDAP 经过优化,能够处理大量的并发访问和复杂的搜索操作。
  • 6.工具和库:OpenLDAP 提供了一系列工具和库,方便开发者集成和操作 LDAP 服务。

3、OpenLDAP的组件

OpenLDAP有四个主要组件:

  • slapd -独立的LDAP守护进程和相关的模块和工具
  • lloadd—独立的LDAP负载均衡代理服务器
  • 实现LDAP协议和ASN.1基本编码规则的库
  • 客户端软件:ldapsearch、ldapadd、ldapdelete等

此外,OpenLDAP项目还有许多子项目:

  • Java 的LDAP类库
  • JDBC-LDAP - Java JDBC-LDAP桥接驱动
  • ldapc++ -用于c++的LDAP类库
  • 内存映射数据库库

2 OpenLDAP安装

环境:Ubuntu 22.04
使用docker安装

mkdir ldap
cd ldapvim docker-compose.yaml
#######
version: '2'
services:openldap:image: osixia/openldap:1.5.0  ### 如果有私有仓库可以从自己的私有仓库拉取镜像container_name: openldaprestart: alwaysenvironment:LDAP_LOG_LEVEL: "256"LDAP_ORGANISATION: "test"   ### 您的组织名称LDAP_DOMAIN: "smile.test"    ### 公司域名LDAP_BASE_DN: "dc=smile,dc=test"   ### 根据域名组成LDAP_ADMIN_PASSWORD: "smile123"   ### 密码自己来设置LDAP_CONFIG_PASSWORD: "smile123"LDAP_READONLY_USER: "false"#LDAP_READONLY_USER_USERNAME: "readonly"#LDAP_READONLY_USER_PASSWORD: "readonly"LDAP_RFC2307BIS_SCHEMA: "false"LDAP_BACKEND: "mdb"#LDAP_TLS: "true"#LDAP_TLS_CRT_FILENAME: "smile.test.pem"#LDAP_TLS_KEY_FILENAME: "smile.test.key"#LDAP_TLS_DH_PARAM_FILENAME: "dhparam.pem"#LDAP_TLS_CA_CRT_FILENAME: "ca.crt"#LDAP_TLS_ENFORCE: "false"#LDAP_TLS_CIPHER_SUITE: "SECURE256:-VERS-SSL3.0"# LDAP_TLS_VERIFY_CLIENT: "demand"LDAP_REPLICATION: "false"#LDAP_REPLICATION_CONFIG_SYNCPROV: 'binddn="cn=admin,cn=config" bindmethod=simple credentials="$$LDAP_CONFIG_PASSWORD" searchbase="cn=config" type=refreshAndPersist retry="60 +" timeout=1 starttls=critical'#LDAP_REPLICATION_DB_SYNCPROV: 'binddn="cn=admin,$$LDAP_BASE_DN" bindmethod=simple credentials="$$LDAP_ADMIN_PASSWORD" searchbase="$$LDAP_BASE_DN" type=refreshAndPersist interval=00:00:00:10 retry="60 +" timeout=1 starttls=critical'#LDAP_REPLICATION_HOSTS: "#PYTHON2BASH:['ldap://ldap.example.org','ldap://ldap2.example.org']"KEEP_EXISTING_CONFIG: "false"LDAP_REMOVE_CONFIG_AFTER_SETUP: "true"#LDAP_SSL_HELPER_PREFIX: "ldap"tty: truestdin_open: truevolumes:- /opt/openldap/ldap:/var/lib/ldap- /opt/openldap/slapd.d:/etc/ldap/slapd.d- /opt/openldap/certs:/container/service/lapd/assets/certsports:- "389:389"- "636:636"# For replication to work correctly, domainname and hostname must be# set correctly so that "hostname"."domainname" equates to the# fully-qualified domain name for the host.domainname: "smile.test"hostname: "ldap-server"phpldapadmin:image: osixia/phpldapadmin:latestcontainer_name: phpldapadminrestart: alwaysenvironment:PHPLDAPADMIN_LDAP_HOSTS: "openldap"   ### 如果部署后登录不进去有可能是这里出了问题,直接换为部署openldap服务的公网IP试试PHPLDAPADMIN_HTTPS: "false"ports:- "50081:80"depends_on:- openldapself-service-password:container_name: self-service-passwordimage: tiredofit/self-service-password:latestrestart: alwaysports:- "50080:80"environment:- LDAP_SERVER=ldap://openldap:389- LDAP_BINDDN=cn=admin,dc=smile,dc=test- LDAP_BINDPASS=XXXX- LDAP_BASE_SEARCH=dc=smile,dc=test- MAIL_FROM=it@open.com- MAIL_FROM_NAME=账号自助服务平台- SMTP_DEBUG=0- SMTP_HOST=smtp.qiye.aliyun.com- SMTP_USER=it@open.com- SMTP_PASS=jYda52VZ8Ftw1111- SMTP_PORT=465- SMTP_SECURE_TYPE=ssl- SMTP_AUTH_ON=true- NOTIFY_ON_CHANGE=truevolumes:- /etc/localtime:/etc/localtime- /opt/openldap/self-service-password/htdocs:/www/ssp- /opt/openldap/self-service-password/logs:/www/logsdeploy:resources:limits:memory: 2Greservations:memory: 512M### 运行
docker-compose up -d

登录地址:ip:50081
用户名:LDAP_BINDDN cn=admin,dc=smile,dc=test
密码:LDAP_ADMIN_PASSWORD
在这里插入图片描述
在这里插入图片描述

3 简单使用

3.1 创建用户

这里先在dc下面创建一个ou=group和一个ou=person。暂时先不按部分区分,如果想再按部分区分则就先创建一个ou,再在该ou下创建一个ou=group即可。

1、创建ou

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

提交后可以看到如下:
在这里插入图片描述

创建 group 和 person 两个ou

2、创建Group

在ou=group下创建dev
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3、创建User Account

在ou=people下创建用户
在这里插入图片描述
在这里插入图片描述

4、 为用户填写其他属性

为用户添加真实姓名和邮箱(有些系统需要用户的这两个信息!比如gitlab)
在这里插入图片描述
在这里插入图片描述

再添加一个属性,此时选择:Email
在这里插入图片描述

配置完成后的效果:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/788209.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

NoSQL(非关系型数据库)之Redis的简介与安装

一、简介 1.1 关系型数据库与非关系型数据库 1.1.1 概念 1.1.2 区别 1.2 非关系型数据库产生背景 1.3 redis 简介 1.4 redis 优点 1.5 redis 快的原因 二、安装 2.1 关闭核心防护 2.2 安装相关依赖 2.3 解压软件包并进行编译安装 2.4 设置 Redis 服务所需相关配置文…

网络编程详解(select poll epoll reactor)

1. 客户端服务器建立连接过程 1.1 编写一个server的步骤是怎么样的? int main(){int listenfd, connfd;pid_t childpid;socklen_t clilen;struct sockaddr_in cliaddr, servaddr;listenfd socket(AF_INET, SOCK_STREAM, 0);bzero(&servaddr, sizeof(servaddr…

Java基础核心Map

在Java中,Map是一种用于存储键值对(key-value pairs)的集合类型。它提供了一种将键映射到值的方式,其中每个键在Map中都是唯一的。Map接口是java.util包中的一部分。 常用实现类: HashMap: 基于哈希表实现的Map&#…

JavaScript发票查验接口如何集成?返回错误的信息原因是什么呢?

发票查验的过程中,很可能出现各种各样的问题,那么返回错误信息的原因一般可能是因为以下几种原因:第一种是接口没有调通,第二种是本身发票就是一张错票、假票,第三种可能是税局系统或网络问题等等,如果在使…

6、Cocos Creator 2D 渲染组件:​Sprite 组件​

Sprite 组件 Sprite(精灵)是 2D/3D 游戏最常见的显示图像的方式,在节点上添加 Sprite 组件,就可以在场景中显示项目资源中的图片。 属性功能说明Type渲染模式,包括普通(Simple)、九宫格&#x…

网易云首页单页面html+css

网页设计与网站建设作业htmlcss 预览 源码查看https://hpc.baicaitang.cn/2083.html

Java | Leetcode Java题解之第4题寻找两个正序数组的中位数

题目&#xff1a; 题解&#xff1a; class Solution {public double findMedianSortedArrays(int[] A, int[] B) {int m A.length;int n B.length;if (m > n) { return findMedianSortedArrays(B,A); // 保证 m < n}int iMin 0, iMax m;while (iMin < iMax) {int…

linux shell命令(进程管理、用户管理)

一、进程的概念 主要有两点&#xff1a; 1.进程是一个实体。每一个进程都有它自己的地址空间&#xff0c;一般情况下&#xff0c;包括文本区域&#xff08;text region&#xff09;、数据区域&#xff08;data region&#xff09;和堆栈&#xff08;stack region&#xff09;…

Visual Studio 2022报错c1083,win11解决办法

如果头文件报错&#xff0c;并且编译器报错是c1083&#xff0c;无法处理的时候&#xff0c;包括卸载重装也是无济于事的时候 此时可以采取一下办法进行修改 出现这个的主要原因是安装 Windows SDK 时版本出错&#xff0c;需要根据自己的 windows 版本选择安装对应版本的 Wind…

SpringBoot+ECharts+Html 地图案例详解

1. 技术点 SpringBoot、MyBatis、thymeleaf、MySQL、ECharts 等 此案例使用的地图是在ECharts社区中查找的&#xff1a;makeapie echarts社区图表可视化案例 2. 准备条件 在mysql中创建数据库echartsdb&#xff0c;数据库中创建表t_location_count表&#xff0c;表中设置两个…

Redis底层数据库之SDS

高速的存储介质&#xff1a;内存优秀的底层数据结构高效的IO模型高效的线程模型 1. 动态字符串SDS Redis中保存的Key是字符串&#xff0c;value往往是字符串或者字符串的集合。可见字符串是redis中最常用的一种数据结构。 C语言种字符串存在的一些问题&#xff1a; 获取字符…

【嵌入式智能产品开发实战】(十四)—— 政安晨:通过ARM-Linux掌握基本技能【链接静态库与动态库】

目录 链接静态库 动态链接 与地址无关的代码 全局偏移表 延迟绑定 共享库 政安晨的个人主页&#xff1a;政安晨 欢迎 &#x1f44d;点赞✍评论⭐收藏 收录专栏: 嵌入式智能产品开发实战 希望政安晨的博客能够对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论…

初阶数据结构—算法的时间复杂度和空间复杂度

第一章&#xff1a;数据结构前言&#xff08;Lesson 1&#xff09; 1. 什么是数据结构&#xff1f; 数据结构 (Data Structure) 是计算机存储、组织数据的方式&#xff0c;指相互之间存在一种或多种特定关系的 数据元素的集合。 2. 什么是算法&#xff1f; 算法(Algorithm)…

【数据处理包Pandas】多级索引的创建及使用

目录 一、元组作为一级索引&#xff08;一&#xff09;示例1&#xff08;二&#xff09;示例2 二、引入多级索引&#xff08;一&#xff09;多级索引的创建&#xff08;二&#xff09;多级索引中的数学选取 首先&#xff0c;导入 NumPy 库和 Pandas 库。 import numpy as np i…

monitor link 联合smart link配合应对复杂的网络

monitor link关键词&#xff1a;上行和下行端口&#xff0c;当上行端口异常&#xff0c;下行端口立即down掉&#xff0c;也就是一种联动机制 如果上行端口里面是smart link方式&#xff0c;则当主从端口都出问题时候&#xff0c;下行端口才会down掉 monitor link 配置步骤 1创…

Vue基础配置、组件通信、自定义指令

基础配置 Vue框架已经集成了webpack配置 小注意点 vbase 快速生成vue模板 组件名必须是多词格式(驼峰模式) 具体三种写法: ①小驼峰:abcDef.vue ②大驼峰&#xff1a;AbcDef.vue ③中横线&#xff1a;abc-def.vue 假如文件名不符合多次格式的补救办法&#xff1a; 导出重命名…

EFPN代码解读

论文 Extended Feature Pyramid Network for Small Object Detection python3 D:/Project/EFPN-detectron2-master/tools/train_net.py --config-file configs/InstanceSegmentation/pointrend_rcnn_R_50_FPN_1x_coco.yaml --num-gpus 1 训练脚本 cfg 中的配置 先获取配置…

基于51单片机的智能门禁系统仿真设计

**单片机设计介绍&#xff0c;基于51单片机的智能门禁系统仿真设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于51单片机的智能门禁系统仿真设计概要 一、设计概述 本设计旨在利用51单片机为核心控制器&#xff0c;结合…

Python程序设计 多重循环(二)

1.打印数字图形 输入n&#xff08;n<9)&#xff0c;输出由数字组成的直角三角图形。例如&#xff0c;输入5&#xff0c;输出图形如下 nint(input("")) #开始 for i in range(1,n1):for j in range(1,i1):print(j,end"")print()#结束 2.打印字符图形 …

pytest教程-22-用例依赖插件-pytest-dependency

领取资料&#xff0c;咨询答疑&#xff0c;请➕wei: June__Go 上一小节我们学习了pytest失败重跑插件pytest-rerunfailures&#xff0c;本小节我们讲解一下pytest用例依赖插件-pytest-dependency。 用例依赖 编写用例的时候&#xff0c;我们会注意用例之间的独立性&#xf…