二丫讲梵 二丫讲梵
首页
  • 最佳实践
  • 迎刃而解
  • Nginx
  • Php
  • Zabbix
  • AWS
  • Prometheus
  • Grafana
  • CentOS
  • Systemd
  • Docker
  • Rancher
  • Ansible
  • Ldap
  • Gitlab
  • GitHub
  • Etcd
  • Consul
  • RabbitMQ
  • Kafka
  • MySql
  • MongoDB
  • OpenVPN
  • KVM
  • VMware
  • Other
  • ELK
  • K8S
  • LLM
  • Nexus
  • Jenkins
  • 随写编年
  • 家人物语
  • 追忆青春
  • 父亲的朋友圈
  • 电影音乐
  • 效率工具
  • 博客相关
  • Shell
  • 前端实践
  • Vue学习笔记
  • Golang学习笔记
  • Golang编程技巧
  • 学习周刊
  • Obsidian插件周刊
关于
友链
  • 本站索引

    • 分类
    • 标签
    • 归档
  • 本站页面

    • 导航
    • 打赏
  • 我的工具

    • 备忘录清单 (opens new window)
    • json2go (opens new window)
    • gopher (opens new window)
    • 微信MD编辑 (opens new window)
    • 国内镜像 (opens new window)
    • 出口IP查询 (opens new window)
    • 代码高亮工具 (opens new window)
  • 外站页面

    • 开往 (opens new window)
    • ldapdoc (opens new window)
    • HowToStartOpenSource (opens new window)
    • vdoing-template (opens new window)
GitHub (opens new window)

二丫讲梵

行者常至,为者常成
首页
  • 最佳实践
  • 迎刃而解
  • Nginx
  • Php
  • Zabbix
  • AWS
  • Prometheus
  • Grafana
  • CentOS
  • Systemd
  • Docker
  • Rancher
  • Ansible
  • Ldap
  • Gitlab
  • GitHub
  • Etcd
  • Consul
  • RabbitMQ
  • Kafka
  • MySql
  • MongoDB
  • OpenVPN
  • KVM
  • VMware
  • Other
  • ELK
  • K8S
  • LLM
  • Nexus
  • Jenkins
  • 随写编年
  • 家人物语
  • 追忆青春
  • 父亲的朋友圈
  • 电影音乐
  • 效率工具
  • 博客相关
  • Shell
  • 前端实践
  • Vue学习笔记
  • Golang学习笔记
  • Golang编程技巧
  • 学习周刊
  • Obsidian插件周刊
关于
友链
  • 本站索引

    • 分类
    • 标签
    • 归档
  • 本站页面

    • 导航
    • 打赏
  • 我的工具

    • 备忘录清单 (opens new window)
    • json2go (opens new window)
    • gopher (opens new window)
    • 微信MD编辑 (opens new window)
    • 国内镜像 (opens new window)
    • 出口IP查询 (opens new window)
    • 代码高亮工具 (opens new window)
  • 外站页面

    • 开往 (opens new window)
    • ldapdoc (opens new window)
    • HowToStartOpenSource (opens new window)
    • vdoing-template (opens new window)
GitHub (opens new window)
  • 最佳实践

  • 迎刃而解

  • Nginx

  • Php

  • Zabbix

  • AWS

  • Prometheus

  • Grafana

  • Loki

  • CentOS

  • Supervisord

  • Systemd

  • Docker

  • Docker-Compose

  • Rancher

  • Ansible

  • OpenLdap

    • ldap服务端快速部署
      • 1,准备工作。
      • 2,安装。
      • 3,基础配置
      • 4,配置 openldap 的条目
      • 5,验证是否正常启动
      • 6,一键部署脚本。
    • web部署和用户管理思路以及密码自助修改
    • 集成Zabbix,Jenkins,GitLab,JumpServer,Harbor,Nginx实战
    • 通过命令行管理用户分组备份等工作
    • ldap常见错误码
    • docker-compose部署openldap时初始化数据的两种方式
    • openLDAP入门系列笔记第一篇--捋透openLDAP的基础概念
    • openLDAP入门系列笔记第二篇--简单认识objectCLass以及常见应用
    • openLDAP入门系列笔记第三篇--ldapsearch查询语法整理入门
  • GitLab

  • GitHub

  • Etcd

  • Consul

  • RabbitMQ

  • Kafka

  • Mysql

  • MongoDB

  • OpenVPN

  • Kvm

  • VMware

  • 配置文件详解

  • Other

  • 运维观止
  • OpenLdap
二丫讲梵
2019-11-03
目录

ldap服务端快速部署

文章发布较早,内容可能过时,阅读注意甄别。

这应该是第二次发力准备深入研究一下 ldap 这个东东,以往的工作生活中,也曾着手研究过,当时照着网上的文档也算是部署了出来,接着进入实际配置的时候,立刻就被其中各个名词给迷惑,瞬间坠入五里雾,晕晕乎乎不得其法。

这次幸得一些工作中实际场景的借鉴,以及博客读者杨哥的倾情分享,让我彻底来了激情,一股脑研究下去,无论艰辛,哪管黑夜白天,现在,不敢说自己已经精通,但是日常运维使用,基本上是足够了,特别来进行分享,希望通过几篇文章,能够深入浅出地把这个好用且大大提高效率的工具给讲明白。

我想,之前之所以不能够拿下他,还是方法不够得当,在还没有熟悉软件的时候,就被网上许多介绍概念的文章给绕晕,因此,这次的文章,则先把各种概念抛到一边,尽管照着文档做下去,只把文档做上两三遍,则所谓的七七八八的概念,也就自然了解了。

那么,废话不多说,直接来进入部署工作。

# 1,准备工作。

准备一台环境干净的CentOS-7.4主机,主机 IP 为10.3.0.42。

关闭防火墙,selinux 这些就不细说了。

我个人的域名为 eryajf.net,我给 ldap 服务配置一个域名为ldap.eryajf.net。各位跟随文章做的同学,暂时可以先与我保持一致,以免出现不可预知的错误。

时间同步。

yum -y install ntpdate && ntpdate -u cn.pool.ntp.org
1

将域名解析写入到 hosts。

echo "10.3.0.42    ldap.eryajf.net" >> /etc/hosts
1

# 2,安装。

  • yum 安装 openldap,并采用cn=config方式(修改配置会立即生效,不用重启 slapd)
yum install -y openldap openldap-clients openldap-devel openldap-servers compat-openldap migrationtools
1
  • 准备 BDB 数据库文件
cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
chown ldap:ldap /var/lib/ldap/DB_CONFIG
1
2
  • 启动并加入开机自启动
systemctl start slapd
systemctl enable slapd
1
2

# 3,基础配置

  • 生成 openldap 的管理密码eryajf@123(记下来,下面将用到)
[root@openldap-server ~]# slappasswd
New password:
Re-enter new password:
{SSHA}5KqLmqUXoiq/I3nDByp2NKDNjc4STyjW
1
2
3
4
  • 编写 ldif 文件(填入上面生成的 ssha 为 olcRootPW 密码)
vi chrootpw.ldif
dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}5KqLmqUXoiq/I3nDByp2NKDNjc4STyjW #填入上面生成的ssha
1
2
3
4
5
  • 导入 ldif 文件
[root@openldap-server ~]# ldapadd -Y EXTERNAL -H ldapi:/// -f chrootpw.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={0}config,cn=config"
1
2
3
4
5
  • 导入基础的 Schemas (openldap 的基础模块在/etc/openldap/schema/目录里面)
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif
1
2
3

# 4,配置 openldap 的条目

  • 先准备一个 openldap 根 DN 的管理密码(eryajf@456),然后设置你的 RootDN 名字在 openldap 的数据库中
[root@openldap-server ~]# slappasswd
New password:
Re-enter new password:
{SSHA}sA4tp2fDiU/DVMfYTc65ugQDqaNyt3ai
1
2
3
4
  • 编写 RootDN 的 ldif 文件(cn=admin,dc=eryajf,dc=net)
vi chdomain.ldif
# replace to your own domain name for "dc=***,dc=***" section
# specify the password generated above for "olcRootPW" section
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=eryajf,dc=net" read by * none
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=eryajf,dc=net
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=admin,dc=eryajf,dc=net
dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}sA4tp2fDiU/DVMfYTc65ugQDqaNyt3ai
dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange by
  dn="cn=admin,dc=eryajf,dc=net" write by anonymous auth by self write by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by dn="cn=admin,dc=eryajf,dc=net" write by * read
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
  • 导入定义 RootDN 的 ldif 文件
ldapmodify -Y EXTERNAL -H ldapi:/// -f chdomain.ldif
1
  • 编写基础的 domain 条目的 ldif
vi basedomain.ldif
# replace to your own domain name for "dc=***,dc=***" section
dn: dc=eryajf,dc=net
objectClass: top
objectClass: dcObject
objectclass: organization
o: eryajf net
dc: eryajf
dn: cn=admin,dc=eryajf,dc=net
objectClass: organizationalRole
cn: admin
description: Directory admin
dn: ou=People,dc=eryajf,dc=net
objectClass: organizationalUnit
ou: People
dn: ou=Group,dc=eryajf,dc=net
objectClass: organizationalUnit
ou: Group
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
  • 导入基础的 domain 条目文件
ldapadd -x -D cn=admin,dc=eryajf,dc=net -W -f basedomain.ldif    #这里会要求输入openldap数据库的密码,也就是设置的第二个密码
1

# 5,验证是否正常启动

#验证查看slapd服务是否启动,并监听389端口
ps -ef |grep slapd
ss -tnl |grep 389
#查看服务器openldap目录树信息
ldapsearch -x -b "dc=eryajf,dc=net" -H ldap://127.0.0.1
1
2
3
4
5

到这里,服务端就部署好了,整个过程不算复杂,只需要细心做好配置即可。

img (opens new window)

# 6,一键部署脚本。

在 GitHub 上也有人配好的 docker 方案,所以事实上也可以通过 docker 来进行部署。docker 部署非常简单,首先在干净的主机上安装 docker 环境,然后运行如下脚本。

#!/bin/bash -e
SERVICE=ldap-service
HOST_NAME=ldap-server
LDAP_DOMAIN=eryajf.net
LDAP_DC=eryajf
LDAP_DC_ORG=net
NETWORK_ADAPTER=eth0
PASSWORD=123465
OPENLDAP="1.2.0"
PHPLDAPADMIN="0.7.1"
HTTPS_PORT=8080
OPENLDAP_PORT=389
docker run \
    -p ${OPENLDAP_PORT}:389 \
    --name ${SERVICE} \
    --hostname ${HOST_NAME} \
    --env LDAP_ORGANISATION="WPT-Group" \
    --env LDAP_DOMAIN=${LDAP_DOMAIN} \
    --env LDAP_ADMIN_PASSWORD=${PASSWORD} \
    --detach osixia/openldap:${OPENLDAP}
docker run \
    -p ${HTTPS_PORT}:80 \
    --name ${SERVICE}-admin \
    --hostname ${HOST_NAME}-admin \
    --link ${SERVICE}:${HOST_NAME} \
    --env PHPLDAPADMIN_LDAP_HOSTS=${HOST_NAME} \
    --env PHPLDAPADMIN_HTTPS=false \
    --detach \
    osixia/phpldapadmin:${PHPLDAPADMIN}
sleep 1
echo "-----------------------------------"
PHPLDAP_IP=$(docker inspect -f "{{ .NetworkSettings.IPAddress }}" ${SERVICE})
docker exec ${SERVICE} ldapsearch -x -H ldap://${PHPLDAP_IP}:389 -b "dc=${LDAP_DC},dc=${LDAP_DC_ORG}" -D "cn=admin,dc=${LDAP_DC},dc=${LDAP_DC_ORG}" -w ${PASSWORD}
echo "-----------------------------------"
PUB_IP=$(ifconfig ${NETWORK_ADAPTER} |grep "inet"|awk '{print $2}')
echo "Go to: https://${PUB_IP}:${HTTPS_PORT}"
echo "Login DN: cn=admin,dc=${LDAP_DC},dc=${LDAP_DC_ORG}"
echo "Password: ${PASSWORD}"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38

创建完成之后,即可投入使用。

本文介绍了服务端的部署流程,日常我们管理的时候,可以通过这种命令行的方式进行管理,不过事实上大多时候,大家更习惯于在 ldap 对应的 web 管理端进行配置,所以下一篇文章将介绍 web 管理端的部署配置,并介绍如何开放出一种用户自助更改密码的方案。

微信 支付宝
#ldap#install
上次更新: 2024/07/04, 22:40:37
ansible-playbook编排使用tips
web部署和用户管理思路以及密码自助修改

← ansible-playbook编排使用tips web部署和用户管理思路以及密码自助修改→

最近更新
01
学习周刊-总第209期-2025年第18周
05-03
02
学习周刊-总第208期-2025年第17周
04-24
03
Go开发实践之Gin框架将前端的dist目录embed到二进制
04-22
更多文章>
Theme by Vdoing | Copyright © 2017-2025 | 点击查看十年之约 | 浙ICP备18057030号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式