文章目录
前言
文章不包含理论知识,自己学习哦。
这破玩意设计理念很垃圾,学习起来也很费劲,但是很多组件都使用这个服务,所以简单学习一下就可以了😓。
环境信息: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
总结
至此基本就安装完成了,还是想吐槽一下这破东西,概念理解起来费劲,安装配置也费劲。 真蛋疼。