关于后端:centos搭建openldap教程

4次阅读

共计 5980 个字符,预计需要花费 15 分钟才能阅读完成。

基础教程

LDAP 全称轻量级目录拜访协定(英文:Lightweight Directory Access Protocol),是一个运行在 TCP/IP 上的目录拜访协定。目录是一个非凡的数据库,它的数据常常被查问,然而不常常更新。其专门针对读取、浏览和搜寻操作进行了特定的优化。目录个别用来蕴含描述性的,基于属性的信息并反对精密简单的过滤能力。比方 DNS 协定便是一种最被宽泛应用的目录服务。

LDAP 中的信息依照目录信息树结构组织,树中的一个节点称之为条目(Entry),条目蕴含了该节点的属性及属性值。条目都能够通过辨认名 dn 来全局的惟一确定 1,能够类比于关系型数据库中的主键。比方 dn 为 uid=ada,ou=people,dc=xinhua,dc=io 的条目示意在组织中一个名字叫做 Ada Catherine 的员工,其中 uid=ada 也被称作绝对区别名 rdn。

一个条目标属性通过 LDAP 元数据模型(Scheme)中的对象类(objectClass)所定义,上面的表格列举了对象类 inetOrgPerson(Internet Organizational Person)中的一些必填属性和可选属性。

参数阐明

LDAP 中的参数命名能够说是形形色色,如果光看参数,很难明确到底是什么意思,为什么会这样呢,次要起因就是 LDAP 的开发者命名不标准,比方 cn 他是 Common Name 的缩写

属性名 是否必填 形容
cn 该条目被人所熟知的通用名(Common Name)
sn 该条目标姓氏
o 该条目所属的组织名(Organization Name)

装置

环境

  • centos 7 / centos6

留神:所有明码能够不应用 slappasswd 生成,能够应用明文或者沿用文章中的旧明码,旧明码对应的明文都为 666666

第一步 装置相干程序包

须要切换到 root 账号来装置 OpenLDAP 相干程序包,并启动服务:

yum install -y openldap-servers openldap-clients
cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
chown ldap. /var/lib/ldap/DB_CONFIG
# CentOS 7
systemctl enable slapd && systemctl start slapd
# CentOS 6
service slapd start

第二步 配置管理员明码

咱们应用 slappasswd 命令来生成一个明码 (明文是 666666),并应用 LDIF(LDAP 数据交换格局)文件将其导入到 LDAP 中来配置管理员明码:

# {SSHA}KS/bFZ8KTmO56khHjJvM97l7zivH1MwG 是执行 slappasswd,输出明码后生成的加密字符串
slappasswd
vim chrootpw.ldif
# specify the password generated above for "olcRootPW" section
dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}KS/bFZ8KTmO56khHjJvM97l7zivH1MwG

执行导入文件

ldapadd -Y EXTERNAL -H ldapi:/// -f chrootpw.ldif

第三步 导入元组

咱们须要向 LDAP 中导入一些根本的 Schema。这些 Schema 文件位于 /etc/openldap/schema/ 目录中,定义了咱们当前创立的条目能够应用哪些属性:

ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/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

第四步 配置顶级域

咱们须要配置 LDAP 的顶级域(以 dc=xxxx,dc=com 为例)及其治理域:

slappasswd
vim chdomain.ldif
# replace to your own domain name for "dc=***,dc=***" section
# specify the password generated above for "olcRootPW" section
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=zdpoc,dc=com" read by * none

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=zdpoc,dc=com

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=admin,dc=zdpoc,dc=com

dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}AnRd0duASR5nCajYUbnkzumtkPi6ZKo2

dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange by
  dn="cn=admin,dc=zdpoc,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=zdpoc,dc=com" write by * read

执行

ldapmodify -Y EXTERNAL -H ldapi:/// -f chdomain.ldif
留神
  • 换行会影响文件读取,可能报文件格式谬误
  • 每台机器的数据库配置名不一样,可能和 openldap 版本和 linux 零碎版本相干,执行
  • hdb 要换成你理论的数据库
  • add 只能用一次,前面再用的话,只能用 replace,要不然会报 no equality matching rule
ls /etc/openldap/slapd.d/cn=config/

后果如下

cn=schema  cn=schema.ldif  olcDatabase={0}config.ldif  olcDatabase={-1}frontend.ldif  olcDatabase={1}monitor.ldif  olcDatabase={2}hdb.ldif

数据库名可能是 hdbmdb, bdb,具体到你的零碎中去查看

这里的 hdb、mdb、bdb 可能是不同的后端数据库类型,参考 https://www.openldap.org/doc/admin24/backends.html

创立组织

第五步,在上述根底上,咱们来创立一个叫做 Xinhua News Agency 的组织,并在其下创立一个 Manager 的组织角色(该角色内的用户具备治理整个 LDAP 的权限)和 People 和 Group 两个组织单元:

dn: dc=zdpoc,dc=com
objectClass: top
objectClass: dcObject
objectclass: organization
o: ZDPOC.COM
dc: zdpoc

dn: cn=admin,dc=zdpoc,dc=com
objectClass: organizationalRole
cn: Manager

dn: ou=people,dc=zdpoc,dc=com
objectClass: organizationalUnit
ou: people

dn: ou=group,dc=zdpoc,dc=com
objectClass: organizationalUnit
ou: group

执行, 并输出明码

ldapadd -x -D cn=admin,dc=zdpoc,dc=com -W -f basedomain.ldif

通过以上的所有步骤,咱们就设置好了一个 LDAP 目录树:其中基准 dn dc=zdpoc,dc=io 是该树的根节点,其下有一个治理域 cn=admin,dc=zdpoc,dc=io 和两个组织单元 ou=people,dc=zdpoc,dc=comou=group,dc=zdpoc,dc=com

接下来,咱们来创立一个叫作 user1 的员工并将其调配到 Secretary 组来验证上述配置是否失效。

slappasswd
# 把上面的内容放至 ldapuser1.ldif
# replace to your own domain name for "dc=***,dc=***" section
# specify the password generated above for "olcRootPW" section
dn: uid=user1,ou=people,dc=zdpoc,dc=com
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
uid: user1
cn: user1
sn: user1
userPassword: {SSHA}2aJi+5n5FMxiw1uhLnXp1rKJvI93TU0r
loginShell: /bin/bash
uidNumber: 1000
gidNumber: 1000
mail: user1@zdpoc.com
homeDirectory: /home/users/ada

dn: cn=Secretary,ou=group,dc=zdpoc,dc=com
objectClass: posixGroup
cn: Secretary
gidNumber: 1000
memberUid: user1

执行, 并输出明码

ldapadd -x -D cn=admin,dc=zdpoc,dc=com -W -f ldapuser1.ldif

输入

[root@v0107-c0a82183 ldif]# ldapadd -x -D cn=admin,dc=zdpoc,dc=com -W -f ldapuser1.ldif
Enter LDAP Password:
adding new entry "uid=user1,ou=people,dc=zdpoc,dc=com"

adding new entry "cn=Secretary,ou=group,dc=zdpoc,dc=com"

增加其余账号信息 vim adduser.ldif

<pre>dn: uid=user2,ou=people,dc=zdpoc,dc=com
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
uid: user2
cn: user2
sn: user2
uidNumber: 1002
gidNumber: 1000
homeDirectory: /home/users/ada
mail: user2@zdpoc.com
userPassword: {SSHA}ATlzkWMbQtYaX0s8W2uXpD2/buepYd9x

dn: uid=user3,ou=people,dc=zdpoc,dc=com
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
uid: user3
cn: user3
sn: user3
uidNumber: 1003
gidNumber: 1000
homeDirectory: /home/users/ada
mail: user3@zdpoc.com
userPassword: {SSHA}aFqA+iULm0vd060lgiu/xuPmcEANJaDY

dn: uid=user4,ou=people,dc=zdpoc,dc=com
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
uid: user4
cn: user4
sn: user4
uidNumber: 1004
gidNumber: 1000
homeDirectory: /home/users/ada
mail: user4@zdpoc.com
userPassword: {SSHA}OoCwflKJIGWL60E+GFk0SJTLHn0+0Ha6

dn: uid=user5,ou=people,dc=zdpoc,dc=com
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
uid: user5
cn: user5
sn: user5
uidNumber: 1005
gidNumber: 1000
homeDirectory: /home/users/ada
mail: user5@zdpoc.com
userPassword: {SSHA}aRDF1bKvezsbR2cHlk07E1PEyRiowZ2V</pre>

执行

ldapadd -x -D cn=admin,dc=zdpoc,dc=com -W -f adduser.ldif

查看服务中的所有条目信息

ldapsearch -x -b "dc=zdpoc,dc=com" ldap://127.0.0.1

删除某个条目

ldapdelete -x -W -D 'cn=admin,dc=zdpoc,dc=com' "uid=user1,ou=People,dc=zdpoc,dc=com"

参考资料

CentOS 7 环境下 OpenLDAP 的装置与配置

OpenLDAP 初识

我花了一个五一终于搞懂了 OpenLDAP

How to Setup OpenLDAP Multi-Master Replication on CentOS 7

正文完
 0