• 对于注定会优秀的人来说,他所需要的,只是时间----博主
  • 手懒得,必受贫穷,手勤的,必得富足----《圣经》
  • 帮助别人,成就自己。愿君在本站能真正有所收获!
  • 如果你在本站中发现任何问题,欢迎留言指正!
  • 宝剑锋从磨砺出,梅花香自苦寒来!
  • 本站开启了防爆破关小黑屋机制,如果您是正常登录但被关进小黑屋,请联系站长解除!

<一>openLDAP学习笔记–服务端快速部署

LDAP eryajf 2周前 (11-03) 94°C 已收录 0个评论
本文预计阅读时间 14 分钟

这应该是第二次发力准备深入研究一下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

将域名解析写入到hosts。

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

2,安装。

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

3,基础配置

  • 生成openldap的管理密码eryajf@123(记下来,下面将用到)
[root@openldap-server ~]# slappasswd
New password: 
Re-enter new password: 
{SSHA}5KqLmqUXoiq/I3nDByp2NKDNjc4STyjW
  • 编写ldif文件(填入上面生成的ssha为olcRootPW密码)
vi chrootpw.ldif 

dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}5KqLmqUXoiq/I3nDByp2NKDNjc4STyjW #填入上面生成的ssha
  • 导入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"
  • 导入基础的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

4,配置openldap的条目

  • 先准备一个openldap 根DN的管理密码(eryajf@456),然后设置你的RootDN名字在openldap的数据库中
[root@openldap-server ~]# slappasswd
New password: 
Re-enter new password: 
{SSHA}sA4tp2fDiU/DVMfYTc65ugQDqaNyt3ai

  • 编写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
  • 导入定义RootDN的ldif文件
ldapmodify -Y EXTERNAL -H ldapi:/// -f chdomain.ldif
  • 编写基础的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
  • 导入基础的domain条目文件
ldapadd -x -D cn=admin,dc=eryajf,dc=net -W -f basedomain.ldif    #这里会要求输入openldap数据库的密码,也就是设置的第二个密码

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

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

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}"

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

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


weinxin
扫码订阅本站,第一时间获得更新
微信扫描二维码,订阅我们网站的动态,另外不定时发送WordPress小技巧,你可以随时退订,欢迎订阅哦~

二丫讲梵 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明<一>openLDAP学习笔记–服务端快速部署
喜欢 (0)
[如果想支持本站,可支付宝赞助]
分享 (0)
eryajf
关于作者:
学无止境,我愿意无止境学。书山有路,我愿意举身投火,淬炼成金!

您必须 登录 才能发表评论!