小白级CentOS下yum方式安装OpenLDAP(SSL)及phpLDAPadmin部署教程

背景

LDAP听上去耳熟能详,可真要用Java去写一个通用性高的数据同步服务好像需要了解的东西又得特别多,能查到的东西又多是断章取义。最近断断续续的折腾了3周,基本上搞了一个这玩意,打算陆续分享给大家吧,由于相关东西不是一篇能讲完的,所以打算搞个小专题吧,希望给喜欢抄作业的朋友们有所帮助。

首先分享LDAP的部署,关于OpenLDAP部署的文章一搜一大把,但是出于运气不佳(你所找到文章本身描述的不全或者断章取义)很可能不能完全走下去或者碰到各种问题,这里我写一个step by step的小白手册给大家吧(要是按照这种程度的文档还部署不出来,那我也没有办法了,我按照小白角度去写的),以下步骤和内容我也是折腾了2天,综合了好几篇文章所走出的安装步骤,为了写这篇文章,我刻意重置了服务器从0开始进行了再次部署(有时候很想吐槽,为啥每次我搜到的文章,需要折腾几次还不一定成功,既然要分享出来,为什么不能详细和透彻简单些呢?)。

原创不易、打字不易、贴图不易、整理不易,动动你发财的小手点赞不易。

1 安装OpenLDAP

openldap涉及到以下东东:

 yum list all | grep openldap

在这里插入图片描述

1.1 OpenLDAP及相关组件安装

yum install -y openldap openldap-servers openldap-clients compat-openldap openldap-devel migrationtools

在这里插入图片描述
备注:
1、安装目录:/etc/openldap
2、从OpenLDAP 2.4.x下已废弃slapd.conf文件,而配置文件被目录slapd.d所取代,slapd.d中的配置不建议手工修改,建议的方式是重新生成;

1.2 设置管理员密码

slappasswd 

在这里插入图片描述
备注:
1、密码密文有盐,因此相同明文密码的密文每次都不相同。
2、密码密文记录下来,后续配置需要用到。

1.3 配置LDAP服务

1.3.1 备份slapd.d

mv slapd.d slapd.d.bak
mkdir slapd.d

在这里插入图片描述

1.3.2 定义slapd.ldif

cp -r /usr/share/openldap-servers/slapd.ldif /etc/openldap

在这里插入图片描述

vi slapd.ldif

line 83改为

include: file:///etc/openldap/schema/core.ldif
include: file:///etc/openldap/schema/collective.ldif
include: file:///etc/openldap/schema/corba.ldif
include: file:///etc/openldap/schema/cosine.ldif
include: file:///etc/openldap/schema/duaconf.ldif
include: file:///etc/openldap/schema/dyngroup.ldif
include: file:///etc/openldap/schema/inetorgperson.ldif
include: file:///etc/openldap/schema/java.ldif
include: file:///etc/openldap/schema/misc.ldif
include: file:///etc/openldap/schema/nis.ldif
include: file:///etc/openldap/schema/openldap.ldif
include: file:///etc/openldap/schema/pmi.ldif
include: file:///etc/openldap/schema/ppolicy.ldif

在这里插入图片描述
备注:
1、关于LDAP的一些基础概念(Schema、ldif、DN),后续我再单说吧,这里先简单理解上面inclue的是一些常用的schema:collective(集合相关)、corba(openldap的一些通用类,例如:ou)、cosine(证书相关)……

1.3.3 修改域名/根DN(管理员)信息/配置管理员密码

vi slapd.ldif
olcSuffix: dc=my-domain,dc=com
olcRootDN: cn=Manager,dc=my-domain,dc=com
olcRootDN下增加一行:olcRootPW: [密码密文]

olcSuffix、olcRootDN 按照实际修改,olcSuffix一般可以为公司名称,例如:olcSuffix: dc=baidu,dc=com;olcRootDN可以认为是管理员DN信息,例如:olcRootDN: cn=baiduLdapManager,dc=baidu,dc=com;olcRootPW为1.2步中的密码密文;
在这里插入图片描述

1.3.4 生成slapd配置文件

cd /etc/openldap
slapadd -n 0 -F slapd.d -l slapd.ldif
chown -R ldap:ldap slapd.d

在这里插入图片描述
备注:
1、成功提示:_#################### 100.00% eta none elapsed none fast! 如果不是100%一般是slapd.ldif内容有错误导致。
2、需要把权限赋给ldap用户的原因是,安装ldap时会创建ldap用户,并以此用户进行启动。

1.3.5 配置数据库

cp -r /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
chown -R ldap:ldap /var/lib/ldap/

备注:
1、数据库目录与1.3.3中截图的olcDbDirectory配置是对应的(olcDbDirectory: /var/lib/ldap);
2、至此OpenLDAP安装完毕,启动:参考3.2章

2 安装phpLDAPadmin

2.1 安装httpd

yum install -y httpd

在这里插入图片描述

2.2 安装phpldapadmin

2.2.1 安装

yum -y install epel-release
yum install -y phpldapadmin

在这里插入图片描述

2.2.2 修改授权访问

vim /etc/httpd/conf.d/phpldapadmin.conf

备注:
Require local 上增加一行:Require all granted
在这里插入图片描述

2.2.3 修改登录方式

vim /etc/phpldapadmin/config.php

注释398行,打开387

397 $servers->setValue('login','attr','dn');
398 //$servers->setValue('login','attr','uid');

在这里插入图片描述

3 启动

3.1 启动phpldapadmin

启动
设置开机自启

systemctl start httpd.service
systemctl enable httpd.service

设置完成后,浏览器访问:http://{ip}/phpldapadmin/,点击登录,输入1.3.3设置的DN及密码,后可以看到:This base cannot be created with PLA。最后,参考:4 初始化根DN,完成最后一步;
在这里插入图片描述
在这里插入图片描述

3.2 启动OpenLDAP

启动
设置开机自启
查看状态

systemctl start slapd.service

systemctl enable slapd.service

systemctl status slapd

在这里插入图片描述
备注:
1、默认监听端口为:389(LDAPS:默认端口636,部署方式参考:5.2章: LDAPS部署)

4 初始化根DN

4.1 创建根DN

1、在/etc/openldap/目录下,创建一个base.ldif文件
在这里插入图片描述

2、base.ldif文件中,写入如下信息,示例:

dn: dc=bossFriday,dc=cn
o: bossFriday
objectclass: dcObject
objectclass: organization
dc: bossFriday

3、使用ldapadd命令创建LDAP根节点,示例:

ldapadd -x -D "cn=bossFridayAdmin,dc=bossFriday,dc=cn" -W -f base.ldif

在这里插入图片描述
之后重新登录phpLDAPadmin后可以看到baseDN创建成功:
在这里插入图片描述

4.2 使用ldapadd导入schema

ldapadd -Y EXTERNAL -H ldapi:/// -D "cn-config" -f /etc/openldap/schema/duaconf.ldif

5 附录

5.1 LDAP基础

DN

Distinguished Name,惟一辨别名,类似于Linux文件系统中的绝对路径,每个对象都有一个惟一的名称,如“uid= tom,ou=market,dc=example,dc=com”,在一个目录树中DN总是唯一。

ldif

可以理解为遵循某语法要求的文本文件(不符合,执行时会提示语法错误),可以用来完成数据的各种操作(导入,导出,添加,删除,修改……)

  • 每行结尾不允许有空格或其他不可见字符
  • 以#号开头的为注释行
  • 赋值方式为:属性:[空格]值,值如果需要使用空格,则使用双引号包裹值,例如:“xxx xxx”
  • 通过空行分隔多个条目
  • 多行文本使用换行空格表示
  • -复用dn示例:
dn: cn=Babs Jensen,dc=example,dc=com
changetype: modify
add: givenName
givenName: Barbara
givenName: babs
-
replace: description
description: the fabulous babs
-
delete: sn
sn: jensen
-

Schema

Schema可以简单的理解为对象的一种描述形式,它由:Object class、Attribute、Syntax组成:

Object class
  • objectclass定义了一个类别
  • 使用schema描述
  • 支持继承和多继承
  • 构成:名称(NAME)、说明(DESC)、类型(STRUCTURAL或AUXILARY)、属性(必须属性(MUST)、可选属性(MAY))
Attribute
  • 构成:名称、数据类型、单值/多值…
  • 常用属性:cn(Common Name)、dc (Domain Component)、giveName(不能包括姓)、I(地理区域名称)、o(orgnazationName)、ou (Organizational Unit)、sn(姓)、uid(通常是user account)
Syntax

语法是遵从X.500中数据约束的定义,常用类型如下,全定义参考:
https://ldap.com/ldap-oid-reference-guide/

filter语法

运算符:

  • 等于(EQUAL TO): =
  • 大于等于(Greater than): >=
  • 小于等于(Less than): <=
  • 通配符(wildcard): *
  • 逻辑与(logical AND): &
  • 逻辑或(logical OR): |
  • 逻辑非(logical NOT): !

举例:

  • 查询所有name为张三,sex为男的用户: (&(name=张三)(sex=男))
  • 查询所有age不为28的用户: (!(age=28))
  • 查询所有age为28,并且name不为张三的用户: (&(age=28)(!(name=张三)))
  • 查询所有age为28,或者name为张三的用户:(|(age=28)(name=张三))
  • 查询所有name的姓为张,或者desc包含描述的用户: (|(name=张*)(desc=描述))
  • 查询所有有email为空的用户:(email=)
  • 查询所有没有desc属性的用户: (!(desc=*))
  • 查询所有有desc属性的用户:(desc=*)

5.2 LDAPS部署

5.2.1 安装openssl

yum -y install openssl

5.2.2 生成CA私钥

cd /etc/pki/CA
(umask 077; openssl genrsa -out private/cakey.pem 2048)

在这里插入图片描述
备注:
1、cakey.pem为CA私钥文件;

5.2.3 生成CA公钥

openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3650 -subj "/C=CN/ST=Beijing/L=Beijing/O=bossFriday.cn/OU=bossFriday/CN=10.9.162.174"

在这里插入图片描述
备注:
1、这里直接是一步指定:Country Name、Province Name等(Email Address可以不填写);
2、cacert.pem 为生成的CA公钥文件;

5.2.4 创建index.txt和serial文件

touch index.txt
echo "01" > serial

在这里插入图片描述

5.2.5 获取LDAP证书

 cd /etc/openldap/certs/
 (umask 077; openssl genrsa -out openldapkey-174.pem 2048)
 openssl req -new -key openldapkey-174.pem -out openldap-174.csr -days 3650 -subj "/C=CN/ST=Beijing/L=Beijing/O=bossFriday.cn/OU=bossFriday/CN=10.9.162.174"

在这里插入图片描述
备注:
1、openldapkey-174.pem、openldap-174.csr 证书文件名自己随意取并知道是那台服务器的证书即可。
2、CN=10.9.162.174中是使用IP地址进行生成证书生成,将来连接的时候需要保持一致(这里采用IP地址做为示例)。
3、OU=bossFriday 随便填写,但/C=CN/ST=Beijing/L=Beijing/O=bossFriday.cn 需要与根证书一致;

5.2.6 签发证书

cd /etc/pki/CA
openssl ca -in /etc/openldap/certs/openldap-174.csr -out certs/openldapcert-174.pem -days 3650

在这里插入图片描述

5.2.7 配置openLDAP

1、复制证书到openldap安装目录下,并赋权限:

cp /etc/pki/CA/certs/openldapcert-174.pem /etc/pki/CA/cacert.pem /etc/openldap/certs/
chown -R ldap:ldap /etc/openldap/certs
chmod -R 0400 /etc/openldap/certs/{cacert.pem,openldapcert-174.pem,openldapkey-174.pem}

在这里插入图片描述
2、配置slapd.ldif

cd /etc/openldap/
vi slapd.ldif

设置TLS settings为:

olcTLSCACertificateFile: /etc/openldap/certs/cacert.pem
olcTLSCertificateFile: /etc/openldap/certs/openldapcert-174.pem
olcTLSCertificateKeyFile: /etc/openldap/certs/openldapkey-174.pem
olcTLSVerifyClient: never

在这里插入图片描述
备注:
olcPidFile的下一行注意不要有空格!

3、修改/etc/sysconfig/slapd

systemctl stop slapd
vi /etc/sysconfig/slapd

 // 修改下面的一行
SLAPD_URLS="ldapi:/// ldap:/// ldaps:///"

在这里插入图片描述

4、重新生成配置

cd /etc/openldap
rm -rf /etc/openldap/slapd.d/*
slapadd -n 0 -F slapd.d -l slapd.ldif
chown -R ldap:ldap slapd.d
systemctl daemon-reload && systemctl start slapd

在这里插入图片描述

备注:
1、重新生成配置时前强烈建议备份原有配置(slapd.d/*、slapd.ldif)

在这里插入图片描述
备注:
从上面可以看到ldap默认端口:389和ldaps默认端口:636均为监听状态。我这边搭建该环境的目的是当个测试环境使用,ldap、ldaps都是要进行测试的,代码中他们两者的建连是有差异的,那么至此测试环境搭建完毕!

5.3 卸载

卸载OpenLDAP

#停服务
systemctl stop slapd
systemctl disable slapd

#卸载
yum -y remove openldap-servers openldap-clients

#删除残留文件
rm -rf /var/lib/ldap

#删除ldap用户
userdel ldap

#删除openldap目录
rm -rf /etc/openldap
  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BossFriday

原创不易,请给作者打赏或点赞!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值