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 ldap

vim docker-compose.yaml
#######
version: '2'
services:
  openldap:
    image: osixia/openldap:1.5.0  ### 如果有私有仓库可以从自己的私有仓库拉取镜像
    container_name: openldap
    restart: always
    environment:
      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: true
    stdin_open: true
    volumes:
      - /opt/openldap/ldap:/var/lib/ldap
      - /opt/openldap/slapd.d:/etc/ldap/slapd.d
      - /opt/openldap/certs:/container/service/lapd/assets/certs
    ports:
      - "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:latest
    container_name: phpldapadmin
    restart: always
    environment:
      PHPLDAPADMIN_LDAP_HOSTS: "openldap"   ### 如果部署后登录不进去有可能是这里出了问题,直接换为部署openldap服务的公网IP试试
      PHPLDAPADMIN_HTTPS: "false"
    ports:
      - "50081:80"
    depends_on:
      - openldap
  self-service-password:
    container_name: self-service-password
    image: tiredofit/self-service-password:latest
    restart: always
    ports:
      - "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=true
    volumes:
      - /etc/localtime:/etc/localtime
      - /opt/openldap/self-service-password/htdocs:/www/ssp
      - /opt/openldap/self-service-password/logs:/www/logs
    deploy:
      resources:
        limits:
           memory: 2G
        reservations:
           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
在这里插入图片描述

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

来成都的国际数字影像产业园,开启文创产业园之旅

走进位于成都金牛区福堤路的国际数字影像产业园,仿佛置身于一个充满创意与活力的场域。这里是成都数字产业的聚集地,汇聚了上百家数字媒体相关企业,为成都文创产业注入了新的活力。在这里,你可以感受到浓厚的创新氛围,…

10.图像高斯滤波的原理与FPGA实现思路

1.概念 高斯分布 图像滤波之高斯滤波介绍 图像处理算法|高斯滤波   高斯滤波(Gaussian filter)包含很多种,包括低通、高通、带通等,在图像上说的高斯滤波通常是指的高斯模糊(Gaussian Blur),是一种高斯低通滤波。通常这个算法也可以用来模…

[mmu/cache]-ARM cache的学习笔记-一篇就够了

快速链接: 【精选】ARMv8/ARMv9架构入门到精通-[目录] 👈👈👈 应用场景——什么时候需要刷cache 1、在不同硬件之间共享数据时 场景:CPU往src地址处写入了一串数据,然后交给Crypto硬件进行加解密处理,加解…

LabVIEW电力设备在线监测系统

LabVIEW电力设备在线监测系统 在电力行业中,变电站的稳定运行对于保障电力系统的安全性和可靠性至关重要。开发了一种基于LabVIEW软件开发的变电站电力设备在线监测系统,实时监控变电站内部的电力设备状态,确保电力传输的高效与安全。通过对…

vue广告悬浮框,页面来回移动,鼠标放上停止,离开移动

1.dom <div class"popup-dialog" id"popupDialog" mouseover"onMmouseover" mouseout"onMouseout"><p>vue广告悬浮</p></div>2.js mounted() {this.initPopup();},beforeDestory() {if (this.times) {clearIn…

IDEA无法连接虚拟机中的Redis的解决方案,无法连接Jedis,无法ping通虚拟机的解决方案

首先&#xff0c;笔者先说明一下自身的情况&#xff0c;怎么连接都连不上&#xff0c;网上的教程全部都看了一遍&#xff0c;基本上没用得上的&#xff0c;这篇文章里面的解决方案包括了笔者能在网上找到了最全面的办法总结&#xff0c;最后终于是连上了 目录 一.连接Jedis出错…

类似微信的以文搜图功能实现

通过PaddleOCR识别图片中的文字&#xff0c;将识别结果报存到es中&#xff0c;利用es查询语句返回结果图片。 技术逻辑 PaddleOCR部署、es部署创建mapping将PaddleOCR识别结果保存至es通过查询&#xff0c;返回结果 前期准备 PaddleOCR、es部署请参考https://blog.csdn.net…

基于springboot实现海滨体育馆管理系统项目【项目源码+论文说明】

基于springboot实现海滨体育馆管理系统演示 摘要 本基于Spring Boot的海滨体育馆管理系统设计目标是实现海滨体育馆的信息化管理&#xff0c;提高管理效率&#xff0c;使得海滨体育馆管理工作规范化、高效化。 本文重点阐述了海滨体育馆管理系统的开发过程&#xff0c;以实际…

Python | Leetcode Python题解之第7题整数反转

题目&#xff1a; 题解&#xff1a; def reverse_better(self, x: int) -> int:y, res abs(x), 0# 则其数值范围为 [−2^31, 2^31 − 1]boundry (1<<31) -1 if x>0 else 1<<31while y ! 0:res res*10 y%10if res > boundry :return 0y //10return re…

【鹅厂摸鱼日记(一)】(工作篇)认识八大技术架构

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:重生之我在鹅厂摸鱼⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学习更多知识   &#x1f51d;&#x1f51d; 认识八大架构 1. 前言2. 架构简介&…

Vue插槽(Slots)深入解析

插槽内容与出口​ 在之前的章节中&#xff0c;我们已经了解到组件能够接收任意类型的 JavaScript 值作为 props&#xff0c;但组件要如何接收模板内容呢&#xff1f;在某些场景中&#xff0c;我们可能想要为子组件传递一些模板片段&#xff0c;让子组件在它们的组件中渲染这些片…

cpp第六次作业

1.导图&#xff1a; 2.源码&#xff1a; #include <iostream> using namespace std; template <typename T> class stack{T data[10];int top; public:stack():top(-1){};void add_data(T data1){if(top9){return;}top;data[top]data1;}void del_data(){if(top-1…

玩机进阶教程-----高通9008线刷XML脚本修改备份 檫除的操作步骤解析

在高通9008官方固件中我们可以看到刷写需要的脚本rawprogram0.xml和辅助脚本patch0.xml&#xff0c;脚本的作用在于将固件内各个分区对应写入手机内。根据分区地址段。然后判断脚本中那些分区不写入。以下步骤将分析emmc字库为例来讲解如何将默认刷入脚本修改为备份 檫除脚本。…

Matlab实验:离散时间信号与系统的时域分析

01.代码的主要内容 02.代码效果图 获取代码请关注MATLAB科研小白的个人公众号&#xff08;即文章下方二维码&#xff09;&#xff0c;并回复MATLAB课程设计&#xff1b;本公众号致力于解决找代码难&#xff0c;写代码怵。各位有什么急需的代码&#xff0c;欢迎后台留言~不定时更…

C++的并发世界(三)——线程对象生命周期

0.案例代码 先看下面一个例子&#xff1a; #include <iostream> #include <thread>void ThreadMain() {std::cout << "begin sub thread:" << std::this_thread::get_id()<<std::endl;for (int i 0; i < 10; i){std::cout <&…

程序员为什么要一直写 bug ?

程序员并不是故意写bug的&#xff0c;bug的产生通常是由多种因素导致的&#xff0c;例如&#xff1a; 需求理解不足&#xff1a;如果程序员没有完全理解项目的需求或者功能要求&#xff0c;可能会在编程过程中遗漏一些重要的细节&#xff0c;导致bug的产生。编程经验不足&…

人脸、指纹、刷卡、密码、远程,一文速懂不同功能门禁系统怎么选?

门禁系统顾名思义就是对出入口通道进行管制的系统&#xff0c;它是在传统的门锁基础上发展而来。常见的门禁系统包括&#xff1a;密码识别门禁系统、刷卡识别门禁系统、生物识别门禁系统以及线上远程开门系统等。 在选择门禁系统时&#xff0c;需要根据不同的场景和需求&#x…

Nativefier - 将网页变为软件

Nativefier 是一款命令行工具&#xff0c;可以轻松地为任何网站创建 "桌面应用程序"&#xff0c;而无需大费周章。应用程序由 Electron&#xff08;内核使用 Chromium&#xff09;封装成操作系统可执行文件&#xff08;.app、.exe 等&#xff09;&#xff0c;可在 Wi…

【C++面向对象】C++图书管理系统 (源码)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

nvme协议学习总结

一、nvme命令 1 nvme在pcie基础上的协议&#xff0c;与PCIE配合&#xff0c;实现高效传输。 2 nvme命令主要分IO命令和admin命令。 3 一个NVME CMD执行流程&#xff1a; step1&#xff1a;host把cmd写入SQ queue中&#xff1b; step2&#xff1a;host远端更新Device&#x…