共计 8542 个字符,预计需要花费 22 分钟才能阅读完成。
一、OpenLDAP 安装方式
在 UNIX 发行操作系统环境下安装 OpenLDAP 软件一般有两种方式:一种是通过源码编译安装,另一种则是通过光盘自带的 rpm 软件包进行安装。下面会分别介绍这两种安装方式,我还是建议使用 rpm 安装,因为方便快捷。安装 OpenLDAP 服务器需要提供守护进程和传统的 OpenLDAP 管理配置工具,主要是 slapd 和 ldap-utils 套件。
我的安装环境是 CentOS 6.7 64 位操作系统,安装前环境准备请看博文 环境准备。http://www.linuxidc.com/Linux/2016-08/134226.htm
1、以软件包形式安装
1 2 3 4 5 6 7 8 9 10 11 12 | # yum 安装 yum install openldap openldap-* -y # 初始化配置文件 cp /usr/share/openldap-servers/slapd .conf.obsolete /etc/openldap/slapd .conf # 初始化数据库配置文件 cp /usr/share/openldap-servers/DB_CONFIG .example /var/lib/ldap/DB_CONFIG # 修改权限 chown -R ldap.ldap /etc/openldap chown -R ldap.ldap /var/lib/ldap |
默认 OpenLDAP 服务所使用的端口为 389,此端口采用明文传输数据,数据信息得不到保障。所以可以通过配置 CA 及结合 TLS/SASL 实现数据加密传输,所使用端口为 636,后面我再介绍实现过程。
2、通过源码编译安装
由于编译安装 OpenLDAP 需要数据库支持,因此 OpenLDAP 软件后端数据库可采用 BerkeleyDBBDB、Oracle、MySQL、MariaDB、GDBM 等数据库软件实现数据的存储。默认 OpenLDAP 采用 Berkeley DB 数据库作为后端存储引擎,而且 OpenLDAP 对 Berkey DB 的版本有一定要求,以 OpenLDAP 2.4 软件版本为例,需要 Berkeley DB 4.4 版本以上,所以在编译 OpenLDAP 源码包时需要先下载 Brekeley DB 源码包,并进行编译安装即可。
Berkeley DB 是由美国 Sleepycat Software 公司开发的开源数据库系统,具有高性能、嵌入式数据库编程库,可存取任意类型的键(key)/ 值(value)对,一键可以存储多个值,且支持在线并发量大的数据查询请求。
非常抱歉,这部分安装设置比较复杂,我就不在这里展示了,如果谁想知道可以给我留言,谢谢。
二、OpenLDAP 配置
我使用的系统是 CentOS 6 系列的,和 CentOS 5 系列的 OpenLDAP 有不小的区别,旧版本的 OpenLDAP 配置文件是 slapd.conf,而新版本(我测试的新版本是 2.4.40)的 OpenLDAP 服务运行时并不会读取该配置文件,而是从 slapd.d 目录(一般与 slapd.conf 在同一目录下)中读取相关信息,我们需要把该目录下的数据删掉,然后利用我们在 slapd.conf 里配置的信息重新生成配置数据。这也可能是你启动服务后运行 ldap 相关命令却出现“ldap_bind: Invalid credentials (49)”错误的主要原因。具体怎么重新生成配置数据请看具体的实验过程。
1、slapd.conf 配置文件参数
以下是我的配置文件,# 的内容是我添加的解释,大家可以根据实际情况修改成自己的域名,如果大家不了解其中的 dn,cn,dc 代表什么,请查看我的博文 理论知识。http://www.linuxidc.com/Linux/2016-08/134225.htm
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | [root@mldap ~] # egrep -v "#|^$" /etc/openldap/slapd.conf # include 行代表当前 OpenLDAP 服务包含的 schema 文件 include /etc/openldap/schema/corba .schema include /etc/openldap/schema/core .schema include /etc/openldap/schema/cosine .schema include /etc/openldap/schema/duaconf .schema include /etc/openldap/schema/dyngroup .schema include /etc/openldap/schema/inetorgperson .schema include /etc/openldap/schema/java .schema include /etc/openldap/schema/misc .schema include /etc/openldap/schema/nis .schema include /etc/openldap/schema/openldap .schema include /etc/openldap/schema/ppolicy .schema include /etc/openldap/schema/collective .schema include /etc/openldap/schema/sudo .schema include /etc/openldap/schema/openssh-lpk-openldap .schema # OpenLDAP 服务允许连接的客户端版本。 allow bind_v2 # OpenLDAP 进程启动时,pid 文件存放路径。 pidfile /var/run/openldap/slapd .pid # OpenLDAP 参数文件存放的路径。 argsfile /var/run/openldap/slapd .args # 传输加密的配置信息 TLSCACertificatePath /etc/openldap/certs TLSCertificateFile "\"OpenLDAP Server\"" TLSCertificateKeyFile /etc/openldap/certs/password database config access to * by dn.exact= "gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" manage by * none database monitor access to * by dn.exact= "gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" read by dn.exact= "cn=admin,dc=wzlinux,dc=com" read by * none # 指定 OpenLDAP 数据库类型。 database bdb # 指定 OpenLDAP 服务域名(DN) suffix "dc=wzlinux,dc=com" checkpoint 1024 15 # 指定 OpenLDAP 服务管理员信息。 rootdn "cn=admin,dc=wzlinux,dc=com" # 指定 OpenLDAP 服务管理员密码,使用 slappasswd -s your_password 来获取加密密码 rootpw {SSHA}hjqcrGsPL6H58QAS0QHBvihVS7x2HHKG # 指定 OpenLDAP 数据库文件的存放目录。 directory /var/lib/ldap # 创建 OpenLDAP 索引。 index objectClass eq ,pres index ou,cn,mail,surname,givenname eq ,pres,sub index uidNumber,gidNumber,loginShell eq ,pres index uid,memberUid eq ,pres,sub index nisMapName,nisMapEntry eq ,pres,sub |
2、启动服务并查询
1 | service slapd start |
查询 LDAP 的目录条目,首先我们介绍一下 ldapsearch 命令,具体可以使用 man 帮助手册查看。
-b:指定查找的节点
-D:指定查找的 DN
-x:使用简单认证
-W:查询是输入密码,或者使用 -w password
-h:OpenLDAP 的主机地址,可以使用 IP 或者域名
-H:使用 LDAP 服务器的 URI 地址进行操作
1 2 3 | [root@mldap ~] # ldapsearch -x -D "cn=admin,dc=wzlinux,dc=com" -H ldap://192.168.2.10 -W Enter LDAP Password: # 就是我们在 slapd.conf 加密的密码 ldap_bind: Invalid credentials (49) |
我们看到出现了错误,这个问题并不是因为密码错误,是因为新版的 LDAP 去读取数据库 (slapd.d),并没有按照我们的配置文件(slapd.conf) 读取,所以我们要删掉数据库配置文件,然后通过 slapd.conf 文件生成,每次修改配置文件都要如此操作。
1 2 3 4 | rm -rf /etc/openldap/slapd .d/* slaptest -f /etc/openldap/slapd .conf -F /etc/openldap/slapd .d chown -R ldap:ldap /etc/openldap/slapd .d service slapd restart |
然后再进行查询,看看结果返回是否正常,我们可以看到 No such object,因为我们什么数据也没有添加,所以查询的结果为零,到此我们的配置都是正常的。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | [root@mldap ~] # ldapsearch -x -D "cn=admin,dc=wzlinux,dc=com" -h 192.168.2.10 -W Enter LDAP Password: # extended LDIF # # LDAPv3 # base <> (default) with scope subtree # filter: (objectclass=*) # requesting: ALL # # search result search: 2 result: 32 No such object # numResponses: 1 |
3、为 ldap server 添加数据
为 ldap 添加用户数据,有四种方法,分别如下,我们选择第四种方法进行试验。
1)可以直接修改 slapd.d 目录下面的数据文件,好处是不用重启服务,直接生效;
2)安��开源工具 migrationtools 来生成 ldfi 文件,并通过 ldapadd 来添加;
3)安装 ldap 客户端,这种方法最为简单;
4)直接编辑 ldfi 文件,然后通过 ldapadd 添加。
首先我们手动编辑 base.ldif 文件。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | [root@mldap ~] # vim base.ldif dn: dc =wzlinux, dc =com objectClass: organization objectClass: dcObject dc : wzlinux o: wzlinux dn: ou=people, dc =wzlinux, dc =com objectClass: top objectClass: organizationalUnit ou: people dn: ou=group, dc =wzlinux, dc =com objectClass: top objectClass: organizationalUnit ou: group |
通过 ldapadd 导入数据,通过 man 可以看到,他的大部分参数和 ldapsearch 差不多,我们这里就直接使用了。
1 2 3 4 5 6 7 | [root@mldap ~] # ldapadd -x -D "cn=admin,dc=wzlinux,dc=com" -w 123456a -h 192.168.2.10 -f base.ldif adding new entry "dc=wzlinux,dc=com" adding new entry "ou=people,dc=wzlinux,dc=com" adding new entry "ou=group,dc=wzlinux,dc=com" |
通过反馈的结果,我们已经看到添加成功了,我们在另外一台安装了客户端的机器上面进行查询一下,可以看到我们查询到的结果和我们的 base.ldif 是一样的。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | [root@test01 ~] # ldapsearch -x -D "cn=admin,dc=wzlinux,dc=com" -w 123456a -h 192.168.2.10 -b "dc=wzlinux,dc=com" -LLL dn: dc =wzlinux, dc =com objectClass: organization objectClass: dcObject dc : wzlinux o: wzlinux dn: ou=people, dc =wzlinux, dc =com objectClass: top objectClass: organizationalUnit ou: people dn: ou=group, dc =wzlinux, dc =com objectClass: top objectClass: organizationalUnit ou: group |
然后我们通过 user.ldif 和 group.ldif 增加一个用户和一个组。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | [root@mldap ~] # cat user.ldif group.ldif dn: uid=test1,ou=people, dc =wzlinux, dc =com objectClass: posixAccount objectClass: top objectClass: inetOrgPerson objectClass: shadowAccount gidNumber: 0 givenName: test1 sn: test1 uid: test1 homeDirectory: /home/test1 loginShell: /bin/bash shadowFlag: 0 shadowMin: 0 shadowMax: 99999 shadowWarning: 0 shadowInactive: 99999 shadowLastChange: 12011 shadowExpire: 99999 cn: test1 uidNumber: 24422 userPassword:: e1NIQX10RVNzQm1FL3lOWTNsYjZhMEw2dlZRRVpOcXc9 dn: cn=DBA,ou=group, dc =wzlinux, dc =com objectClass: posixGroup objectClass: top cn: DBA memberUid: test1 gidNumber: 10673 |
看完那就添加用户和组呗。
1 2 3 4 5 | [root@mldap ~] # ldapadd -x -D "cn=admin,dc=wzlinux,dc=com" -w 123456a -h 192.168.2.10 -f group.ldif adding new entry "cn=DBA,ou=group,dc=wzlinux,dc=com" [root@mldap ~] # ldapadd -x -D "cn=admin,dc=wzlinux,dc=com" -w 123456a -h 192.168.2.10 -f user.ldif adding new entry "uid=test1,ou=people,dc=wzlinux,dc=com" |
然后通过下面的命令查看自己是否添加成功。
1 | ldapsearch -x -D "cn=admin,dc=wzlinux,dc=com" -w 123456a -h 192.168.2.10 -b "dc=wzlinux,dc=com" -LLL |
可能每次查询都写这么多,或许感觉比较麻烦,我们可以在客户端的配置文件里面添加两行数据,客户端的配置文件是 /etc/openldap/ldap.conf。
1 2 | BASE dc =wzlinux, dc =com URI ldap: //ldap .wzlinux.com # 提前设置好 hosts 文件 |
4、通过 slapd.conf 定义用户策略控制
默认情况下,不允许 OpenLDAP 用户自身修改密码,仅管理员具有修改权限。为了提高个人账号的安全性,需要让用户自身可以修改并更新密码信息,不需要管理员干涉。具体步骤如下。
1)定义访问控制策略。
编辑 slapd.conf 配置文件,定位 access 行,添加如下内容。
1 2 3 4 5 | access to attrs=shadowLastChange,userPassword by self write # 只允许自身修改 by * auth access to * by * read # 允许授权用户查看信息 |
2)重新加载 slapd 进程。
1 2 3 4 | rm -rf /etc/openldap/slapd .d/* slaptest -f /etc/openldap/slapd .conf -F /etc/openldap/slapd .d/ chown -R ldap.ldap /etc/openldap/ service slapd restart |
5、日志的配置
在配置文件 /etc/openldap/slapd.conf 中添加如下内容,记得重新生成数据库文件。
1 2 3 | loglevel 296 cachesize 1000 checkpoint 2048 10 |
在 /etc/rsyslog.conf 中添加如下内容,然后重启 rsyslog 服务。
1 | local4.* /var/log/slapd .log |
Liferay Portal 配置使用 Oracle 和 OpenLDAP http://www.linuxidc.com/Linux/2012-07/66928.htm
在 CentOS 6.5 上安装 OpenLDAP 并配置 LDAP 方式用户登录 http://www.linuxidc.com/Linux/2015-04/116536.htm
RHEL7 中 OpenLDAP 的安装与配置 http://www.linuxidc.com/Linux/2015-03/115524.htm
Ubuntu 下 OpenLDAP 服务器的部署步骤 http://www.linuxidc.com/Linux/2014-12/110775.htm
Axigen+OpenLDAP+BerkeleyDB+ejabberd 多域 +JWchat 详细配置 http://www.linuxidc.com/Linux/2012-06/61598.htm
CentOS 部署 OpenLDAP 认证 http://www.linuxidc.com/Linux/2012-04/57932.htm
CentOS Linux 安装 OpenLDAP 服务器 http://www.linuxidc.com/Linux/2014-03/98087.htm
Ubuntu 安装 OpenLDAP 之配置 LDAP http://www.linuxidc.com/Linux/2016-05/130998.htm
OpenLDAP 的详细介绍:请点这里
OpenLDAP 的下载地址:请点这里
本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-08/134227.htm