基础教程
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
数据库名可能是 hdb
,mdb, 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=com
及 ou=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