最近安装ldap看了不少教程,整理下用到的有用的资料,并把自己的搭建过程分享。
参考
-
ldap介绍:openLDAP入门与安装
-
官方文档:https://www.openldap.org/doc/admin22/schema.html
-
安装配置:Centos7 搭建openldap完整详细教程(真实可用)
-
bug解决:ldap运维中遇到的问题
-
schema自定义:导入schema到openLdap window文件转为unix文件
1,安装和配置
yum 安装相关包
yum install -y openldap openldap-clients openldap-servers
拷贝数据库配置文件
cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
chown -R ldap. /var/lib/ldap/DB_CONFIG
启动服务,先启动服务,配置后面再进行修改
systemctl start slapd
systemctl enable slapd
#查看状态
systemctl status slapd
修改配置
从openldap2.4.23版本开始,所有配置都保存在/etc/openldap/slapd.d目录下的cn=config文件夹内,不再使用slapd.conf作为配置文件。配置文件的后缀为 ldif,ldap的配置在开头都会有一行注释,说明此为自动生成的文件,请勿编辑,需要使用ldapmodify命令进行修改。
设置用户密码,生成的加密密码后面需要用到(ldap的加密是同样的密码加密后都不一样)
slappasswd -s 123456
{SSHA}N158sFqO97cIPBV/eOW1b80oV4BIvlvW
开始修改,创建一个修改文件。
vim changepwd.ldif
添加内容
dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}N158sFqO97cIPBV/eOW1b80oV4BIvlvW
然后执行,在执行下面的命令前,你可以先查看原本的/etc/openldap/slapd.d/olcDatabase={0}config文件,里面是没有olcRootPW这个项的,执行命令后,你再看就会新增了olcRootPW项,而且内容是我们文件中指定的值加密后的字符串
ldapadd -Y EXTERNAL -H ldapi:/// -f changepwd.ldif
备注:如果/etc/openldap/slapd.d/下cn=config/olcDatabase={0}config文件已经存在olcRootPW 使用replace
changepwd.ldif内容:
dn: olcDatabase={0}config,cn=config
changetype: modify
replace: olcRootPW
olcRootPW: {SSHA}N158sFqO97cIPBV/eOW1b80oV4BIvlvW
ldapmodify -Y EXTERNAL -H ldapi:/// -f changepwd.ldif
导入配置
# 我们需要向 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修改文件。
vim changedomain.ldif
比如我域名是dc=sichuan,dc=cmcc ,用户为cn=Manager,changedomain.ldif文件配置如下:
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
执行:
ldapmodify -Y EXTERNAL -H ldapi:/// -f changedomain.ldif
创建组织单元
在dc=sichuan,dc=cmcc组织下 创建Account 和Role两个组织单元:
新增cmcc.ldif文件
vim cmcc.ldif
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)
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文件
vim cmcc.schema
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
cd /tmp
mkdir schema
vim convert.conf
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信息文件
slaptest -f /tmp/convert.conf -F /tmp/schema
给ldap添加生成的cmcc.ldif文件
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
重启
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中是否存在。
登陆界面:
组织结构: