首页 > openldap > Centos6 yum安装openldap+phpldapadmin+TLS+双主配置
Centos6 yum安装openldap+phpldapadmin+TLS+双主配置
2014年5月21日 26,965 浏览数 发表评论 阅读评论
 

 

1.概念介绍

 

LDAP是轻量目录访问协议,英文全称是Lightweight Directory Access Protocol,一般都简称为LDAP。它是基于X.500标准的,但是简单多了并且可以根据需要定制。与X.500不同,LDAP支持TCP/IP,这对访问Internet是必须的。LDAP的核心规范在RFC中都有定义,所有与LDAP相关的RFC都可以在LDAPman RFC网页中找到。 简单说来,LDAP是一个得到关于人或者资源的集中、静态数据的快速方式。 LDAP是一个用来发布目录信息到许多不同资源的协议。通常它都作为一个集中的地址本使用,不过根据组织者的需要,它可以做得更加强大

 

现在市场上有关LDAP的产品已有很多,各大软件公司都在他们的产品中集成了LDAP服务,如Microsoft的ActiveDirectory、Lotus的Domino Directory、IBM的WebSphere中也集成了LDAP服务。LDAP的开源实现是OpenLDAP,它比商业产品一点也不差,而且源码开放。

OpenLDAP 是最常用的目录服务之一,它是一个由开源社区及志愿者开发和管理的一个开源项目,提供了目录服务的所有功能,包括目录搜索、身份认证、安全通道、过滤器等等。大多数的 Linux 发行版里面都带有 OpenLDAP 的安装包。OpenLDAP 服务默认使用非加密的 TCP/IP 协议来接收服务的请求,并将查询结果传回到客户端。由于大多数目录服务都是用于系统的安全认证部分比如:用户登录和身份验证,所以它也支持使用基于 SSL/TLS 的加密协议来保证数据传送的保密性和完整性。OpenLDAP 是使用 OpenSSL 来实现 SSL/TLS 加密通信的

这里引申一下LDAP主要的简称含义:

  • o– organization(组织-公司)
  • ou – organization unit(组织单元-部门)
  • c – countryName(国家)
  • dc – domainComponent(域名)
  • sn – suer name(真实名称)
  • cn – common name(常用名称)

2. 环境介绍

 

这里准备3台虚拟机,在cloudstack上生成很方便,当然可以根据自己需求来部署,可以只部署简单的ldap,也可以部署ldap+ca,也可以部署ldap复制,前2个都可以在一台服务器上进行。

openldap master:         192.168.1.137            域名:openldap.54im.com

openldap slave:             192.168.1.143             域名:openldap2.54im.com

ca+openldap client:    192.168.1.111              域名:openldap-ca.54im.com

 

2. 准备工作

 

在3台服务器上均进行如下操作。

  • dns配置


vi /etc/resolv.conf

nameserver 8.8.8.8
nameserver 8.8.4.4

  • selinux配置
当然生产环境建议还是开启,我这里偷懒下先关掉。
setenforce 0
  • epel配置
rpm -Uvh http://mirror-fpt-telecom.fpt.net/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm

3. yum部署ldap

 

 

  • yum安装openldap:

  • 日志配置:

  • 创建管理员密码,尽量使用高强度密码
这里我设置的密码为 54im.com,生存的{SSHA}DOS0VOBzmvD3beMsuFllLBOi6CAt4Kcj一会配置文件要用

 

修改slapd.conf配置


vi /etc/openldap/slapd.conf 我这里列出要修改的项

修改suffix 和rootdn,rootpw,suffix我这里用了二级域名,如果你想用主域名也可以,写成dc=54im,dc=com,其中rootpw可以是明文,这里我们经过SSHA算法加密下,

  • 测试下配置文件是否修改成功

 

这里有个日志级别的问题

你可以同时设置几种日志级别,方法是将日志级别的数字加起来。 比如同时设置Trace和Stats级别,那么在slapd.conf中:

loglevel 257

或者启动OpenLDAP时,使用命令参数-d 257来指定

 

  • 创建数据库文件(从模版复制)生成DB_CONFIG

 

启动ldap服务,自动创建数据库文件

服务启动后,可以看到生成了几个数据库文件

  •  检查搜索域
-x 信息排序
-b 指定搜索范围起点

  • 数据录入
服务器正常运作后,就可以录入信息了。信息的录入有三种方法,一种是手工录入,一种是.ldif文件格式录入,一种是web界面录入(下面会介绍phpldapadmin录入)。信息录入用到ldapadd这个程序。这里我们介绍用.ldif方式录入
  • 创建待认证的用户 

  •  安装及配置迁移工具

  •  创建认证账户文件

主要的概念:

dn:唯一区分名

dc:所属区域

ou:所属组织

cn/uid:全名/登录ID

 

运行脚本migrate_base.pl,它会创建根项,并为 Hosts、Networks、Group和 People 等创建低一级的组织单元,指定为base.ldif文件,这里我们只有下面这3个

创建用户和组的数据库文件

  •  迁移系统用户到ldap数据库

如果出现错误:
ldap_bind: Invalid credentials (49)
就表示你要么给出了错误的”cn=”条目,要么给出了错误的密码
Enter LDAP Password:(输入你刚才设置的密码),正确之后会显示:

如果有防火墙,记得打开389端口

 

4. phpldapadmin安装

 

yum安装apache+php环境

 

yum安装phpldapadmin

 

我这里是yum安装的,所以config.d下面有phpldapadmin.conf,改下httpd.conf中的servername就可以。

注意:如果是下载的phpldapadmin包接下的话需要修改httpd.conf配置文件,最文件最后新增

修改phpldapadmin配置文件

 

重启httpd服务后访问

 

登录ldap

登录后即可新增用户和组等操作,看了到我们迁移进去的3个用户和组

 

5.ldap客户端配置

 

我这里客户端安装在192.168.1.111 这台服务器上,这台后面也会做证书服务器。

 

我们可以在终端使用图像化界面配置,在crt里面输入  authconfig-tui

 

这里注意,如果有dns的情况下话,可以用域名,否则要绑定hosts或者用IP,TLS这里我们先不选,后面再介绍

authconfig-tui会修改很多配置文件,先来检查下

 

 

 

 

 

启动nslcd服务,并设置为开机启动

验证:

显示如上信息,说明账户可以登录,但没找到用户主目录。这需要在本地配置nfs并通过autofs自动挂载服务器家目录到本地客户端

 

6.用户目录自动挂载

 

6.1 服务器端配置

nfs在openldap服务器上配置,默认centos 6上已经安装了nfs

配置nfs

如果开了selinux,则需要 setsebool  -P    use_nfs_home_dirs   on

vi /etc/sysconfig/nfs,去掉一些端口的注释符(可选,如果不取消这些端口注释,客户端showmount的时候会报错,不影响挂载)

重启nfs

配置防火墙

在客户端检查下nfs输出

6.2 客户端配置

默认情况下,centos 6已经安装了nfs及autofs,如果没有,则使用yum –y install nfs-utils autofs

配置autofs服务

重启下autofs服务:service autofs restart

客户端测试:

 

注意事项:

  对/etc/auto.nfs文件使用*及&通配符时,则/etc/auto.master里的挂载点必须与服务器的挂载点同名同目录/nfshome,否则客户端su – 切换时会提示找不到目录。

  不建议把ldap用户直接创建在/home文件夹里。否则由于/etc/auto.nfs文件里的*及&符号的自动匹配的作用,客户autofs会自动在内存中创建/home目录,会隐藏掉实际的/home目录

 

7.配置TLS传输加密

配置openldap的加密,可以用自签名证书,也可以用CA中心签名,这里我的CA中心签名,CA服务器是 192.168.1.111

前言:

为啥要用TLS?

Openldap默认使用简单验证,对slapd的所有访问都使用明文密码通过未加密通道进行。为了确保信息安全,需要对信息进行加密传输,SSL(Secure Sockets Layer)是一个可靠的解决方案。

它使用 X.509 证书,由可信任第三方(Certificate Authority (CA))进行数字签名的一个标准格式的数据。有效的数字签名意味着已签名的数据没有被篡改。如果签名的数据被更改,将不会通过验证

SSL/TLS 加密原理简介

SSL/TLS 是基于 PKI 机制的加密方式,包括证书认证、密钥交换、非对称加密、对称加密。SSL/TLS 采用 CA 作为服务端和客户端都信赖的具有权威性的组织,证书的颁发和认证都依赖于 CA,并假定 CA 颁发的证书是可靠的、可信赖的,证书里面的内容是真实的、有效的,并可用于客户机和服务器进行安全的可靠的通信加密。

SSL/TLS 证书用来认证服务器和客户机双方的身份,并用于密钥交换时候的非对称加密。密钥交换完毕之后,就可以用这个密钥做通信数据的对称加密了,具体的加密算法是由客户机和服务器互相协商得来。服务器和客户机由于 SSL/TLS 库的不同以及用户的配置不同,双方支持的算法列表不完全相同,当双方做 SSL/TLS 握手的时候,就需要将自己支持的算法列表及优先顺序告知对方,一旦对方按照优先顺序找到了第一个支持的算法,那么协商完成,否则双方协商失败,SSL/TLS 连接断开

  • 安装openssl

yum install openssl

  • 准备工作

  •  CA服务器生存自己的私钥,公钥(证书)

利用刚才创建的RSA私钥创建自签署的根证书

  •  openldap服务器生成私钥,并生成证书请求文件
在192.168.1.137这台服务器上执行,生成私钥的时候我选择了不要密码,否则启动服务的时候还要输入次密码

  •  向CA服务器请求证书

  •  CA服务器颁发证书

  •  openldap服务器下载自己的证书

 

  • openldap服务器安装证书:

 

  • CA服务器发布自己的公钥,openldap客户端下载公钥
客户端有图像界面的话可以用setup配置,运行system-config-authentication,然后勾选使用TLS,输入证书链接(可以用ftp或者http把CA服务器的公钥共享出来)
我这里直接scp过去(由于客户端和我ca服务器在一台,这里我只要复制下就可以,其他同学该rz的rz,该scp的scp吧)
cp /etc/pki/CA/private/CA.key /etc/openldap/cacerts/
  • openldap客户端修改配置
之前的是ldap,现在改为ldaps

然后重启/etc/init.d/nslcd restart

  •  openldap客户端测试

 

如果遇到如下错误:

在客户端的ldap.conf中加了“TLS_REQCERT allow”,重启nslcd 后出现了正常结果

  •  ldap验证帐号密码
这里的密码就是之前在openldap服务器端创建的系统帐号密码

  •  搜索ldap服务器域信息

8.配置openldap双主实现高可用 mirrorMode

 

首先我们来配置一台和主一样的openldap,保证以下条件

一、保证两台服务器里都配置的一样的根dc,比如我的是:dc=openldap,dc=54im,dc=com。

二、两边的管理帐户都有cn=Manager,dc=openldap,dc=54im,dc=com,密码都为54im.com。

三、保证目前AB两台服务器的数据完全一致。如果闲麻烦可以先导出所有数据,然后删除当作全新安装,待同步完成后从其中一台导入即可。

前言:

Openldap 2.4的同步机制已经和2.3完全不同,我这里的同步机制采用的是镜像模式,并且双向镜像。

  • yum安装ldap和http php phpldapadmin

  •  配置slapd.conf

 

我这里是yum安装的,所以config.d下面有phpldapadmin.conf,改下httpd.conf中的servername就可以。

注意:如果是下载的phpldapadmin包接下的话需要修改httpd.conf配置文件,最文件最后新增

  • 配置phpldapadmin

最后启动slpad服务

/etc/init.d/slapd start

  • 访问openldap2.54im.com 的phpldapadmin
  • 在openldap.54im.com上导出下数据
导出后会是文本的形式显示在界面上,我们把内容负责到一个文件里面叫 openldap.ldif
  • 在openldap2.54im.com上导入数据
在openldap 节点2上我们可以看到 把openldap.54im.com 上的数据导入进去了,目前为止2边的数据已经完全一致了。
  • 配置openldap.54im.com上的slapd.conf
注意先备份下原来的配置文件

由于openldap2上我没有配置TLS,所以这里主主同步我用ldap 389来同步。当然我openldap上同时开了 ldap和ldaps

 这里解释下各参数含义

 

重启ldap服务
killall -9 slapd
slapd -h ldap:/// ldaps:///
  • 配置openldap2.54im.com上的slapd.conf
openldap2 服务器上我没有配置TLS,这里我可以直接重启ldap服务  /etc/init.d/slapd restart
  • 在openldap.54im.com上新增用户
这里可以指定用户所属组,用户的shell
确定信息无误,点提交就完成新建用户
可以看到在People这个ou已经有我们新建的用户了
  • 在openldap2.54im.com上查看用户是否同步,并删掉用户,
  • 在openldap2.54im.com上新增组,然后看openldap.54im.com上是否也进行同步

 

9.另一个ldap管理工具 LDAP Account Manager

如果平时帐号操作比较频繁的话,推荐使用ldap account manager这个工具。
LDAPAccountManager(LAM)是一个用来管理储存在一个LDAP目录中的用户的web前端应用程序,管理系统,管理员可以通过加密的方式进行操作,增强了安全性。LAM支持管理的帐号类型有Samba2/3、Unix地址簿接口和计算机需要的信息,包括NIS映射、E-mail假名,MAC地址等。

LDAP Account Manager强大功能

1、使用LAM,可以通过Web接口较为直观的、简便的管理存储在LDAP目录里的用户、用户组和计算机系统账户。

2、管理Unix的用户、用户组、主机、域名。

3、强大的过滤和排序功能。

4、帐号属性管理。

5、多构造属性。

6、直观树状查看模式。

7、计划查看模式。

8、通过文件上传创建帐号。

9、所有帐号可导出为PDF文件格式。

10、管理用户、用户组、配额和自动创建删除用户的Home目录。

11、支持LDAP+SSL加密模式。

12、多国语言支持,如Catalan、Chinese(Traditional)等。

 

安装需求

1、PHP5语言环境和Perl语言环境。

2、OpenLDAP2.0或更高版本。

3、支持CSS的网页浏览器。

4、Apache WebServer,建议安装SSL、PHP-Module(PHP-Module with ldap、Gettext、XML、Mcrypt+mhash)等模块。

 

在CentOS6.5安装LDAP Account Manager比较方便,只用用官方提供的rpm包安装。

  • 下载安装:

这里会自动在httpd.conf生成配置文件,非常方便。

cat /etc/httpd/conf.d/lam.apache.conf

  •  配置文件修改

  •  登录:
配置文件中有机器这个OU,数据库中没有,所以这里提示创建machines这个OU
可以按树形结构查看

10.windown上对openldap进行验证

 

 

在windows想验证自己搭建的openldap是否配置成功,有个图像化的操作界面,首先电脑上得安装java软件jdk-8u5-windows-x64.exe。(不是浏览器那个java插件)

软件下载:http://pan.baidu.com/s/1ntHQF4P

软件解压后,运行lbe.bat这个

 

11.关闭openldap匿名查询

 

 

默认openldap匿名查询开了,所以只要别人知道你的openldap服务器ip就可以扫描到你的组织架构,OU,用户等信息,这些对外公布是不安全的。

比如上面这个图,我只输入了openldap的域名,勾上匿名,就可以查到你得额Base DN,然后保存后,就可以连接看到你整个组织架构了。

怎么关闭openldap的匿名查询呢,只要在slapd.conf配置文件中加入disallow bind_anon即可(加在 allow bind_v2 这行后面)。

发现已经连接不上我们的openldap了。

 

 

12.  附录

 

12.1. OpenSSL相关命令:

创建CA中心:( umask 77; openssl genrsa -out private/my-ca.key -des3 2048 )

openssl req -new -x509 -key private/my-ca.key -days 365 > my-ca.crt

私钥加密:openssl rsa -in encrypted.key -out unencrypted.key

私钥解密:openssl rsa -in unencrypted.key -out encrypted.key

生成私钥:( umask 77; openssl genrsa 1024 > dovecot.key )

生成CSR:(umask 77; openssl req -new -key somefile.key -out somefile.csr )

可用/etc/pki/tls/certs/Makefile创建CSR

查看CSR:openssl req -noout -in somefile.csr -text

创建CA签名证书:openssl ca -in my.csr -out my.crt

证书吊销:openssl ca -revoke badcert.crt

生成证书吊销列表CRL:openssl ca -gencrl -out revoked.crl

生成DER供firefox使用:openssl crl -in revoked.crl -outform. DER -out revoked.der.crl

检查CRL内容:openssl crl -in revoked.crl -noout -text

12.2 快速清除openldap配置

附:两种快速清除配置、重新导入数据的配置命令

==================     前面五行都是相同的   =====================

 

 

==================     以下为第一种方法   =====================

==================     以下为第二种方法   =====================

12.3 手工数据录入

 

手动录入方法

第一步是要建立DN:

注意:如果你用复制/粘贴功能把以上内容拷贝过去,一定要注意每行后面不要有空格,建议还是手工输入,按Ctrl+d存盘。

第二步是建立RDN:

输入密码,这里的密码是在配置文件中rootpw项设置的密码,不是操作系统中root用户的密码。验证通过后就可输入以下内容:

输入完所有信息后,按Ctrl+d结束存盘。如果出现出错信息,请查一下对象类和属性的对应关系有没有错或输入失误。初学者就容易出错的地方是对象类和属性的对应关系没有处理好。对象类和属性是在schema文档中定义的。它们之间的关系是这样的,对象类中有些属性是必选的,有些属性是可选的。录入信息的属性必须在对象类中有定义才能用。

输入以下命令可查询到刚才输入的信息。

如果按以上配置文件设置了acl,用上面的查询命令是查询不到受保护的内容的。如上面的userPassword and mail。要查询到这些受限内容,需要通过验证才可以:

 

本文参考:

http://www.server-world.info/en/note?os=CentOS_6&p=ldap&f=4
http://iceblood.blog.163.com/blog/static/11331322720125843938486/
http://blog.sina.com.cn/s/blog_92dc41ea0101fyh9.html
http://blog.sina.com.cn/s/blog_64aac6750101gwst.html
http://mosquito.blog.51cto.com/2973374/1098456

  1. 2014年5月27日01:38 | #1

    很不错的openldap文档,按照文档步骤操作到使用ssl客户端加密传输的时openldap客户端验证ldapwhoami -v -x -Z 的时候出现了
    #ldapwhoami -v -x -Z
    ldap_initialize( )
    ldap_start_tls: Can’t contact LDAP server (-1)
    additional info: TLS error -8172:Peer’s certificate issuer has been marked as not trusted by the user.
    ldap_sasl_bind(SIMPLE): Can’t contact LDAP server (-1)

    经过google查问题,在客户端的ldap.conf中加了“TLS_REQCERT allow”,重启nslcd 后出现了正常结果

  2. 2014年7月15日15:17 | #3

    非常感谢提供那么详尽的说明,按照提示成功配置,再次谢过!

  3. 2014年7月15日15:30 | #4

    还有想请教一下,如何更改端口?我用了两种方法,重启后都变回默认
    slapd -f /etc/openldap/slapd.conf -h ldap://3891
    slapd -h “ldap://:3891”
    怎样才能永久更改?
    我系统转了zimbra,它自带ldap,所以端口冲突。先谢了

    • woyoo
      2014年7月21日09:36 | #5

      可以把这个命令写成启动脚本,貌似只能通过这种方式变更ldap的端口。

  4. Tiny
    2014年12月11日08:59 | #6

    你好:这篇LDAP的博客写的很好,我也配置出来了,但是导入的时候有一些问题。我从windows的LDAP中导出数据导入到linux到LDAP报错:
    不能增加该对象到LDAP服务器。
    LDAP said: Undefined attribute type
    Error number: 0x11 (LDAP_UNDEFINED_TYPE)
    描述: The attribute type specified is invalid.
    帮帮我吧,大神!

  5. Tiny
    2014年12月12日06:16 | #7

    求助@Tiny

  6. 旅行者号船长
    2015年3月17日08:51 | #8

    你好.我最近也在搞 ldap. 请教一下这个存储怎么改成 mysql

  7. 学无止境
    2015年9月25日00:40 | #9

    请问一下:
    1.你的OpenLDAP2要使用TLS,怎么做呢,与OpenLADP一样?
    2.Linux客户端要加域,怎么加?
    3.Windows客户端要加域,怎么加?
    4.这个与Samba域有何区别,我看到Samba也可以实现这样的LDAP,还可以让Windows也加域
    5.感谢你的付出!

  8. 小田
    2015年10月28日01:49 | #10

    服务器端配置成功,phpadminldap也安装成功,客户端加入LDAP后能通过su切换到ldap用户,/home目录挂载也正常,但是就是不能直接通过ldap用户登陆系统 远程SSH也不行。方便给我回个邮件吗?我把安装脚本和文档发给你,麻烦帮忙看看什么问题。

  9. nortorm
    2015年11月2日04:05 | #11

    我想问下用那个lam管理的话samba域控要怎么设置?

  10. lc蓝色风暴
    2015年12月30日09:51 | #12

    你好,请问下
    phpldapadmin里面怎么没有 Sodo Policy

  11. 安静
    2016年1月7日03:03 | #13

    @小田
    你这个问题解决了吗?

  12. caden
    2016年3月9日10:57 | #14

    为什么我按这个搭建之后,登录提示 Invalid Username or Password.
    就换成顶级域名,没用二级域名

  1. 本文目前尚无任何 trackbacks 和 pingbacks.