一.openldap简介
LDAP是轻量目录访问协议,英文全称是Lightweight Directory Access Protocol,一般都简称为LDAP。属于开源集中账号管理架构的实现。LDAP具有两个国家标准,分别是X.500和LDAP。OpenLDAP支持TCP/IP协议,目前TCP/IP协议是Internet上访问互联网协议。OpenLDAP直接运行在更简单和通用的TCP/IP或其他可靠的传输协议层上,避免了在OSI会话层和表示层的开销,使连接的建立和包的处理更简单,更快;OpenLDAP默认是以Berkeley DB作为后端数据库,Berkeley DB数据库主要以散列的数据库类型进行数据存储。
二. DAP中常用的名词缩写即含义
1.dc(domain component):域名,如域名为example.com变成dc=example,dc=com。
2.uid(user id):指用户的的登录名称,如uid=tom,与linux系统的UID不是一个概念。
3.ou(organization unit):制定一个组织单元的名称,如ou=people,dc=example,dc=com。
4.cn(common name):指一个对象的名称,如果是人,需要使用全名。
5.dn(distinguished name):唯一标识名,类似linux文件系统的绝对路径,每个对象都有唯一的标识 名,如uid=tom,ou=people,dc=example,dc=com。
6.sn(sur name):指一个人的姓氏。
7.giveName:指一个人的名字。
三.LDIF解释
LDIF(LDAP Data Interchanged Format)的轻量级目录访问协议数据交换格式的简称,是存储LDAP配置信息及目录内容的标准文本文件格式。
四.Openldap同步原理及配置
1.OpenLdap同步条件
a.OpenLDAP服务器之间需要保持时间同步。
b.OpenLDAP软件包版本一致。
c.OpenLDAP节点之间域名可以互相解析。
d.配置OpenLDAP同步复制,需要提供完全一样的配置及目录树。
e.数据的条目保持一致。
f.额外的schema文件保持一致。
2.OpenLDAP5种同步模式(大体提一下,相关知识可百度)
a.Syncrepl复制
b.Delta-syncrepl复制(基于变更日志同步)
c.N-Way Multi-Master复制
d.MirrorMode复制(很重要)
e.Syncrepl Proxy代理模式
五.OpenLDAP主主同步实战案例(Mirror Mode)
1.前期规划:
A服务器:192.168.239.140
B服务器:192.168.239.139
时间同步ntpdate
把时间同步放在计划任务(crontab)中,时间同步很重要
修改主机名以及hosts文件
关闭防火墙和selinux
2.下载对应的软件包
检查是否安装wget(yum install -y wget)
mkdir /openldap
wget ftp://ftp.openldap.org/pub/OpenLDAP/openldap-release/openldap-2.4.23.tgz
wget http://download.oracle.com/berkeley-db/db-4.6.21.tar.gz
3.安装对应的软件包
yum -y install libtool-ltdl libtool-ltdl-devel gcc openssl openssl-devel
安装一些加密的软件包(不然后期会报错):yum -y install cyrus-sasl-lib.x86_64
cyrus-sasl-devel.x86_64 cyrus-sasl-plain.x86_64 cyrus-sasl-md5.x86_64
cyrus-sasl-ldap.x86_64
4.编译安装Berkeley DB源码包:
tar -xf db-4.6.21.tar.gz -C /usr/local/src
cd /usr/local/src/db-4.6.21/build_unix/ && mkdir /usr/local/BDB
../dist/configure --prefix=/usr/local/BDB # ../dist/configure --help可以查看帮助
make && make install
echo "/usr/local/BDB/lib/" > /etc/ld.so.conf.d/bdb.conf #添加的库文件和头文件主要作为其 他程序编译安装所调用的库文件和头文件。
ldconfig -v #重新让内核读取库文件
ln -sv /usr/local/BDB/include /usr/include/bdb #添加Berkeley DB相关头文件
5.编译安装OpenLDAP源码包
tar -xf openldap-2.4.23.tgz -C /usr/local/src/
cd /usr/local/src/openldap-2.4.23/
./configure --prefix=/usr/local/openldap --enable-syslog --enable-modules --enable-debug --with-tls CPPFLAGS=-I/usr/local/BDB/include/ LDFLAGS=-L/usr/local/BDB/lib/ --enable-ldap --enable-relay --enable-accesslog --enable-auditlog --enable-syncprov --with-cyrus-sasl --enable-spasswd
make depend
make && make install
echo "/usr/local/openldap/lib/" > /etc/ld.so.conf.d/ldap.conf #添加OpenLDAP库文件
ldconfig -v
ln -sv /usr/local/openldap/include/ /usr/include/ldap #添加OpenLDAP头文件
6.设置可执行命令
cd /usr/local/openldap
ln -s /usr/local/openldap/bin/* /usr/local/bin/
ln -s /usr/local/openldap/sbin/* /usr/local/sbin/
7.配置rootdn密码
slappasswd 生成密码,记录下密码,后期配置文件要用
这是我生成的:{SSHA}K/DXlq/QVoNsC1LnLTxW5KossmkMlaRA
8.创建一些相关目录以及用户(日志目录等等相关目录)
mkdir /data/openldap/{data,log,var}
cd /data/openldap/var/
mkdir run
useradd ldap
9.复制数据库文件以及修改文件权限
cp /usr/local/openldap/etc/openldap/DB_CONFIG.example /data/openldap/data/DB_CONFIG
chown -R ldap:ldap /data/openldap/data
chmod 700 -R /data/openldap/data
10.编辑配置文件
cd /usr/local/openldap/etc/openldap/
vim slapd.conf
配置文件如下:
include /usr/local/openldap/etc/openldap/schema/core.schema
include /usr/local/openldap/etc/openldap/schema/collective.schema
include /usr/local/openldap/etc/openldap/schema/corba.schema
include /usr/local/openldap/etc/openldap/schema/cosine.schema
include /usr/local/openldap/etc/openldap/schema/duaconf.schema
include /usr/local/openldap/etc/openldap/schema/dyngroup.schema
include /usr/local/openldap/etc/openldap/schema/inetorgperson.schema
include /usr/local/openldap/etc/openldap/schema/java.schema
include /usr/local/openldap/etc/openldap/schema/misc.schema
include /usr/local/openldap/etc/openldap/schema/nis.schema
include /usr/local/openldap/etc/openldap/schema/openldap.schema
include /usr/local/openldap/etc/openldap/schema/ppolicy.schema
#include行代表当前OpenLDAP服务包含的schema文件
pidfile /data/openldap/var/run/slapd.pid #OpenLDAP进程启动时,pid文件存放路径
argsfile /data/openldap/var/run/slapd.args #OpenLDAP参数文件的路径
loglevel 256 #日志级别
logfile /data/openldap/log/slapd.log #日志的路径
moduleload syncprov.la #OpenLDAP指定需要加载额外的模块
database bdb #指定OpenLDAP数据库类型
suffix "dc=zhongkai,dc=com" #指定OpenLDAP服务域名(DN)
rootdn "cn=Manager,dc=zhongkai,dc=com" #指定OpenLDAP服务管理员信息
directory /data/openldap/data #指定OpenLDAP数据库文件的存放目录
rootpw {SSHA}zHRFSAehsnbfonWg4GRgNQsiQHxKppvs #管理员密码
index objectclass,entryCSN,entryUUID eq #创建OpenLDAP索引,提高读写效率
overlay syncprov #复制引擎
syncprov-checkpoint 100 10
syncprov-sessionlog 100
serverID 2 节点ID,唯一(修改)
syncrepl rid=123
provider=ldap://192.168.239.139 #对端IP地址(修改)
bindmethod=simple #绑定的方法简单模式
binddn="cn=Manager,dc=zhongkai,dc=com" #绑定的dn
credentials=123456 #密码
searchbase="dc=zhongkai,dc=com" #起始域
schemachecking=off
type=refreshAndPersist
retry="60 +"
mirrormode on #开启mirror mode模式
另外一台机器要修改的地方我已经标记。
11.安装和配置LDAP管理工具PHPldapadmin
yum -y install httpd php php-ldap php-gd php-mbstring php-pear php-bcmath php-xml
yum -y install epel-release
yum --enablerepo=epel -y install phpldapadmin
修改配置文件
1.vim /etc/phpldapadmin/config.php +398
注意:修改配置文件前先备份,这是我的常用方法:cp 文件名{,.bak}
并且在修改配置文件时候,最好不要改动原来的文件,需要改啥就复制相应的行来改动,原来的文件注释掉即可,养成一个好的习惯,很重要哦!
#397行取消注释,398行添加注释
$servers->setValue('login','attr','dn')
// $servers->setValue('login','attr','uid');
2.vim /etc/httpd/conf.d/phpldapadmin.conf
11行:
# Apache 2.4
Require all granted(修改为这个)
启动httpd,并设置为开机自启
systemctl start httpd
systemctl enable httpd
12.开启日志功能
a.vim /root/loglevel.ldif(这四行)
1.dn: cn=config
2.changetype: modify
3.replace: olcLogLevel
4.olcLogLevel: stats
b.vim /etc/rsyslog.d/slapd.conf
1.local4.* /data/openldap/log/openldap.log
13.重新启动rsyslog和slapd服务
systemctl restart rsyslog
usr/local/openldap/libexec/slapd [restart|start|stop]
有时slapd服务停止不了,那就必须使用kill
方法:先用netstat -anlp | grep slapd 查看相应的进程号,使用kill -9 PID号码干掉,重新启动。
14.测试
访问访问用http://ip地址(填自己的呀!别填我的。)/phpldapadmin
点击登录:登录dn:cn=Manager,dc=zhongkai,dc=com
密码:123456(还是填你自己设置的)
先测试140可以向139同步吗?
打开ou=peopel,发现只用一条记录,点击添加新条目,添加zhogkai完成后,看访问139people是否多了一个条目。
基本上需要刷新一下就可以出现。
在192.168.239.140的那台机器上创建对象,看在192.168.239.139上是否同步过去。
成功,然后在192.168.239.139机器上创建一个对象,看192.168.239.140的那台机器是否可以同步过去。这样才算成功。
之前我在实验过程中遇到的问题有:
1.我用到openldap的版本是openldap-2.4.23,源码安装,建议还是源码安装,yum安装版本是openldap-2.4.44,导致没有slapd.conf这个文件,需要修改slapd.d这个目录下的cn=config下的数据库文件,比较复杂,问题比较多,坑比较多,建议源码安装,生产环境下一般都是源码安装,不要嫌弃麻烦。
2.后期测试的是192.168.239.140向192.168.239.139时同步时,可以同步过去,但是192.168.239.139向192.168.239.140同步的时候同步不成,通过查看日志,报address alrealdy in use。
在镜像同步的模式下,两台服务器均可以进行读写操作,任何一台信息发生变化,都会以推的方式进行通知。注意:是那台向那台服务器同步不成功,就去找那台的日志。
六.总结
学习openldap已经差不多俩周了,自己也算有点收获吧,从刚开始的接触到现在略知一二,自己也总结了自己学习新东西的过程:结合参照资料了解基本概念,在实践中具体理解其含义是最有效的方法,其次可以给其他人讲出来,这也是一种好的学习方法;还有就是在报错的时候或者出问题的时候,要有自己解决问题的思路,思路真的很重要。感谢我的师兄,教会了我好多同时也学到了不少东西,再次感谢。