@Linux搭建LDAP认证服务

2023-10-29

1.Ldap概述

LDAP(Light Directory Access Portocol)轻量级目录访问协议:
LDAP是一个开放的,中立的,工业标准的应用协议,通过IP协议提供访问控制和维护分布式信息的目录信息。
简单理解起来就是LADP包含一个数据库存储了树状结构组织数据,和一套协议,第三方可通过这套协议进行数据的查询与搜索的功能。它用的协议基于X.500标准的轻量级目录访问协议,是一种开放Internet标准,LADP协议是跨平台的Internt协议,总结来说LDAP是由目录数据库和一套访问协议组成的系统
现在许多产品都加入了对LDAP的支持,可以通过简单的配置与服务器做认证服务。用户只需要使用一个密码登录众多个支持LDAP协议的应用,由应用自己去LDAP Server去认证用户信息,不仅做到了用户信息的统一管理,对于应用认证也十分方便。

2.Ldap的用途

为什么使用ldap
众所周知,当一个公司规模之后,会有无数的系统进行工作,如果每一个系统都需要注册自己的用户名,每一个系统的用户名与密码可能都不一样。对个人来说就是一件折腾的事情,从公司的IT安全角度来说更是麻烦。所以需要统一认证,单点登录。
LDAP就是最适合在单点登录中使用的系统了。
因为LDAP是一个开放的,中立的,工业标准的应用协议,它支持跨平台,数据配置简单且功能单一,稳定性高且查询性能好,使用它做认证服务可降低重复开发和对接的成本

3.Ldap的数据模型

1》数据模型叙述

LDAP 的基本数据模型就是一种树状的组织数据
LDAP的数据是树状结构, 所有条目(或者对象)都定义在树结构中。条目下的树状结构称为目录信息树(DIT)。一个完整的条目有唯一可识别的名称,我们叫之为区别名(DN)。在DN的子节点下的一个单独节点或者路径,我们称之为RDU。

通常一个条目(或者对象)在存储在这两种类型对象中
1)容器(container):这种对象本身可以包含其他对象。 例如:root(目录树的根元素,它实际上并不存在),c(国家/地区),ou(组织单位)和dc(域)。 容器(container)与与文件系统中的目录相当。
2)叶子节点(leaf):这种对象位于节点的末端,不能再包含其它对象。 例如person,InetOrgPerson,groupofNames。

2》目录树简述

目录树概念:
1)目录树:在一个目录服务系统中,整个目录信息集可以表示为一个目录信息树,树中的每个节点是一个条目。
2)条目:每个条目就是一条记录,每个条目有自己的唯一可区别的名称(DN)。
3)对象类:与某个实体类型对应的一组属性,对象类是可以继承的,这样父类的必须属性也会被继承下来。
4)属性:描述条目的某个方面的信息,一个属性由一个属性类型和一个或多个属性值组成,属性有必须属性和非必须属性。

LDAP里的简称概述:
1)o:organization(组织-公司)
2)ou:organization unit(组织单元-部门)
3)c:countryName(国家)
4)dc:domainComponent(域名)
5)sn:suer name(真实名称)
6)cn:common name(常用名称)

简称 名词全称 相关含义
dc Domain Component 域名的部分,其格式是将完整的域名分成几部分;如域名为example.com变成dc=example,dc=com(一条记录的所属位置)
ou Organization Unit 组织单位,组织单位可以包含其他各种对象(包括其他组织单元),如“oa组”(一条记录的所属组织)
cn Common Name 公共名称,如“Thomas Johansson”(一条记录的名称)
dn Distinguished Name “uid=songtao.xu,ou=oa组,dc=example,dc=com”,一条记录的位置(唯一)

3》Ldap目录树说明

在这里插入图片描述

如上babs条目中:
DN:uid=babs,ou=people,dc=example,dc=com
相对于ou=people,dc=example,dc=com 节点的RDN:uid=babs ObjectClass:Person

2.搭建LDAP服务器

1》环境准备

主机 系统 服务
192.168.1.10 CentOS Linux release 7.4 Ldap服务器openldap2.4
192.168.1.11 CentOS Linux release 7.4 Ldap客户端openldap-clients2.4

2》Ldap服务搭建

#安装OPenLDAP安装包
shell> yum -y install openldap-servers openldap-clients 


#生成密钥(记住输出结果,后续会将加密后的结果设置为初始用户的密码)
shell> slappasswd -s zeny
{SSHA}jdymV5MGrZt8iI4Wdn0dAqty+LPY0Lq9



#修改ldap目录所属用户组
shell> chown ldap:ldap /var/lib/ldap/*


#启动ldap服务
shell> systemctl restart slapd


#端口确认
shell> netstat -antup | grep -i 389
tcp        0      0 0.0.0.0:389             0.0.0.0:*               LISTEN      1149/slapd          
tcp6       0      0 :::389                  :::*                    LISTEN      1149/slapd 




#导入基础模块(出现adding new entry字样表示导入成功)
shell> ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif 
shell> ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif
shell> ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif



#配置域信息(创建changes.ldif文件自定义域,将要替换的部分更改为自己的数据)
vim /etc/openldap/schema/changes.ldif
# 修改域名
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
# 注意修改
olcSuffix: dc=zeny,dc=com

# 修改管理员用户
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootDN
# 注意修改
olcRootDN: cn=admin,dc=zeny,dc=com

# 修改管理员密码
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootPW
# 替换为 slappasswd 生成后的结果
olcRootPW: {SSHA}jdymV5MGrZt8iI4Wdn0dAqty+LPY0Lq9

# 修改访问权限
dn: olcDatabase={1}monitor,cn=config
changetype: modify
replace: olcAccess
olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" read by dn.base="cn=admin,dc=zeny,dc=com" read by * none
#修改dn.base
#dn.base="cn=admin,dc=zeny,dc=com" read by * none



#导入ldap配置(输出内容如下为导入成功)
shell> ldapmodify -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/changes.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={2}hdb,cn=config"

modifying entry "olcDatabase={2}hdb,cn=config"

modifying entry "olcDatabase={2}hdb,cn=config"

modifying entry "olcDatabase={1}monitor,cn=config"


#创建域和组织(创建文件basedomain.ldif)
shell> cat /etc/openldap/schema/basedomain.ldif
dn: dc=zeny,dc=com
dc: zeny
objectClass: top
objectClass: domain

dn: ou=People,dc=zeny,dc=com
ou: People
objectClass: top
objectClass: organizationalUnit

dn: ou=Group,dc=zeny,dc=com
ou: Group
objectClass: top
objectClass: organizationalUnit



#导入域和组织配置(密码输入初始用户密码:zeny)
shell> ldapadd -x -D cn=admin,dc=zeny,dc=com -W -f /etc/openldap/schema/basedomain.ldif 
Enter LDAP Password: 
adding new entry "dc=zeny,dc=com"

adding new entry "ou=People,dc=zeny,dc=com"

adding new entry "ou=Group,dc=zeny,dc=com"



#查看用户列表
shell> ldapsearch -x -b "ou=People,dc=zeny,dc=com" | grep dn
dn: ou=People,dc=zeny,dc=com


#测试配置
shell> slaptest -u 
config file testing succeeded

3.Ldap Web-UI安装

管理Ldap
前面安装完OpenLDAP后,大部分用户/用户组管理操作都是通过命令行方式,操作复杂且容易出错,所以在本文中引入LDAP管理工具的安装使用说明。

常见的LDAP管理工具有:
phpLDAPadmin和LDAP Admin Tool,后者是客户端工具,使用到期后需购买或者破解,笔者尝试使用一段时间发现该工具在Mac上很容易崩溃,所以在此推荐phpLDAPadmin,它是基于php开发的一个web平台,有部署过程,但维护相对简单,唯一的遗憾就是此项目只维护到2012年,所以存在较大的兼容性问题

1》安装PHPLDAPAdmin

yum安装phpldapadmin

#防火墙配置(ldapserver的默认端口为389,开通防火墙端口,否则可能登录会出错,或者直接关闭防火墙也可以
shell> firewall-cmd --zone=public --add-port=389/tcp --permanent
shell> firewall-cmd --permanent --add-service=ldap
shell> firewall-cmd --reload

#关闭SELinux
shell> setenforce 0
shell> sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config


#安装epel源
shell> wget http://mirror.centos.org/centos/7/extras/x86_64/Packages/epel-release-7-11.noarch.rpm
shell> rpm -ivh epel-release-7-11.noarch.rpm


#安装phpldapadmin和依赖包
shell> yum -y install httpd php php-ldap php-gd php-mbstring php-pear php-bcmath php-xml
shell> yum -y install phpldapadmin
-----------------------------------------------------------------------------------------------
#下载不下来,可以手动安装phpldapadmin(正常可忽略此步)
shell> wget https://nchc.dl.sourceforge.net/project/phpldapadmin/phpldapadmin-php5/1.2.3/phpldapadmin-1.2.3.tgz
shell> tar -xvzf phpldapadmin-1.2.3.tgz -C /var/www/
shell> cd /var/www/html/
shell> mv phpldapadmin-1.2.3 phpldapadmin
--------------------------------------------------------------------------------------------



#phpldapadmin文件部署到apache
shell> ln -s /usr/share/phpldapadmin /var/www


#配置修改(/etc/phpldapadmin/config.php)
vim /etc/phpldapadmin/config.php    #注意行首不要有空格:
$servers->newServer('ldap_pla');
$servers->setValue('server','name','zeny-Ldap');
$servers->setValue('server','host','192.168.1.10');
$servers->setValue('server','port',389); 
$servers->setValue('server','base',array('dc=zeny,dc=com'));
$servers->setValue('login','auth_type','session');
$servers->setValue('login','attr','dn');
// $servers->setValue('login','attr','uid');    //注释这里 因为修改的是php用"//"注释代码

#配置修改(/etc/httpd/conf.d/phpldapadmin.conf)
vim /etc/httpd/conf.d/phpldapadmin.conf
<Directory /usr/share/phpldapadmin/htdocs>
  <IfModule mod_authz_core.c>
    # Apache 2.4
     Require local
     #Require 172.18.238.34 
     Require all granted
  </IfModule>
  <IfModule !mod_authz_core.c>
    #Apache 2.2
     Order Deny,Allow
     Allow from all
    #Deny from all
    #Allow from 127.0.0.1
    #Allow from ::1
  </IfModule>
</Directory>



#服务启动
shell> systemctl restart httpd


#web访问phpldapadmin
http://192.168.1.10/phpldapadmin/index.php

在这里插入图片描述

docker安装phpldapadmin:
配置的Ldap地址:–env PHPLDAPADMIN_LDAP_HOSTS=192.168.1.10
配置不开启HTTPS:–env PHPLDAPADMIN_HTTPS=false(默认是true)
容器运行以后访问http://host:10101即可

Docker安装

#容器安装
docker run -d --privileged -p 10101:80 --name myphpldapadmin \
--env PHPLDAPADMIN_HTTPS=false --env PHPLDAPADMIN_LDAP_HOSTS=192.168.1.10  \
--detach osixia/phpldapadmin

在这里插入图片描述

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

@Linux搭建LDAP认证服务 的相关文章

  • Jenkins中找不到环境变量

    我想在詹金斯中设置很多变量 我试过把它们放进去 bashrc bash profile and profile of the jenkins用户 但 Jenkins 在构建发生时找不到它们 唯一有效的方法是将所有环境变量放入Jenkinsf
  • 如何查明CONFIG_FANOTIFY_ACCESS_PERMISSIONS是否启用?

    我想利用fanotify 7 http man7 org linux man pages man7 fanotify 7 html我遇到的问题是在某些内核上CONFIG FANOTIFY ACCESS PERMISSIONS不起作用 虽然C
  • 大多数 Linux 系统头文件与 C++ 兼容吗?

    大多数 Linux 系统头文件 API C 兼容吗 今天我试图做这样的事情 include
  • 无法从 jenkins 作为后台进程运行 nohup 命令

    更新 根据下面的讨论 我编辑了我的答案以获得更准确的描述 我正在尝试从詹金斯运行 nohup 命令 完整的命令是 nohup java jar home jar server process 0 35 jar prod gt gt var
  • 从 Python 调用 PARI/GP

    我想打电话PARI GP http pari math u bordeaux fr dochtml gpman html仅从Python计算函数nextprime n 对于不同的n是我定义的 不幸的是我无法得到帕里蟒蛇 http code
  • 加载数据infile,Windows和Linux的区别

    我有一个需要导入到 MySQL 表的文件 这是我的命令 LOAD DATA LOCAL INFILE C test csv INTO TABLE logs fields terminated by LINES terminated BY n
  • 尝试安装 LESS 时出现“请尝试以 root/管理员身份再次运行此命令”错误

    我正在尝试在我的计算机上安装 LESS 并且已经安装了节点 但是 当我输入 node install g less 时 出现以下错误 并且不知道该怎么办 FPaulMAC bin paul npm install g less npm ER
  • 两种情况或 if 哪个更快? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我必须制作一个 非常 轻的脚本 它将接受用户的选项并调用脚本中的函数来执行一些任务 现在我可以使用 IF 和 CASE 选项 但我想知道两
  • 在 Linux 上使用多处理时,TKinter 窗口不会出现

    我想生成另一个进程来异步显示错误消息 同时应用程序的其余部分继续 我正在使用multiprocessingPython 2 6 中的模块来创建进程 我试图用以下命令显示窗口TKinter 这段代码在Windows上运行良好 但在Linux上
  • PHP LDAP 查询获取特定安全组的成员

    我正在努力让 LDAP 查询工作来为我提供安全组的成员 我们的活动目录结构设置为 DC domain DC co dc uk然后 我们有一个名为 公司用户 的 OU 其中有一个用于 IT 和标准的 OU 在这些中我们创建了用户 所以我被设置
  • 使用 sh 运行 bash 脚本

    我有 bash 脚本 它需要 bash 另一个人尝试运行它 sh script name sh 它失败了 因为 sh 是他的发行版中 dash 的符号链接 ls la bin sh lrwxrwxrwx 1 root root 4 Aug
  • jpegtran 优化而不更改文件名

    我需要优化一些图像 但不更改它们的名称 jpegtran copy none optimize image jpg gt image jpg 但是 这似乎创建了 0 的文件大小 当我对不同的文件名执行此操作时 大小仍然完全相同 怎么样 jp
  • PHP 无法打开流:是一个目录

    非常简单的 PHP 脚本 我在我亲自设置的 Ubuntu Web 服务器上的 EE 模板中运行 我知道这与权限有关 并且我已经将我尝试写入的目录的所有者更改为 Apache 用户 我得到的错误是 遇到 PHP 错误 严重性 警告 消息 fi
  • SSE:跨页边界的未对齐加载和存储

    我在页面边界旁边执行未对齐加载或存储之前读过某处 例如使用 mm loadu si128 mm storeu si128内在函数 代码应首先检查整个向量 在本例中为 16 个字节 是否属于同一页 如果不属于同一页 则切换到非向量指令 我知道
  • docker容器大小远大于实际大小

    我正在尝试从中构建图像debian latest 构建后 报告的图像虚拟大小来自docker images命令为 1 917 GB 我登录查看尺寸 du sh 大小为 573 MB 我很确定这么大的尺寸通常是不可能的 这里发生了什么 如何获
  • 查找哪些页面不再与写入时复制共享

    假设我在 Linux 中有一个进程 我从中fork 另一个相同的过程 后forking 因为原始进程将开始写入内存 Linux写时复制机制将为进程提供与分叉进程使用的不同的唯一物理内存页 在执行的某个时刻 我如何知道原始进程的哪些页面已被写
  • 我的线程图像生成应用程序如何将其数据传输到 GUI?

    Mandelbrot 生成器的缓慢多精度实现 线程化 使用 POSIX 线程 Gtk 图形用户界面 我有点失落了 这是我第一次尝试编写线程程序 我实际上并没有尝试转换它的单线程版本 只是尝试实现基本框架 到目前为止它是如何工作的简要描述 M
  • 如何确保应用程序在 Linux 上持续运行

    我试图确保脚本在开发服务器上保持运行 它会整理统计数据并提供网络服务 因此它应该会持续存在 但一天中有几次 它会因未知原因而消失 当我们注意到时 我们只需再次启动它 但这很麻烦 并且某些用户没有权限 或专有技术 来启动它 作为一名程序员 我
  • Linux 上有关 getBounds() 和 setBounds() 的 bug_id=4806603 的解决方法?

    在 Linux 平台上 Frame getBounds 和 Frame setBounds 的工作方式不一致 这在 2003 年就已经有报道了 请参见此处 http bugs java com bugdatabase view bug do
  • 如何使用 GOPATH 的 Samba 服务器位置?

    我正在尝试将 GOPATH 设置为共享网络文件夹 当我进入 export GOPATH smb path to shared folder I get go GOPATH entry is relative must be absolute

随机推荐

  • 例说qt的QLineF::angle() 函数

    QlineF angle 函数在官方文档中如下定义 The angles are measured counter clockwise from a point on the x axis to the right of the origi
  • Apollo 源码解析 —— 客户端 API 配置(二)之 Config

    1 概述 老艿艿 本系列假定胖友已经阅读过 Apollo 官方 wiki 文档 特别是 Java 客户端使用指南 本文接 Apollo 源码解析 客户端 API 配置 一 之一览 一文 分享 Config 接口 及其子类 如下图 2 Con
  • go语言基础23实例

    go语言基础 文章目录 go语言基础 实例1 你好 世界 实例2 变量 实例3 循环 实例4 条件 实例5 条件分支 实例6 数组 实例7 切片 实例8 map映射 实例9 range语法 实例10 函数 实例11 指针 实例12 结构体
  • unbalanced parenthesis

    usr env python coding utf 8 import urllib import urllib2 import random import requests import os sys import MySQLdb from
  • java 自定义注解

    java 自定义注解 一 注解 二 示例 1 interface定义注解 2 getAnnotation获取注解 自定义功能 三 总结 一 注解 java注解可以理解为一种的程序特性的标注 该标注代表某一种功能 可在运行时反射来动态实现功能
  • 高频考察的七大排序算法(个人总结)

    声明 1 本文为我的个人复习总结 并非那种从零基础开始普及知识 内容详细全面 言辞官方的文章 2 由于是个人总结 所以用最精简的话语来写文章 3 若有错误不当之处 请指出 总览 名称 最坏时间复杂度 平均时间复杂度 空间复杂度 冒泡 O N
  • 神经网络学习笔记(六) 广义回归神经网络

    广义回归神经网络 GRNN General Regression Neural Network 广义回归神经网络是基于径向基函数神经网络的一种改进 结构分析 可以看出 这个结构与之前我们所讲过的径向基神经网络非常相似 区别就在于多了一层加和
  • 免费虚拟服务器怎么用,免费虚拟服务器试用一年

    免费虚拟服务器试用一年 内容精选 换一换 共享带宽可以实现多个弹性公网IP共同使用一条带宽 提供区域级别的带宽共享及复用能力 同一区域下的所有已绑定弹性公网IP的弹性云服务器 裸金属服务器 弹性负载均衡等实例共用一条带宽资源 客户有大量业务
  • 【计算机毕业设计】基于微信小程序的付费自习室系统

    毕设帮助 源码交流 技术解答 见文末 一 前言 忙碌的快节奏生活让很多人只能依靠碎片化时间进行充电 无法拿出大块的时间让自己能系统地进行学习 而 氛围感 和 仪式感 是我们独自学习的时候所体会不到的 每年的考试季 各大高校图书馆和公共图书馆
  • FreeRTOS例程4-串口DMA收发不定长数据

    FreeRTOS例程4 串口DMA收发不定长数据 知乎 zhihu com
  • Parameter ‘id‘ not found. Available parameters are [id , param1]

    Parameter id not found Available parameters are id param1 解决办法 1 删除Mapper接口中的 Param param 2 xml中写成 param xxx MyBatis传入参数
  • How to Write Doc Comments for the Javadoc Tool

    How to Write Doc Comments for the Javadoc Tool Javadoc Home Page This document describes the style guide tag and image c
  • data fastboot 擦除_fastboot命令大全

    刷机之家 fastboot命令能够帮助我们进行很多刷机相关操作 高通处理器手机在fastboot模式下使用fastboot exe文件配合fastboot命令就能够进行刷机 通过system img data img等各个分区的刷入从而完成
  • MIPI简介(一)——基础概念介绍

    MIPI全称Mobile Industry Processor Interface 即移动产业处理器接口 MIPI联盟在2003年由ARM Nokia ST TI等公司成立 成员包括手机设备制造商 半导体厂商 软件厂商 系统供应商 外围设备
  • 【记录】Git pull(拉取),push(上传)命令整理(详细)

    前言 博主最近在学习git命令 因为git是一个非常好用的分布式版本管理工具 功能比svn强大 与SVN不同点是Git去中心化 每一个分支都是一个中心 并且支持本地仓库存储 像如今很多大公司都用git做版本控制 话不多说 具体命令整理如下
  • 分享一个漂亮的ASP.NET MVC界面框架

    本文分享一个插件化的界面框架 该框架提供了用户 角色 权限管理功能 也提供了插件的管理和插件中心 下图是该界面框架的样式 全部源码和原理介绍下一篇分享 推荐越多 源码放的越早 呵呵 要使用该界面框架 你可以通过以下地址来下载到界面框架的Vi
  • Figma 笔记 常用快捷键

    画布 画框 gt 图层 gt 形状 快捷键 可在软件中查看快捷键信息 编辑快捷键 功能 L 切换到画线 Shift L 画箭头 O 切换到画圆 R 切换到画矩形 Shift X 填充 与 描边 切换 Ctrl Shift K 导入图片 支持
  • 删除排序数组中的重复项

    文章目录 删除排序数组中的重复项 一 暴力 时间复杂度O n 2 空间复杂度 O 1 二 优化 时间复杂度O n 空间复杂度O 1 删除排序数组中的重复项 给你一个 升序排列 的数组 nums 请你 原地 删除重复出现的元素 使每个元素 只
  • 软件工程中如何设计测试用例

    黑盒测试用例 将程序看做一个黑盒子 只知道输入输出 不知道内部代码 由此设计出测试用例 分为下面几类 等价类划分 把所有的数据按照某种特性进行归类 而后在每类的数据里选取一个即可 等价类测试用例的设计原则 设计一个新的测试用例 使其尽可能多
  • @Linux搭建LDAP认证服务

    文章目录 1 Ldap概述 2 Ldap的用途 3 Ldap的数据模型 1 数据模型叙述 2 目录树简述 3 Ldap目录树说明 2 搭建LDAP服务器 1 环境准备 2 Ldap服务搭建 3 Ldap Web UI安装 1 安装PHPLD