Ldap安装部署


前言

文章不包含理论知识,自己学习哦。
这破玩意设计理念很垃圾,学习起来也很费劲,但是很多组件都使用这个服务,所以简单学习一下就可以了😓。

环境信息:CentOS 7.9
部署模式:单机模式部署 (非主从模式,自行研究)
关于可视化:三种选择
1.phpldapadmin +http ,http提供web ui。 (我选的这种)
2.在用户的电脑上安装ldap admin,远程访问。(不喜欢)
3.go_ldap_admin ,github上用go开发的ldap可视化。(还没研究)


一、安装

#安装
# openldap            主程序
# openldap-clients    客户端
# openldap-servers    服务器
# migrationtools      迁移工具(用于 将手工编写的文件,转换为ldap格式)
[root@bigdata1 ~]$ yum install -y openldap openldap-clients openldap-servers migrationtools

#查看版本
[root@bigdata1 ~]$ slapd -VV 
@(#) $OpenLDAP: slapd 2.4.44 (Feb 23 2022 17:11:27) $
        mockbuild@x86-01.bsys.centos.org:/builddir/build/BUILD/openldap-2.4.44/openldap-2.4.44/servers/slapd
        

#设置管理员密码
[root@bigdata1 ~]$ slappasswd -s 123456
{SSHA}zDe1S8jBc2poLrNlzTbyalEDfpsgZAc3

二、修改配置文件

打开配置文件的第一行就写了 DO NOT EDIT!! Use ldapmodify
正常来说是不应该直接修改配置文件的,应该通过ldapmodify方式修改,但是太麻烦,我这样修改配置文件,在验证的时候也能通过🤷🏻‍♀️,反正后面我再也不想碰这破玩意了。
如果想要安装正确的方式修改配置文件可以参考如下博客,在配置ldap那块有写。

我花了一个五一终于搞懂了OpenLDAP
说来也巧,我也是大五一假期搞的这玩意,真特娘糟心。

olcDatabase={1}monitor.ldif

#修改配置文件
[root@bigdata1 ~]# vim /etc/openldap/slapd.d/cn\=config/olcDatabase\=\{1\}monitor.ldif 

如果你想修改总节点的名称和管理员的名称,就修改oldAccess的dn.base="cn=Manager,dc=my-domain,dc=com"部分
其实没必要修改哈,没啥🐦用。我的就没改 ,如果你要改的话 后续的内容自己注意一下。
cn=Manager  就是管理员的名称
dc=my-domain,dc=com就是 总节点的名称 

#----------------------------------------- 配置文件 -------------------------------------------------
# AUTO-GENERATED FILE - DO NOT EDIT!! Use ldapmodify.
# CRC32 c456c56b
dn: olcDatabase={1}monitor
objectClass: olcDatabaseConfig
olcDatabase: {1}monitor
olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=extern
 al,cn=auth" read by dn.base="cn=Manager,dc=my-domain,dc=com" read by * none
structuralObjectClass: olcDatabaseConfig
entryUUID: e5dfcef8-98fa-103e-8d8b-79890babc548
creatorsName: cn=config
createTimestamp: 20240427155939Z
entryCSN: 20240427155939.695658Z#000000#000#000000
modifiersName: cn=config
modifyTimestamp: 20240427155939Z

olcDatabase={2}hdb.ldif

#修改配置文件
[root@bigdata1 ~]# vim /etc/openldap/slapd.d/cn=config/olcDatabase\=\{2\}hdb.ldif

注意 olcRootPW这条是新加的。就是上面生成的密码
如果你上面修改了 管理员名称和总节点名称 这里也需要同步修改 
olcRootDN: cn=Manager,dc=my-domain,dc=com

#----------------------------------------- 配置文件 -------------------------------------------------
# AUTO-GENERATED FILE - DO NOT EDIT!! Use ldapmodify.
# CRC32 da5dcab4
dn: olcDatabase={2}hdb
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcDatabase: {2}hdb
olcDbDirectory: /var/lib/ldap
olcSuffix: dc=my-domain,dc=com
olcRootDN: cn=Manager,dc=my-domain,dc=com
olcRootPW: {SSHA}zDe1S8jBc2poLrNlzTbyalEDfpsgZAc3
olcDbIndex: objectClass eq,pres
olcDbIndex: ou,cn,mail,surname,givenname eq,pres,sub
structuralObjectClass: olcHdbConfig
entryUUID: e5dfd20e-98fa-103e-8d8c-79890babc548
creatorsName: cn=config
createTimestamp: 20240427155939Z
entryCSN: 20240427155939.695737Z#000000#000#000000
modifiersName: cn=config
modifyTimestamp: 20240427155939Z

验证配置文件是否正确

#检查配置文件修改   我只修改了olcDatabase={2}hdb.ldif,所以只检查了这个文件
[root@bigdata1 cn=config]# slaptest -u

在这里插入图片描述

三、 启动 + 开机自启

#设置slapd自启
[root@bigdata1 ~]# systemctl enable slapd
Created symlink from /etc/systemd/system/multi-user.target.wants/slapd.service to /usr/lib/systemd/system/slapd.service.

#启动slapd
[root@bigdata1 ~]# systemctl start slapd

#查看状态
[root@bigdata1 ~]# systemctl status slapd

#查看端口占用
[root@bigdata1 ~]# netstat -antup | grep 389
tcp        0      0 0.0.0.0:389             0.0.0.0:*               LISTEN      23079/slapd         
tcp6       0      0 :::389                  :::*                    LISTEN      23079/slapd 

四、配置OpenLdap数据库

#配置ldap数据库
[root@bigdata1 ~]# cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG

#修改文件夹所有者  如果已经是ldap了可以不执行
[root@bigdata1 ~]# chown ldap:ldap -R /var/lib/ldap

#修改授权为700
[root@bigdata1 ~]# chmod 700 -R /var/lib/ldap

#看一下目录结构
[root@bigdata1 ~]#  ll /var/lib/ldap/
total 376
-rw-r--r-- 1 ldap ldap     2048 Mar  1 20:47 alock
-rw------- 1 ldap ldap   303104 Mar  1 20:47 __db.001
-rw------- 1 ldap ldap    40960 Mar  1 20:47 __db.002
-rw------- 1 ldap ldap    49152 Mar  1 20:47 __db.003
-rw-r--r-- 1 root root      845 Mar  1 20:54 DB_CONFIG
-rw------- 1 ldap ldap     8192 Mar  1 20:47 dn2id.bdb
-rw------- 1 ldap ldap    32768 Mar  1 20:47 id2entry.bdb
-rw------- 1 ldap ldap 10485760 Mar  1 20:47 log.0000000001

#导入ldap存储信息的格式schema
[root@bigdata1 ~]# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/core.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=core,cn=schema,cn=config"

[root@bigdata1 ~]# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=cosine,cn=schema,cn=config"

[root@bigdata1 ~]# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=nis,cn=schema,cn=config"

[root@bigdata1 ~]# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=inetorgperson,cn=schema,cn=config"

五、导入条目

如果想要从web端查看导入的条目,可以先跳转的第六步 安装phpldapadmin

导入结构节点

#1.从系统角度考虑登录权限问题。
#公司有诸多系统 OA系统、HR系统、金蝶系统、大数据平台
#正常情况下:
#    <OA系统>是所有入职的人都可以登录的。
#    <金蝶系统>只有财务部门的人可以登录。
#    <大数据平台>只有信息技术部的人可以登录。
#实际情况下: 
#    不同部门的系统之间是有交互的,以信息技术部门为例
#    信息技术部的大数据平台会抽取金蝶系统的后台财务数据,生成管理报表和核算报表并提供回去给财务部门的人。


#2.从大数据平台的组件角度考虑登录权限问题。
#大数据平台具有诸多服务(Hdfs、Hive、Sqoop、Elasticsearch、Kylin等)。
#正常情况下: 所有人都会具有所有组件的登录权限
#实际情况下: 因岗位分工的不同,也会有区别,etl开发只允许访问hdfs、hive组件。后端开发只允许访问Elasticsearch组件。

综上考虑两种角度,设计ldap的结构节点

#--------------------------------base.ldif 文件开始------------------------------------

#根 
dn: dc=my-domain,dc=com
dc: my-domain
objectClass: top
objectClass: domain
objectClass: domainRelatedObject
associatedDomain: my-domain.com

#公司整体 所有人 登录OA
dn: ou=People,dc=my-domain,dc=com
ou: People
objectClass: top
objectClass: organizationalUnit
objectClass: domainRelatedObject
associatedDomain: my-domain.com

#公司整体 所有人对应的组  不知道使用场景
dn: ou=Group,dc=my-domain,dc=com
ou: Group
objectClass: top
objectClass: organizationalUnit
objectClass: domainRelatedObject
associatedDomain: my-domain.com

#系统
dn: ou=Systems,dc=my-domain,dc=com
ou: Systems
objectClass: top
objectClass: organizationalUnit
objectClass: domainRelatedObject
associatedDomain: my-domain.com

dn: ou=HrSystem,ou=Systems,dc=my-domain,dc=com
ou: HrSystem
objectClass: top
objectClass: organizationalUnit
objectClass: domainRelatedObject
associatedDomain: my-domain.com

dn: ou=JinDieSystem,ou=Systems,dc=my-domain,dc=com
ou: JinDieSystem
objectClass: top
objectClass: organizationalUnit
objectClass: domainRelatedObject
associatedDomain: my-domain.com

#服务
dn: ou=Services,dc=my-domain,dc=com
ou: Services
objectClass: top
objectClass: organizationalUnit
objectClass: domainRelatedObject
associatedDomain: my-domain.com

dn: ou=Hive,ou=Services,dc=my-domain,dc=com
ou: Hive
objectClass: top
objectClass: organizationalUnit
objectClass: domainRelatedObject
associatedDomain: my-domain.com

dn: ou=Hdfs,ou=Services,dc=my-domain,dc=com
ou: Hdfs
objectClass: top
objectClass: organizationalUnit
objectClass: domainRelatedObject
associatedDomain: my-domain.com

dn: ou=Yarn,ou=Services,dc=my-domain,dc=com
ou: Yarn
objectClass: top
objectClass: organizationalUnit
objectClass: domainRelatedObject
associatedDomain: my-domain.com

#--------------------------------base.ldif 文件结束------------------------------------

#导入结构条目  导入后入下图
ldapadd -x -w "123456" -D "cn=Manager,dc=my-domain,dc=com" -f /root/base.ldif

在这里插入图片描述

导入数据

#修改ldif文件脚本的如下几个位置 
[root@bigdata1 ~]# vim /usr/share/migrationtools/migrate_common.ph
$DEFAULT_MAIL_DOMAIN = "my-domain.com";
$DEFAULT_BASE = "dc=my-domain,dc=com";
$EXTENDED_SCHEMA = 1;


#添加一些测试用户测一下效果  ,我只设置了ldapuser1的密码 
[root@bigdata1 ~]# groupadd ldapgroup1
[root@bigdata1 ~]# groupadd ldapgroup2
[root@bigdata1 ~]# useradd -g ldapgroup1 ldapuser1
[root@bigdata1 ~]# useradd -g ldapgroup2 ldapuser2

#注意只对ldapuser1 设置了密码
[root@bigdata1 ~]# echo "123456" | passwd --stdin ldapuser1
Changing password for user ldapuser1.
passwd: all authentication tokens updated successfully.

#提取用户以及用户组属性
[root@bigdata1 ~]# grep ":10[0-9][0-9]" /etc/passwd | grep ldap > /root/users
[root@bigdata1 ~]# grep ":10[0-9][0-9]" /etc/group | grep ldap > /root/groups

#生成ldap用户以及用户组属性
[root@bigdata1 ~]# /usr/share/migrationtools/migrate_passwd.pl /root/users > /root/users.ldif
[root@bigdata1 ~]# /usr/share/migrationtools/migrate_group.pl /root/groups > /root/groups.ldif


#查看users.ldif   注意ldapuser1和ldapuser2的密码的区别
[root@bigdata1 ~]# cat /root/users.ldif
#-------------------------------------------文件开始-------------------------------------------
dn: uid=ldapuser1,ou=People,dc=my-domain,dc=com
uid: ldapuser1
cn: ldapuser1
sn: ldapuser1
mail: ldapuser1@my-domain.com
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword: {crypt}$1$EHFO2QMH$KI5O73moEO9U3gN/NZDoB0
shadowLastChange: 19844
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 1004
gidNumber: 1005
homeDirectory: /home/ldapuser1

dn: uid=ldapuser2,ou=People,dc=my-domain,dc=com
uid: ldapuser2
cn: ldapuser2
sn: ldapuser2
mail: ldapuser2@my-domain.com
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword: {crypt}!!
shadowLastChange: 19844
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 1005
gidNumber: 1006
homeDirectory: /home/ldapuser2
#-------------------------------------------文件结束-------------------------------------------

#查看groups.ldif   
[root@bigdata1 ~]# cat /root/groups.ldif
#-------------------------------------------文件开始-------------------------------------------
dn: cn=ldapgroup1,ou=Group,dc=my-domain,dc=com
objectClass: posixGroup
objectClass: top
cn: ldapgroup1
userPassword: {crypt}x
gidNumber: 1005

dn: cn=ldapgroup2,ou=Group,dc=my-domain,dc=com
objectClass: posixGroup
objectClass: top
cn: ldapgroup2
userPassword: {crypt}x
gidNumber: 1006
#-------------------------------------------文件结束-------------------------------------------
#将用户导入的ldap中
ldapadd -x -w "123456" -D "cn=Manager,dc=my-domain,dc=com" -f /root/users.ldif

#将用户组导入的ldap中
ldapadd -x -w "123456" -D "cn=Manager,dc=my-domain,dc=com" -f /root/groups.ldif

在这里插入图片描述

六、安装配置启动phpldapadmin

安装服务

#安装软件
# httpd           httpd服务
# phpldapadmin    phpldapadmin服务
[root@bigdata1 ~]# yum install -y httpd phpldapadmin

修改配置文件

#修改配置文件/etc/phpldapadmin/config.php  
[root@bigdata1 ~]# vim /etc/phpldapadmin/config.php   

#-------------------------------------------文件开始-------------------------------------------
#打开 dn 注释,注释掉uid
$servers->setValue('login','attr','dn');
// $servers->setValue('login','attr','uid');
#-------------------------------------------文件结束-------------------------------------------

修改httpd内的phpldapadmin 配置文件

#修改配置文件 Require local 替换为 Require all granted
[root@bigdata1 ~]# vim /etc/httpd/conf.d/phpldapadmin.conf   

#-------------------------------------------文件开始-------------------------------------------
#
#  Web-based tool for managing LDAP servers
#

Alias /phpldapadmin /usr/share/phpldapadmin/htdocs
Alias /ldapadmin /usr/share/phpldapadmin/htdocs

<Directory /usr/share/phpldapadmin/htdocs>
  <IfModule mod_authz_core.c>
    # Apache 2.4
    Require all granted
  </IfModule>
  <IfModule !mod_authz_core.c>
    # Apache 2.2
    Order Deny,Allow
    Deny from all
    Allow from 127.0.0.1
    Allow from ::1
  </IfModule>
</Directory>
#-------------------------------------------文件结束-------------------------------------------

启动服务并访问

#启动httpd
[root@bigdata1 ~]# systemctl start httpd

#设置开机自启
[root@bigdata1 ~]# systemctl enable httpd
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.

访问服务

这里使用的是80端口哦,记得打开端口

地址:http://bigdata1/phpldapadmin/

账号:cn=Manager,dc=my-domain,dc=com
密码:123456

在这里插入图片描述

总结

至此基本就安装完成了,还是想吐槽一下这破东西,概念理解起来费劲,安装配置也费劲。 真蛋疼。

  • 42
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值