参考http://kinggoo.com/openldapinstallconf.htm

参考http://linux.it.net.cn/CentOS/server/set/2014/1203/9510.html  

参考http://407711169.blog.51cto.com/6616996/1439944

参考http://linuxadmin.blog.51cto.com/2683824/1615515

参考http://ljl2013.blog.51cto.com/186072/1344531  

openvpn+ldap  http://oldboy.blog.51cto.com/2561410/986933     

LDAP是什么 

LDAP是一个用来发布目录信息到许多不同资源的协议。通常它都作为一个集中的地址本使用,不过根据组织者的需要,它可以做得更加强大。 

  LDAP最基本的形式是一个连接数据库的标准方式。该数据库为读查询作了优化。因此它可以很快地得到查询结果,不过在其它方面,例如更新,就慢得多。要特别注意的是,LDAP通常作为一个hierarchal数据库使用,而不是一个关系数据库。因此,它的结构用树来表示比用表格好。正因为这样,就不能用SQL语句了。 


  简单说来,LDAP是一个得到关于人或者资源的集中、静态数据的快速方式。 


LDAP是轻量目录访问协议(Lightweight Directory Access Protocol)的缩写,其实是一话号码簿,类似于我们所使用诸如NIS(Network Information Service)、DNS (Domain Name Service)等网络目录,也类似于你在花园中所看到的树木。 

LDAP是一种特殊的数据库。但是LDAP和一般的数据库不同,明白这一点是很重要的。 LDAP对查询进行了优化,与写性能相比LDAP的读性能要优秀很多。 

1.1 LDAP的存储规则 

区分名(DN,Distinguished Name) 

和自然界中的树不同,文件系统/LDAP/电话号码簿目录的每一片枝叶都至少有一个独一无二的属性,这一属性可以帮助我们来区别这些枝叶。 

在文件系统中, 这些独一无二的属性就是带有完整路径的文件名。比如/etc/passwd,该文件名在该路径下是独一无二的。当然我们可以有/usr/passwd, /opt/passwd,但是根据它们的完整路径,它们仍然是唯一的。 

在LDAP中,一个条目的区分名称叫做“dn”或者叫做区分名。在一个目录中这个名称总是唯一的。比如,我的dn是"uid=aghaffar, ou=People, o=developer.ch"。不可能有相同的dn,但是我们可以有诸如"uid=aghaffar, ou=Administrators, o=developer.ch"的dn。这同上面文件系统中/etc/passwd 和 /usr/passwd的例子很类似。 

我们有独一无二的属性,在"ou=Administrators, o=developer.ch" 中uid和在"ou=People, o=developer.ch"中的uid。这并不矛盾。

CN=Common Name 为用户名或服务器名,最长可以到80个字符,可以为中文; 

OU=Organization Unit为组织单元,最多可以有四级,每级最长32个字符,可以为中文; 

O=Organization 为组织名,可以3—64个字符长 

C=Country为国家名,可选,为2个字符长 


LDAP目录以一系列“属性对”的形式来存储记录项,每一个记录项包括属性类型和属性值(这与关系型数据库用行和列来存取数据有根本的不同)。 

mail = testmail@mccc.net 

othermailbox = testmailother@mccc.com 

givenname = givenname 

sn = test sn 

属性可添加,以下一个属性必须赋值: 

objectclass=person (值为:person 或 server 或 organization 或 其他自定义的值) 

安装LDAP服务

[root@openldap ~]# yum install openldap-* -y

#拷贝配置文件
[root@openldap ~]# cp /usr/share/openldap-servers/slapd.conf.obsolete /etc/openldap/
[root@openldap ~]# cd /etc/openldap/
[root@openldap openldap]# cp slapd.conf.obsolete slapd.conf

#创建LDAP管理员密码
[root@openldap openldap]# slappasswd 
New password:                     #密码是weyee2014
Re-enter new password: 
{SSHA}3JbjjtzkRtGIh8dOZK43Bv6Cjydiab91

编辑配置文件

[root@openldap ~]# vim /etc/openldap/slapd.conf
database monitor
access to *
         by dn.exact="cn=admin,dc=dev,dc=com" read    #修改这里
         by * none
database        bdb
suffix          "dc=dev,dc=com"        #修改自己的域名
checkpoint      1024 15
rootdn          "cn=admin,dc=dev,dc=com"        #修改自己的域名和管理员用户
# Cleartext passwords, especially for the rootdn, should
# be avoided.  See slappasswd(8) and slapd.conf(5) for details.
# Use of strong authentication encouraged.
# rootpw                secret
# rootpw                {crypt}ijFYNcSNctBYg
rootpw                  {SSHA}3JbjjtzkRtGIh8dOZK43Bv6Cjydiab91    #设置密码

拷贝DB_CONFIG文件到指定目录

[root@openldap ~]# cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG

删除默认/etc/openldap/slapd.d下面的所有内容

[root@openldap ~]# rm -rf /etc/openldap/slapd.d/*
[root@openldap ~]# chown -R ldap.ldap /etc/openldap

启动服务

[root@openldap ~]# service slapd start
Starting slapd:                                            [  OK  ]
[root@openldap ~]# ps aux |grep slap
ldap      1819  0.0  0.9 489740  9576 ?        Ssl  15:41   0:00 /usr/sbin/slapd -h  ldap:/// ldapi:/// -u ldap
root      1830  0.0  0.0 103244   832 pts/0    S+   15:42   0:00 grep slap
[root@openldap ~]# chkconfig slapd on
[root@openldap ~]# chown -R ldap.ldap /var/lib/ldap/
[root@openldap ~]# chown -R ldap.ldap /etc/openldap/

测试并生成配置文件

[root@openldap ~]# slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d
config file testing succeeded        #测试成功

创建一个账号,以备客户端测试登陆

[root@openldap ~]# useradd ldapuser1
[root@openldap ~]# passwd ldapuser1
Changing password for user ldapuser1.
New password: 
Retype new password:             #设置密码为weyee2014
passwd: all authentication tokens updated successfully.

至此,这些用户仅仅是系统上存在的用户(存储在/etc/passwd和/etc/shadow上),并没有在LDAP数据库里,所以要把这些用户导入到LDAP里面去。但LDAP只能识别特定格式的文件 即后缀为ldif的文件(也是文本文件),所以不能直接使用/etc/passwd和/etc/shadow。 需要migrationtools这个工具把这两个文件转变成LDAP能识别的文件。

安装配置migrationtools

[root@openldap ~]# yum install migrationtools -y

编辑migrationtool的配置文件/usr/share/migrationtools/migrate_common.ph

[root@openldap ~]# vim /usr/share/migrationtools/migrate_common.ph 
#大概在第70行
# Default DNS domain        
$DEFAULT_MAIL_DOMAIN = "dev.com";

# Default base 
$DEFAULT_BASE = "dc=dev,dc=com";        #修改成和上文一样的域名

下面利用pl脚本将/etc/passwd 和/etc/shadow生成LDAP能读懂的文件格式,保存在/tmp/下

[root@openldap ~]# /usr/share/migrationtools/migrate_base.pl >/tmp/base.ldif
[root@openldap ~]# /usr/share/migrationtools/migrate_passwd.pl /etc/passwd >/tmp/passwd.ldif
[root@openldap ~]# /usr/share/migrationtools/migrate_passwd.pl /etc/group >/tmp/group.ldif

下面就要把这三个文件导入到LDAP,这样LDAP的数据库里就有了我们想要的用户

#导入base
[root@openldap ~]# ldapadd -x -D "cn=admin,dc=dev,dc=com" -W -f /tmp/base.ldif 
Enter LDAP Password:         #密码是上文中设置的weyee2014
adding new entry "dc=dev,dc=com"

adding new entry "ou=Hosts,dc=dev,dc=com"

adding new entry "ou=Rpc,dc=dev,dc=com"

adding new entry "ou=Services,dc=dev,dc=com"

adding new entry "nisMapName=netgroup.byuser,dc=dev,dc=com"

adding new entry "ou=Mounts,dc=dev,dc=com"

adding new entry "ou=Networks,dc=dev,dc=com"

adding new entry "ou=People,dc=dev,dc=com"

adding new entry "ou=Group,dc=dev,dc=com"

adding new entry "ou=Netgroup,dc=dev,dc=com"

adding new entry "ou=Protocols,dc=dev,dc=com"

adding new entry "ou=Aliases,dc=dev,dc=com"

adding new entry "nisMapName=netgroup.byhost,dc=dev,dc=com"

#导入passwd
[root@openldap ~]# ldapadd -x -D "cn=admin,dc=dev,dc=com" -W -f /tmp/passwd.ldif 
Enter LDAP Password: 
adding new entry "uid=root,ou=People,dc=dev,dc=com"

adding new entry "uid=bin,ou=People,dc=dev,dc=com"

adding new entry "uid=daemon,ou=People,dc=dev,dc=com"

adding new entry "uid=adm,ou=People,dc=dev,dc=com"

adding new entry "uid=lp,ou=People,dc=dev,dc=com"

adding new entry "uid=sync,ou=People,dc=dev,dc=com"

adding new entry "uid=shutdown,ou=People,dc=dev,dc=com"

adding new entry "uid=halt,ou=People,dc=dev,dc=com"

adding new entry "uid=mail,ou=People,dc=dev,dc=com"

adding new entry "uid=uucp,ou=People,dc=dev,dc=com"

adding new entry "uid=operator,ou=People,dc=dev,dc=com"

adding new entry "uid=games,ou=People,dc=dev,dc=com"

adding new entry "uid=gopher,ou=People,dc=dev,dc=com"

adding new entry "uid=ftp,ou=People,dc=dev,dc=com"

adding new entry "uid=nobody,ou=People,dc=dev,dc=com"

adding new entry "uid=dbus,ou=People,dc=dev,dc=com"

adding new entry "uid=vcsa,ou=People,dc=dev,dc=com"

adding new entry "uid=abrt,ou=People,dc=dev,dc=com"

adding new entry "uid=haldaemon,ou=People,dc=dev,dc=com"

adding new entry "uid=ntp,ou=People,dc=dev,dc=com"

adding new entry "uid=saslauth,ou=People,dc=dev,dc=com"

adding new entry "uid=postfix,ou=People,dc=dev,dc=com"

adding new entry "uid=sshd,ou=People,dc=dev,dc=com"

adding new entry "uid=tcpdump,ou=People,dc=dev,dc=com"

adding new entry "uid=mysql,ou=People,dc=dev,dc=com"

adding new entry "uid=ldap,ou=People,dc=dev,dc=com"

adding new entry "uid=ldapuser1,ou=People,dc=dev,dc=com"

#导入group
[root@openldap ~]# ldapadd -x -D "cn=admin,dc=dev,dc=com" -W -f /tmp/group.ldif