文章目录

一、什么是openLDAP

LDAP(Lightweight Directory Access Protocol,轻型目录访问协议),是一种基于TCP/IP的访问在线目录服务的协议,有V2和V3版本,其中现在用得最多的都是V3版本。而openLDAP则是这种协议的开源的实现,被广泛应用于“目录访问权限控制”这一目的。举个例子,假设公司有很多个服务系统,包括个人信息系统、文档协作系统、生产环境系统、工资发放系统等等,如果每个系统都独立使用一个账号,当有人入职或者离职的时候,每个系统都得注册,维护起来异常麻烦;而一些通用信息比如员工姓名等等,会存储很多份,要修改的话需要每个系统都得修改。那么openLDAP就可以干这么一件事,只要你的账号在openLDAP上,那么所有的系统通过接入openLDAP就能够验证你的身份,来判断你可以访问哪些目录,提供一些基本信息等等,入职只需要加入一个openLDAP的Object,离职只需要删除或者移动到指定的组,是不是方便太多啦。目前绝大多数的软件都支持数据库登录+LDAP登录双重登录方式,项目管理工具、bug管理工具、文档管理工具等等,非常有必要学习一下。

em……它的logo是这个虫:

蜜汁审美……

二、简单认识openLDAP的数据结构

Entry 条目

openLDAP是一个树结构,基本模型是条目(Entry),Entry类似于数据库中的一行数据,像这样:

cn:Roger
sn:BWB
displayName:Roger BWB
telephoneNumber:1234567890
userPassword:(Md5 hased password)

Dn 唯一辨别名

每个Entry都具有一个唯一的“标识符”——唯一辨别名Dn(Distinguished Name),像这样:

cn=Roger,dc=bewindoweb,dc=com

可以看出dn是确定这个Entry所走过的路径的逆序字符串(从根节点dn=bewindoweb,dn=com向下,找到了cn=Roger的Entry)。

ObjectClass 对象类

接下来是比较难理解的对象类(ObjectClass)。

(1)直观感受

人员person的ObjectClass长这样:

很像Java中的类定义。

(2)分类

Object分为三种:

结构型(Structural):有account、person等等,一般都具有具体的完整含义,例如account代表账户、person代表人员;

辅助型(Auxiliary):有uidObject等,用于一些辅助型的属性补充,例如增加一个uid的Attribute。

抽象型(Abstract):有top等,只用来被其他ObjectClass继承,top是必须继承的一个抽象类。

(3)其他特性

子类会继承父类的全部属性(Attribute)。

属性有Must(必须)和May之分,Must是必填的Attribute,May是可选的Attribute。比如上面的人员中,姓氏cn和全名sn是一个人必须要有的属性,而电话号码telephoneNumber、描述description等则是可有可无的属性。

(4)Entry可以有多个ObjectClass

一个Entry至少具有一个,可以具有多个ObjectClass,  比如:

一个属性是抽象型对象类top,一个属性是基础的结构型对象类person,一个属性是辅助型对象类uidObject(这个Entry所拥有的ObjectClass也是它的一个属性)。

然后person里面有必填的cn、sn,可选的description、telephoneNumber、userPassword;uidObject里有必填的uid。

这就构成了一个完整的Entry,它的Dn是cn=roger,dc=bewindoweb,dc=com。

其他的相关缩写含义

缩写 全写 含义 举例
 c Country国家 cn
 cn Common Name通用名Roger/Server123 
 dc Domain Componentbewindoweb/com 
 o Organization组织bewindoweb
 ou Organizational Unit 组织单元developer/admin/user

完整的LDAP树结构示意图

三、开始动手搭建:Hello openLDAP

1、搭建环境

debian 8 64位服务器

2、下载源码包

(1)openLDAP源码:官网下载地址 | 2.4.46百度云下载地址(密码:8ndq)

(2)BerkeleyDB源码:官网下载地址(需要Oracle帐号登录,而注册又需要梯子) | 5.1.29百度云下载地址(密码:r5vz)

(3)Apache Direcotry Studio安装包:官网下载地址 | 2.0.0 for windows 64百度云下载地址(密码:sjvz)

3、编译和安装

(1)如果是新系统,先安装基本的gcc、make等工具:

apt-get install gcc
apt-get install make

(2)安装BerkeleyDB

因为openLDAP底层数据库采用的BerkeleyDB,它是一种读数据库,读快写慢,支持分布式但不支持事务。

首先,注意比对一下openLDAP所需要的数据库版本:

#进入openLDAP源码目录
cd openldap-2.4.46
#查看readme含有BDB的上下5行
cat README |grep BDB -C 5

然后,解压BDB源码后,进入build_unix目录(是个空目录),执行configure、make、make install:

tar -zxvf db-5.1.29.tar.gz
cd db-5.1.29/build_unix
../dist/configure
make
make install

make的过程可能需要3分钟,这样BDB就会被安装在/usr/local/BerkeleyDB.5.1目录下了。

最后要把BDB的可执行文件加入环境变量,随意你使用什么方式,这里采用bashrc:

vi ~/.bashrc
#加入
export PATH=$PATH:/usr/local/BerkeleyDB.5.1/bin
#生效
source ~/.bashrc

(3)安装openLDAP

解压openLDAP源码、进入目录,执行configure:

./configure CPPFLAGS="-I/usr/local/BerkeleyDB.5.1/include" LDFLAGS="-L/usr/local/BerkeleyDB.5.1/lib" LD_LIBRARY_PATH="/usr/local/BerkeleyDB.5.1/lib" --prefix [自定义目录]

其中--prefix可以安装到指定目录,如果不指定的话,默认安装到/usr/local。然后提示要make depend:

make depend

接着:

make
make test

这就说明make对了,最后执行安装:

make install

4、配置

(1)配置openLDAP

vi /usr/local/etc/openldap/slapd.conf

修改这两行,这是设置管理员帐号密码的:

我修改为了:

suffix      "dc=bewindoweb,dc=com"
rootdn      "cn=Manager,dc=bewindoweb,dc=com"
rootpw     **********

密码可以使用工具来生成高强度密码,比如对123456进行加密:

slappasswd -s 123456
{SSHA}VuxpAZ3Dt8Hwasb/eHJHh3CkkCg1qdEF

然后重启slapd:

/usr/local/libexec/slapd

可能会提示错误:libdb-5.1.so: cannot open shared object file: No such file or directory,原因是找不到这个库,其实这个库在BDB目录下的,建立一个硬链接:

ln -s /usr/local/BerkeleyDB.5.1/lib/libdb-5.1.so /usr/lib/libdb-5.1.so

就不报错了。最后增加一个用户:

vi /usr/local/etc/openldap/bwb.ldif
#根据前面对应的配置加入这些
dn:dc=bewindoweb,dc=com
objectclass:dcObject
objectclass:organization
o:bewindoweb company
dc:bewindoweb

dn:cn=Manager,dc=bewindoweb,dc=com
objectclass:organizationalRole
cn:Manager

然后加入数据库:

# -x:简单认证
# -D:指定服务器Dn
# -w:绑定dn的密码
# -f:使用LDIF文件进行条目添加
ldapadd -x -D "cn=Manager,dc=bewindoweb,dc=com" -W -f bwb.ldif

会提示输入密码,输入之前配置的密码即可。

验证一下是否加入成功:

ldapsearch -x -b 'dc=bewindoweb,dc=com'

5、使用phpLDAPadmin进行可视化

apt-get install phpldapadmin

注意会安装php5和apache2,如果你已经有网站项目在上面比如php7,那么就要考虑一下怎么处理了。

修改配置文件:

vi /etc/phpldapadmin/config.php

//$servers->setValue('server','base',array('dc=example,dc=com'));
$servers->setValue('server','base',array('dc=bewindoweb,dc=com'));

//$servers->setValue('login','bind_id','cn=admin,dc=example,dc=com');
$servers->setValue('login','bind_id','cn=Manager,dc=bewindoweb,dc=com');

访问界面:http://xxx.xxx.xxx.xxx/phpldapadmin/

如果发现访问不了,除了检查phpLDAPadmin,也别忘了检查服务器是否开了端口(默认ldap都在389端口):

查看端口:

lsof -i:389

在线端口扫描

6、使用Apache Direcotry Studio进行可视化

安装在windows上后,点击菜单:

Window → Open Perspective →  Ldap
Window → Show View → Connection

右键新建一个连接:

由于不支持直接输入ip,修改本地的hosts文件C:\Windows\System32\Drivers\etc\hosts:(为了不影响bewindoweb.com的正常访问,这里写成了testbewindoweb.com)

106.12.129.65 testbewindoweb.com

然后填入服务器信息,点击Check Network Parameter可以测试TCP连接是否成功:

填入管理员帐号,测试是否可以验证成功:

然后就可以愉快地使用了:

总结

目前Confluence、Grafana、禅道、YAPI等等非常多的软件都已集成LDAP,掌握LDAP的原理、安装和使用有利于以后的更加透彻理解。


转载请注明出处http://www.bewindoweb.com/223.html | 三颗豆子
分享许可方式知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议
重大发现:转载注明原文网址的同学刚买了彩票就中奖,刚写完代码就跑通,刚转身就遇到了真爱。
你可能还会喜欢
具体问题具体杠