LDAP安装与简介

介绍

LDAP是轻量目录访问协议,英文全称是Lightweight Directory Access Protocol,一般都简称为LDAP。LDAP的目录服务其实也是一种数据库系统(Berkeley DB),只是这种数据库是一种树形结构(B Tree),适合读不适合频繁写,不支持事务不能回滚。

我们用LDAP实现多个组件的用户管理,比如把gitlab和harbor等组件的用户放在LDAP一起管理,组件只负责权限管理。用户在这些组件登录时都走LDAP的认证,让用户可以用一套用户名密码即可登录所有组件。

接下来我们一边安装一边学习。

yum安装OpenLDAP,设置数据库配置文件

[root@ldap ~]# yum -y openldap-servers openldap-clients
[root@ldap ~]# cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
[root@ldap ~]# chown ldap.ldap /var/lib/ldap/DB_CONFIG
[root@ldap ~]# systemctl start slapd
[root@ldap ~]# systemctl enable slapd

默认情况下,slapd服务监听的是389端口。

设置OpenLDAP 的管理员用户的密码

[root@ldap ~]# slappasswd
New password:
Re-enter new password:
{SSHA}xxxxxxxxxxxxxxxxxxxxxxxx

这里使用了slappasswd命令,返回了加密后的密码,将这个密码添加到OpenLDAP的ldif文件中,LDIF(LDAP Interchange Format)用文本格式表示目录数据库的信息,以方便用户创建、阅读和修改。

创建一个名为的chrootpw.ldif的文件,其实名字叫什么无所谓,内容如下:

dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}xxxxxxxxxxxxxxxxxxxxxxxx

介绍一下dn(Distinguished Name)的概念,LDAP的树形存储类似DNS,从叶子到根的这条“路径”是一条数据,称为条目(Entry),dn就是这条数据的全局唯一标识。它的值我们后边再讲。

changetype: modify表示我们要修改,add表示我们要添加一条,类似还有replace替换。接下来,执行编辑好的 chrootpw.ldif 文件。

[root@ldap ~]# 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"

ldapadd命令就是通过这个文件执行添加数据操作,类似还有命令ldapmodify进行修改。

添加几个基础的 Schema

在LDAP中,schema用来指定一个目录中所包含的对象(objects)的类型(objectClass),以及每一个类型(objectClass)中必须提供的属性(Atrribute)和可选的属性。可将schema理解为面向对象程序设计中的类,通过类定义一个具体的对象。LDIF中的数据条目可理解为是一个具体的对象,是通过schema来规划创建的。因此,schema是一个数据模型,用来决定数据按什么方式存储,并定义存储在不同的条目(Entry)下的数据之间的关系。

[root@ldap ~]# 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@ldap ~]# 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@ldap ~]# 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"

此处添加的 Schema 主要用于记录人员信息。也可以按照需要导入别的Schema。

在 LDAP 数据库中设置根域和数据库超级管理员

这里的“根域”我们设置为 dc=colinlee,dc=fish,即树的根节点为colinlee.fish

  • dc(Domain Component)是域名的一部分,把完整的域名拆开。
  • ou(Organization Unit)是组织单元。
  • cn(Common Name)一般是用户的名字。
  • sn(Surname)一般是姓。
  • uid(User Id)一般是用户登录id。

举个例子,如图:
LDAP安装与简介_第1张图片

数据库管理员和上面设置过的 OpenLDAP 管理员并非同一管理员。此处的设置同样需要一个用 slappasswd 命令生成的密码,为了方便管理,我们使用刚刚生成的密码,不再重新生成。

创建一个新的 ldif 文件domain-dbadmin.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=colinlee,dc=fish" read
  by * none

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

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

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

dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange
  by dn="cn=admin,dc=colinlee,dc=fish" write
  by anonymous auth
  by self write
  by * none
olcAccess: {1}to dn.base=""
  by * read
olcAccess: {2}to *
  by dn="cn=admin,dc=colinlee,dc=fish" write
  by * read

然后执行该 ldif 文件:

[root@ldap ~]# ldapmodify -Y EXTERNAL -H ldapi:/// -f domain-dbadmin.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={1}monitor,cn=config"

modifying entry "olcDatabase={2}hdb,cn=config"

modifying entry "olcDatabase={2}hdb,cn=config"

modifying entry "olcDatabase={2}hdb,cn=config"

新增数据(创建节点)

这一步新增了三条数据,预期结果如图:
LDAP安装与简介_第2张图片
我们创建一个新的 ldif 文件basedomain.ldif,内容如下:

dn: dc=colinlee,dc=fish
objectClass: top
objectClass: dcObject
objectclass: organization
o: Example Inc.
dc: colinlee

dn: ou=user,dc=colinlee,dc=fish
objectClass: organizationalUnit
ou: user

dn: ou=group,dc=colinlee,dc=fish
objectClass: organizationalUnit
ou: group

dn: cn=admin,dc=colinlee,dc=fish
objectClass: organizationalRole
cn: admin
description: Directory Administrator

这个文件的格式简单说明一下。dn唯一标识一个条目,objectClass是这个条目所包含的属性,可以有多个,如上述第一个条目就有3个。条目的属性根据objectClass的不同而不同,有的objectClass有必须设置的属性,我们需要对属性赋值。还以第一个条目为例,top没有必须定义的属性,dcobject必须定义属性dc,用来表示一个域名的部分,而organization必须定义属性o,用来表示一个组织的名称。多个条目之间用一个空行分隔。

LDAP中,一个条目必须包含一个objectClass属性,且需要赋予至少一个值。objectClass有着严格的等级之分,最顶层是top和alias。例如,organizationalPerson这个objectClass就隶属于person,而person又隶属于top。在OpenLDAP的schema中定义了很多objectClass,按需查找。

执行该文件使内容生效。此处使用了数据库超级管理员的身份,需要输入我们之前设置的密码:

[root@ldap ~]# ldapadd -x -D cn=admin,dc=colinlee,dc=fish -W -f basedomain.ldif
Enter LDAP Password:
adding new entry "dc=colinlee,dc=fish"

adding new entry "ou=user,dc=colinlee,dc=fish"

adding new entry "ou=group,dc=colinlee,dc=fish"

adding new entry "cn=admin,dc=colinlee,dc=fish"

安装LDAP管理工具PHPldapadmin

首选yum安装Apache和PHP:

yum -y install httpd php php-ldap php-gd php-mbstring php-pear php-bcmath php-xml

接着安装phpldapadmin:

yum -y install epel-release
yum --enablerepo=epel -y install phpldapadmin

然后修改配置:

vim /etc/phpldapadmin/config.php
#397行取消注释,398行添加注释,修改为dn登录
$servers->setValue('login','attr','dn');
// $servers->setValue('login','attr','uid');
// 保存退出修改另一个配置
vim /etc/httpd/conf.d/phpldapadmin.conf

# Apache 2.4
#Require local
#注释掉上边这句,添加一行内容,指定可访问的ip段为全部
Require all granted

启动服务并查看:

systemctl start httpd && systemctl enable httpd

浏览器登录http://LDAP所在机器ip:80/phpldapadmin/。端口是Apache的,可自行修改。如果按照本文的命令复制粘贴走下来,登录用户名为cn=admin,dc=colinlee,dc=fish,密码为之前自己设置的管理员密码。如图:
LDAP安装与简介_第3张图片

参考自:
https://www.jianshu.com/p/dc7112873e68
https://cloud.tencent.com/developer/article/1026304
https://blog.51cto.com/11555417/2065747

你可能感兴趣的:(LDAP,phpldapadmin,openldap,devops)