一:前言
目前网上有很多的Openldap服务端搭建教程,但是大部分其实都还是6的部署过程,许多朋友在centos7下按照网上的文档进行部署,会发现根本没有主配置文件,加上我自己踩过的一些坑,在这篇文档里,我把centos7下部署Openldap的过程再梳理一遍。
二:知识准备
1:根据我最近学习到的,我认为ldap就是一个账户认证服务,通过单服务端多客户端的方式,每新增一个客户端服务器,都可以简单的通过ldap客户端配置来将大批量用户加入系统当中,可以省去很多时间。
2:为了更好地在centos7上搭建openldap的服务端,有一些基础知识必须掌握,否则部署过程中一头雾水,出错也没有排查思路,推荐大家阅读下面这篇文章。https://cloud.tencent.com/developer/article/1026304
3.必须掌握的我认为有以下几个方面 1)主要简称含义 o-> organization(组织-公司) ou-> organization unit(组织单元-部门) c-> countryName(国家) dc-> domainComponent(域名) sn-> suer name(真实名称) cn-> common name(常用名称)
2)目录型数据库的理解
对于下面这张图,如果我们要获取到一个cn是ldap,也就是右下角的那个用户,那么我们有且仅有一条路径,也就是
dn: cn=ldap, ou=group, o=dlw.com
其中dn是ldif文件当中每个条目都具有的一条,而且对于每一个条目是唯一的,当然dc可以是在最上面的,ou也可以是在最上面的,同样的,他们的下面也可以在延伸出来新的dc或者ou
3)了解schema 在LDAP中,schema用来指定一个目录中所包含的对象(objects)的类型(objectClass),以及每一个类型(objectClass)中必须提供的属性(Atrribute)和可选的属性。可将schema理解为面向对象程序设计中的类,通过类定义一个具体的对象。LDIF中的数据条目可理解为是一个具体的对象,是通过schema来规划创建的。因此,schema是一个数据模型,用来决定数据按什么方式存储,并定义存储在不同的条目(Entry)下的数据之间的关系。schema需要在主配置文件slapd.conf中指定,以用来决定在目录中可以使用哪些objectClass。
4)了解objectClass LDAP中,一个条目必须包含一个objectClass属性,且需要赋予至少一个值。每一个值将用作一条LDAP条目进行数据存储的模板;模板中包含了一个条目必须被赋值的属性和可选的属性。
5)LDIF文件格式 LDIF用文本格式表示目录数据库的信息,以方便用户创建、阅读和修改。在LDIF文件中,一个条目的基本格式如下: 注意(ldif文件中的内容,需要注意的是,每个冒号后面都需要空一格,而每行结束处不能留有空格字符)
注释 dn: 条目名 属性描述: 值 属性描述: 值 属性描述: 值 ... ...
dn行类似于关系数据库中一条记录的关键字,不能与其他dn重复。一个LDIF文件中可以包含多个条目,每个条目之间用一个空行分隔。 例如,以下内容组成一个条目:
1: dn: dc=dlw, dc=com 2: objectclass: top 3: objectclass: dcobject 4: objectclass: organization 5: dc: dlw 6: o: dlw,Inc.
在以上文本中,各行含义如下: 第1行的dn定义该条目的标识。 第2~4行定义该条目的objectcCass,可以定义多个属性,如上面代码中定义了3个objectClass。条目的属性根据objectClass的不同而不同,有的objectClass有必须设置的属性。在2~4行的3个objectClass中,top没有必须定义的属性,dcobject必须定义属性dc,用来表示一个域名的部分,而organization必须定义属性o,用来表示一个组织的名称。 根据objectClass的要求,第5、6行分别定义属性dc和属性o的值。
6)ldap命令
-x:进行简单认证。 -D:用来绑定服务器的dn。 -w:绑定dn的密码。 -b:指定要查询的根节点。 -H:制定要查询的服务器。 -h:目录服务的地址
主要是 添加,将name.ldif文件中的条目加入到目录中
ldapadd -x -D "cn=root,dc=dlw,dc=com" -w secret -f name.ldif
查找,使用ldapsearch命令查询“dc=dlw, dc=com”下的所有条目
ldapsearch -x -b "dc=dlw,dc=com"
修改,分为交互式修改和文件修改,推荐文件修改 将sn属性由“Test User Modify”修改为“Test User”
dn: cn=test,ou=managers,dc=dlw,dc=com
changetype: modify
replace: sn
sn: Test User
输入命令
ldapmodify -x -D "cn=root,dc=dlw,dc=com" -w secret -f modify
删除,删除目录数据库中的“cn=test,ou=managers,dc=dlw,dc=com”条目
ldapdelete -x -D "cn=root,dc=dlw,dc=com" -w secret "cn=test,ou=managers,dc=dlw,dc=com"
三:开始搭建
有了以上的基础储备之后,我们就可以开始搭建了,如果你觉得去学习以上内容太过繁琐,可以跳过,直接开始搭建,但是当搭建过程出现问题,你将很难去排查并解决出现的问题 ,因此我建议最好学习一下再来搭建 1:安装
yum install -y openldap openldap-clients openldap-servers migrationtools openldap-devel compat-openldap cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG chown ldap. /var/lib/ldap/DB_CONFIG systemctl start slapd systemctl enable slapd
2:配置 1)设置管理员密码
slappasswd -s 123456 {SSHA}wfYgDRZdRyxTuwVg1bzpXjjgAWGNYeN3
2)导入管理员账户
[root@test-vm002 ~]# cd /etc/openldap/ [root@test-vm002 openldap]# vim chrootpw.ldif #specify the password generated above for "olcRootPW" section dn: olcDatabase={0}config,cn=config changetype: modify add: olcRootPW olcRootPW: {SSHA}wfYgDRZdRyxTuwVg1bzpXjjgAWGNYeN3
[root@test-vm002 openldap]# ldapadd -Y EXTERNAL -H ldapi:/// -f chrootpw.ldif SASL/EXTERNAL authentication started SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth SASL SSF: 0 modifying entry "olcDatabase={0}config,cn=config"
3)导入基本Schema模式
[root@test-vm002 openldap]# 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@test-vm002 openldap]# 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@test-vm002 openldap]# 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"
4)导入基础域名,这里说明一下,centos6中,基础域名是在sldap.conf中配置的,但是7中需要自己手动配置ldif文件,此文件执行后,会将基础域名配置到/etc/openldap/slapd.d/cn=config下的olcDatabase={2}hdb.ldif当中,这里的基础域名决定了导入ldif文件时候的用户名
[root@test-vm002 openldap]# vim chdomain.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=admin,dc=beyondh,dc=org" read by * none
dn: olcDatabase={2}hdb,cn=config changetype: modify replace: olcSuffix olcSuffix: dc=gongchang,dc=com
dn: olcDatabase={2}hdb,cn=config changetype: modify replace: olcRootDN olcRootDN: cn=admin,dc=gongchang,dc=com
dn: olcDatabase={2}hdb,cn=config changetype: modify replace: olcRootPW olcRootPW: {SSHA}7xvKgoR74n49m4HG89GNntVOwthdGWZ5
dn: olcDatabase={2}hdb,cn=config changetype: modify replace: olcAccess olcAccess: {0}to attrs=userPassword,shadowLastChange by dn="cn=admin,dc=gongchang,dc=com" write by anonymous auth by self write by * none olcAccess: {1}to dn.base="" by * read olcAccess: {2}to * by dn="cn=admin,dc=gongchang,dc=com" write by * read
[root@test-vm002 openldap]# ldapmodify -Y EXTERNAL -H ldapi:/// -f chdomain.ldif SASL/EXTERNAL authentication started SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth SASL SSF: 0 modifying entry "olcDatabase={2}hdb,cn=config"
modifying entry "olcDatabase={2}hdb,cn=config"
modifying entry "olcDatabase={2}hdb,cn=config"
modifying entry "olcDatabase={2}hdb,cn=config"