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中是否存在。

登陆界面:

组织结构:

相关推荐
师太,答应老衲吧2 小时前
SQL实战训练之,力扣:2020. 无流量的帐户数(递归)
数据库·sql·leetcode
Channing Lewis3 小时前
salesforce case可以新建一个roll up 字段,统计出这个case下的email数量吗
数据库·salesforce
毕业设计制作和分享4 小时前
ssm《数据库系统原理》课程平台的设计与实现+vue
前端·数据库·vue.js·oracle·mybatis
ketil274 小时前
Redis - String 字符串
数据库·redis·缓存
Hsu_kk5 小时前
MySQL 批量删除海量数据的几种方法
数据库·mysql
编程学无止境5 小时前
第02章 MySQL环境搭建
数据库·mysql
knight-n5 小时前
MYSQL库的操作
数据库·mysql
包饭厅咸鱼6 小时前
QML----复制指定下标的ListModel数据
开发语言·数据库
生命几十年3万天6 小时前
redis时间优化
数据库·redis·缓存
Elastic 中国社区官方博客6 小时前
释放专利力量:Patently 如何利用向量搜索和 NLP 简化协作
大数据·数据库·人工智能·elasticsearch·搜索引擎·自然语言处理