【1】 LDAP简介
LDAP(Lightweight Directory Access Protocol) 代表轻量级目录访问协议
LDAP 是一种非关系型数据库
LDAP 可扩展性和灵活性良好 安装和配置简单

【2】 几个重要的概念
dn : 一条记录的位置
dc : 一条记录的所属区域
ou : 一条记录的所属组织
cn/uid: 一条记录的名字/ID

【3】 LDAP数据添充原理
把一个庞大的学生档案放到LDAP里 具体步骤: 
1】 建立一个"dc=ourschool,dc=org“的树根" 通过编辑"slapd.conf"来实现
2】 建立18个系分别是
dnu=computer,dc=ourschool,dc=org
dnu=film,dc=ourschool,dc=org
...
3】 在每个系建立专业 如
dnu=Linux,ou=computer,dc=ourschool,dc=org
... 
4】 加学生
dn:cn=xiaoming,ou=linux,ou=computer,dc=ourschool,dc=org
5】 学生的详细信息
dn:cn=xiaoming,ou=linux,ou=computer,dc=ourschool,dc=org
objectClass: organizationalPerson
cn:xiaoming
cn:小明
sn:小明
description:a good boy
(以上是一条记录的信息,如果把他保存成LDIF文件,可以导入到LDAP数据库中)

【4】 搭建LDAP认证服务器 
1】 安装服务器软件
yum -y install openldap openldap-servers
2】 编译服务器端配置文件(acl 与ldap配合,实现访问控制)
vim /etc/openldap/slapd.conf
access to *
by * read
by * auth
access to *
by self write

database bdb
suffix "dc=example,dc=com"
rootdn "cn=admin,dc=example,dc=com"
rootpw 123456 

# Mode 700 recommended. (默认LDAP存放数据的目录 权限:700)
directory /var/lib/ldap

3】利用脚本创建OU,并初始化LDAPS
a】 vim /usr/usr/share/openldap/migration/migrate_common.ph
71:$DEFAULT_MAIL_DOMAIN = "example.com";
74:$DEFAULT_BASE = "dc=example,dc=com";
b】 /usr/share/openldap/migration/migrate_base.pl > /tmp/example.ldif
c】 删掉 example.ldif 中多余的选项 (空行不能省略)


#cat /tmp/example.ldif

  1. dn: dc=example,dc=com

  2. dc: example 

  3. objectClass: top 

  4. objectClass: domain 

  5. dn: ou=People,dc=example,dc=com

  6. ou: People 

  7. objectClass: top 

  8. objectClass: organizationalUnit 

  9. dn: ou=Group,dc=example,dc=com

  10. ou: Group 

  11. objectClass: top 

  12. objectClass: organizationalUnit 

       dn: dc=example,dc=com
       dc: example
       objectClass: top
       objectClass: domain


       dn: ou=People,dc=example,dc=com
       ou: People
       objectClass: top
       objectClass: organizationalUnit


       dn: ou=Group,dc=example,dc=com
       ou: Group
       objectClass: top
       objectClass: organizationalUnit


d】创建并初始化
#slapadd -vl /tmp/example.ldif
生成信息:  

  1. bdb_db_open: Warning - No DB_CONFIG file found in directory 

  2. /var/lib/ldap: (2) 

  3. Expect poor performance for suffix dc=uplooking,dc=com

  4. added: "dc=example,dc=com" (00000001) 

  5. added: "ou=People,dc=example,dc=com" (00000002) 

  6. added: "ou=Group,dc=example,dc=com" (00000003) 

       bdb_db_open: Warning - No DB_CONFIG file found in directory
       /var/lib/ldap: (2)
       Expect poor performance for suffix dc=uplooking,dc=com.
       added: "dc=example,dc=com" (00000001)
       added: "ou=People,dc=example,dc=com" (00000002)
       added: "ou=Group,dc=example,dc=com" (00000003)


e】 解决上步警告
#cp /etc/openldap/DB_CONFIG.example /var/lib/ldap/DB_CONFIG

4】 启动LDAP服务
a】# chown -R ldap /var/lib/ldap 
若不改权限 启动失败
b】# service ldap start

#/etc/init.d/ldap start
c】 netstat -tunlp | grep :389
验证 服务监听389端口

5】 安装图形管理程序 phpldapadmin
a】#yum -y install httpd php php-ldap
b】 #service httpd restart
c】 #tar zxvf phpldapadmin-1.2.0.4.tgz -C /var/www/html/
d】 #cd /var/www/html/phpldapadmin-1.2.0.4
e】 #vim config/config.php.example config/config.php
f】 #firefox http://localhost/phpldapadmin-1.2.0.4.tgz

g】 输入用户名 密码登录

cn=admin,dc=example,dc=com
123456
6】 以上为LDAP服务器的通用配置

【5】 实现具体功能,用户的非本地验证登录
1】服务器端利用脚本创建用户文件,并用phpldapadmin导入
a】for i in {1..50};do useradd user$i ; echo user$i | passwd --stdin user$i;done
b】 grep ^user /etc/passwd > /tmp/user
grep ^user /etc/group > /tmp/group
c】 /usr/share/openldap/migration/migrate_passwd.pl /tmp/user > /tmp/user.ldif
/usr/share/openldap/migration/migrate_group.pl /tmp/group > /tmp/group.ldif 
d】 for i in { 1..50 }; do userdel user$i ;done
e】 导入/tmp/user.ldif 和 /tmp/group.ldif

2】服务器端(192.168.1.221)利用nfs共享用户家目录
a】# vim /etc/exports
/home *(rw,sync)

b】# service nfs restart

 

3】客户端配置网络验证
a】 #authconfig-tui
选上使用ldap和使用ldap验证 配置ldap服务器
b】# grep ldap /etc/pam.d/system-auth

  1. auth sufficient pam_ldap.so use_first_pass 

  2. account [default=badsuccess=okuser_unknown=ignore] pam_ldap.so 

  3. password sufficient pam_ldap.so use_authtok 

  4. session optional pam_ldap.so 

    auth sufficient pam_ldap.so use_first_pass
    account [default=bad success=ok user_unknown=ignore] pam_ldap.so
    password  sufficient pam_ldap.so use_authtok
    session optional pam_ldap.so


以上是 system-auth文件多出来的内容
#tail -n 3 /etc/openldap/ldap.conf

  1. URI ldap://192.168.1.221/ 

  2. BASE dc=example,dc=com

  3. TLS_CACERTDIR /etc/openldap/cacerts 

         URI ldap://192.168.1.221/
         BASE dc=example,dc=com
         TLS_CACERTDIR /etc/openldap/cacerts


以上是openldap客户端配置文件 新增内容

c】# rpm -q openldap-clients
查看是否安装openldap客户端 若未安装,请安装

d】 配置触发挂载家目录
#vim /etc/auto.master
/home /etc/auto.home
vim /etc/auto.home
* -rw 192.168.1.221:/home/&
e】 #service autofs restart

f】 测试成功

【6】 开启网络验证后,客户端登录时,优先使用本地/etc/passwd /etc/shadow文件验证,还是优先使用ldap
#grep ldap /etc/nsswitch.conf -n

  1. 36:passwd: ldap files 

  2. 37:shadow: ldap files 

  3. 38:group: ldap files 

   36:passwd:      ldap  files 
   37:shadow:      ldap  files 
   38:group:       ldap  files


由 36 37 38 三行的ldap与files顺序决定

 

本文摘自:http://blog.csdn.net/kakane/article/details/7455922