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

    • 导航
    • 打赏
  • 我的工具

    • 备忘录清单 (opens new window)
    • 网站状态 (opens new window)
    • json2go (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
  • Prometheus
  • Grafana
  • CentOS
  • Systemd
  • Docker
  • Rancker
  • Ansible
  • Ldap
  • Gitlab
  • GitHub
  • Etcd
  • Consul
  • RabbitMQ
  • Kafka
  • MySql
  • MongoDB
  • OpenVPN
  • KVM
  • VMware
  • Other
  • ELK
  • K8S
  • Nexus
  • Jenkins
  • 随写编年
  • 家人物语
  • 追忆青春
  • 父亲的朋友圈
  • 电影音乐
  • 效率工具
  • 博客相关
  • Shell
  • 前端实践
  • Vue学习笔记
  • Golang学习笔记
  • Golang编程技巧
  • 学习周刊
  • Obsidian插件周刊
关于
友链
  • 分类
  • 标签
  • 归档
  • 本站页面

    • 导航
    • 打赏
  • 我的工具

    • 备忘录清单 (opens new window)
    • 网站状态 (opens new window)
    • json2go (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

  • Prometheus

  • Grafana

  • 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以及常见应用
  • 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
上次更新: 2022/08/19, 09:49:20

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

最近更新
01
学习周刊-总第91期-2023年第04周
01-27
02
学习周刊-总第90期-2023年第03周
01-20
03
学习周刊-总第89期-2023年第02周
01-13
更多文章>
Theme by Vdoing | Copyright © 2017-2023 | 点击查看十年之约 | 浙ICP备18057030号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式