Ladp数据库安装和配置自定义schema ,Centos7环境

最近安装ldap看了不少教程,整理下用到的有用的资料,并把自己的搭建过程分享。

参考

1,安装和配置

yum 安装相关包

bash 复制代码
yum install -y openldap openldap-clients openldap-servers

拷贝数据库配置文件

bash 复制代码
cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
chown -R ldap. /var/lib/ldap/DB_CONFIG

启动服务,先启动服务,配置后面再进行修改

bash 复制代码
systemctl start slapd
systemctl enable slapd
#查看状态
systemctl status slapd

修改配置

从openldap2.4.23版本开始,所有配置都保存在/etc/openldap/slapd.d目录下的cn=config文件夹内,不再使用slapd.conf作为配置文件。配置文件的后缀为 ldif,ldap的配置在开头都会有一行注释,说明此为自动生成的文件,请勿编辑,需要使用ldapmodify命令进行修改。

设置用户密码,生成的加密密码后面需要用到(ldap的加密是同样的密码加密后都不一样)

bash 复制代码
slappasswd -s 123456
{SSHA}N158sFqO97cIPBV/eOW1b80oV4BIvlvW

开始修改,创建一个修改文件。

bash 复制代码
vim changepwd.ldif

添加内容

bash 复制代码
dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}N158sFqO97cIPBV/eOW1b80oV4BIvlvW

然后执行,在执行下面的命令前,你可以先查看原本的/etc/openldap/slapd.d/olcDatabase={0}config文件,里面是没有olcRootPW这个项的,执行命令后,你再看就会新增了olcRootPW项,而且内容是我们文件中指定的值加密后的字符串

bash 复制代码
ldapadd -Y EXTERNAL -H ldapi:/// -f changepwd.ldif

备注:如果/etc/openldap/slapd.d/下cn=config/olcDatabase={0}config文件已经存在olcRootPW 使用replace

changepwd.ldif内容:

bash 复制代码
dn: olcDatabase={0}config,cn=config
changetype: modify
replace: olcRootPW
olcRootPW: {SSHA}N158sFqO97cIPBV/eOW1b80oV4BIvlvW
bash 复制代码
ldapmodify -Y EXTERNAL -H ldapi:/// -f changepwd.ldif

导入配置

bash 复制代码
# 我们需要向 LDAP 中导入一些基本的 Schema。这些 Schema 文件位于 /etc/openldap/schema/ 目录中,schema控制着条目拥有哪些对象类和属性,可以自行选择需要的进行导入,
# 依次执行下面的命令,导入基础的一些配置,我这里将所有的都导入一下,其中core.ldif是默认已经加载了的,不用导入
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
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/collective.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/corba.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/duaconf.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/dyngroup.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/java.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/misc.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/openldap.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/pmi.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/ppolicy.ldif

修改域名

域名的信息保存在/etc/openldap/slapd.d/cn=config文件夹下

olcDatabase={1}monitor,cn=config配置中可以查看,不能直接修改。这边使用命令修改。

创建一个changedomain.ldif修改文件。

bash 复制代码
vim changedomain.ldif

比如我域名是dc=sichuan,dc=cmcc ,用户为cn=Manager,changedomain.ldif文件配置如下:

bash 复制代码
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=Manager,dc=sichuan,dc=cmcc" read by * none
 
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=sichuan,dc=cmcc
 
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=Manager,dc=sichuan,dc=cmcc
 
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootPW
olcRootPW: {SSHA}7j4lLAvS1mToAZpIyefQdTYqCvL0hiVa
 
dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange by dn="cn=Manager,dc=sichuan,dc=cmcc" write by anonymous auth by self write by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by dn="cn=Manager,dc=sichuan,dc=cmcc" write by * read

执行:

bash 复制代码
ldapmodify -Y EXTERNAL -H ldapi:/// -f changedomain.ldif

创建组织单元

在dc=sichuan,dc=cmcc组织下 创建Account 和Role两个组织单元:

新增cmcc.ldif文件

bash 复制代码
vim  cmcc.ldif
bash 复制代码
dn: dc=sichuan,dc=cmcc
objectClass: domain
objectClass: top
o: cmcc
dc: sichuan

dn: ou=Account,dc=sichuan,dc=cmcc
objectClass: organizationalUnit
ou: Account
description: account for cmcc

dn: ou=Role,dc=sichuan,dc=cmcc
objectClass: organizationalUnit
ou: Role
description: role for cmcc

执行命令,添加配置, 这里要注意修改域名为自己配置的域名,然后需要输入上面我们的密码(123456)

bash 复制代码
ldapadd -x -D cn=Manager,dc=sichuan,dc=cmcc -W -f cmcc.ldif

2,schema自定义格式

schema,是一个标准,定义了ldap的对象和属性,也就是ldap能够存储什么数据,数据有什么属性等。

/etc/openldap/slapd.d/cn=config/cn=schema/文件夹保存了运行使用的schema文件,我们需要生成cmcc.schema放进来。

由于ldap中的对象不满足现有需求,需要自定义对象和属性。

创建两个对象cmcc-Account和cmcc-Role

cmcc-Account对象包含Uid,accPassword ,accRole , accstatus , accReserve1 , accReserve2 , accReserveList1 , accReserveList2属性

cmcc-Role对象包含roleName, roleDesc, accReserve1 , accReserve2 , accReserveList1 , accReserveList2属性

创建cmcc.schema文件

bash 复制代码
vim cmcc.schema
bash 复制代码
attributetype ( 1.3.6.1.4.1.79145.1.2.1.2 NAME 'accPassword' 
	DESC 'accPassword' 
	EQUALITY caseIgnoreMatch 
	SUBSTR caseIgnoreSubstringsMatch 
	SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{32768} 
	SINGLE-value ) 
	
attributetype ( 1.3.6.1.4.1.79145.1.2.1.3 NAME 'accRole' 
	DESC 'accRole' 
	EQUALITY caseIgnoreMatch
	SUBSTR caseIgnoreSubstringsMatch 	
	SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{32768} ) 

attributetype ( 1.3.6.1.4.1.79145.1.2.1.4 NAME 'accstatus' 
	DESC 'accstatus' 
	EQUALITY caseIgnoreMatch 
	SUBSTR caseIgnoreSubstringsMatch 
	SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{32768} 
	SINGLE-value ) 
	
attributetype ( 1.3.6.1.4.1.79145.1.2.1.5 NAME 'accReserve1' 
	DESC 'accReserve1' 
	EQUALITY caseIgnoreMatch 
	SUBSTR caseIgnoreSubstringsMatch 
	SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{32768} 
	SINGLE-value ) 
	
attributetype ( 1.3.6.1.4.1.79145.1.2.1.6 NAME 'accReserve2' 
	DESC 'accReserve2' 
	EQUALITY caseIgnoreMatch 
	SUBSTR caseIgnoreSubstringsMatch 
	SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{32768} 
	SINGLE-value ) 
	
attributetype ( 1.3.6.1.4.1.79145.1.2.1.7 NAME 'accReserveList1' 
	DESC 'accReserveList1' 
	EQUALITY caseIgnoreMatch 
	SUBSTR caseIgnoreSubstringsMatch 
	SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{32768} ) 
	
attributetype ( 1.3.6.1.4.1.79145.1.2.1.8 NAME 'accReserveList2' 
	DESC 'accReserveList2' 
	EQUALITY caseIgnoreMatch 
	SUBSTR caseIgnoreSubstringsMatch 
	SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{32768} ) 
	
attributetype ( 1.3.6.1.4.1.79145.1.2.1.9 NAME 'roleName' 
	DESC 'roleName' 
	EQUALITY caseIgnoreMatch 
	SUBSTR caseIgnoreSubstringsMatch 
	SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{32768} 
	SINGLE-value ) 
	
attributetype ( 1.3.6.1.4.1.79145.1.2.1.10 NAME 'roleDesc' 
	DESC 'roleDesc' 
	EQUALITY caseIgnoreMatch 
	SUBSTR caseIgnoreSubstringsMatch 
	SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{32768} 
	SINGLE-value ) 

objectclass ( 1.3.6.1.4.1.79145.1.2.2.1 NAME 'cmcc-Account' 
	DESC 'a cmcc-Account' 
	SUP top STRUCTURAL 
	MUST ( uID ) 
	MAY ( accPassword $ accRole $ accstatus $ accReserve1 $ accReserve2 $ accReserveList1 $ accReserveList2 ) ) 

objectclass ( 1.3.6.1.4.1.79145.1.2.2.2 NAME 'cmcc-Role' 
	DESC 'a cmcc-Role' 
	SUP top STRUCTURAL 
	MUST ( roleName ) 
	MAY ( roleDesc $ accReserve1 $ accReserve2 $ accReserveList1 $ accReserveList2 ) ) 

将cmcc.schema文件放到/etc/openldap/schema

在tmp文件夹 创建schema文件夹

创建convert.conf文件,在末尾加入cmcc.schema

bash 复制代码
cd /tmp
mkdir schema
vim convert.conf
bash 复制代码
include /etc/openldap/schema/core.schema
include /etc/openldap/schema/collective.schema
include /etc/openldap/schema/corba.schema
include /etc/openldap/schema/cosine.schema
include /etc/openldap/schema/duaconf.schema
include /etc/openldap/schema/dyngroup.schema
include /etc/openldap/schema/inetorgperson.schema
include /etc/openldap/schema/java.schema
include /etc/openldap/schema/misc.schema
include /etc/openldap/schema/nis.schema
include /etc/openldap/schema/openldap.schema
include /etc/openldap/schema/ppolicy.schema
include	/etc/openldap/schema/cmcc.schema

生成ldap信息文件

bash 复制代码
slaptest -f /tmp/convert.conf -F /tmp/schema 

给ldap添加生成的cmcc.ldif文件

bash 复制代码
cp /tmp/schema/cn\=config/cn\=schema/cn\=\{12\}cmcc.ldif /etc/openldap/slapd.d/cn\=config/cn\=schema/

#给ldap 添加权限
cd /etc/openldap/slapd.d/cn=config/cn=schema/
chown ldap:ldap cn\=\{12}cmcc.ldif

重启

bash 复制代码
ps aux | grep ldap
kill -9 pid

//启动
systemctl start slapd

//状态
systemctl status slapd

3,连接ldap数据库效果

我使用的window版LdapAdmin.exe 连接的ldap。

查看自定义schema是否成功,可以点击Tools->schema 查看object classes 和Attribue Types中是否存在。

登陆界面:

组织结构:

相关推荐
异世界贤狼转生码农1 小时前
MongoDB Windows 系统实战手册:从配置到数据处理入门
数据库·mongodb
QuZhengRong1 小时前
【数据库】Navicat 导入 Excel 数据乱码问题的解决方法
android·数据库·excel
码农阿豪1 小时前
Windows从零到一安装KingbaseES数据库及使用ksql工具连接全指南
数据库·windows
时序数据说7 小时前
时序数据库市场前景分析
大数据·数据库·物联网·开源·时序数据库
听雪楼主.10 小时前
Oracle Undo Tablespace 使用率暴涨案例分析
数据库·oracle·架构
我科绝伦(Huanhuan Zhou)10 小时前
KINGBASE集群日常维护管理命令总结
数据库·database
妖灵翎幺11 小时前
Java应届生求职八股(2)---Mysql篇
数据库·mysql
HMBBLOVEPDX11 小时前
MySQL的事务日志:
数据库·mysql
weixin_4196583113 小时前
MySQL数据库备份与恢复
数据库·mysql
专注API从业者14 小时前
基于 Flink 的淘宝实时数据管道设计:商品详情流式处理与异构存储
大数据·前端·数据库·数据挖掘·flink