OpenLDAP服务的配置与管理-phpldapadmin管理认证

Posted by Yancy on 2017-03-29

使用 OpenLDAP 集中管理用户帐号

1.OpenLDAP 简介

OpenLDAP可以从 http: //www.openldap.org/ 获得安装包。OpenLDAP 网站主页如图所示。

2.OpenLDAP 软件包的获取与安装
用 rpm –ivh 命令进行安装。

1.redHat系统rpm手工安装

# rpm -qa |grep ldap
openldap-devel-2.3.27-5
php-ldap-5.1.6-5.el5
openldap-servers-2.3.27-5
openldap-2.3.27-5
openldap-clients-2.3.27-5
nss_ldap-253-3

安装
rpm -ivh openldap-servers-2.3.27-5.i386.rpm

warning: openldap-servers-2.3.27-5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186
Preparing... ########################################### [100%] 1:openldap-servers ########################################### [100%]
    [root@localhost teacher]# rpm -ivh openldap-servers-sql-2.3.27-5.i386.rpm
warning: openldap-servers-sql-2.3.27-5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186
Preparing... ########################################### [100%]
601
1:openldap-servers-sql ########################################### [100%]
1
2
3
若出现以上结果表示 openldap 服务器包安装完毕。
centos上面系统6 或者7 都是只能看到:
[root@openldap ~]# rpm -qa |grep ldap openldap-2.4.40-5.el6.x86_64
1
2
3
4
5
6
7
#### 2.根据源代码编译安装
下载源码包:[openldap-stable](ftp://ftp.openldap.org/pub/OpenLDAP/openldap-release)
```bash
#tar –zxvf openldap-stable-20070831.tgz #cd openldap-stable-20070831 #./configure #make depend #make #make test #make install
* Berkeley DB 数据库的安装 OpenLDAP 可以支持多种后台数据库,如 LDBM 和 BDB 等,这些轻量级的数据库项目都是 针对(key,value)类型的信息存放的,属于非关系型数据库,采用 hash 散列或者 B+树的方式存 储数据,查询效率较高。 BDB(Berkeley DB)是由美国 Sleepycat Software 公司开发的一套开放源代码的嵌入式数据库 系统,2006 年被 Oracle 公司收购。它具有良好的可伸缩、高性能的事务处理机制和较好的可扩展 性等优点。OpenLDAP 可以使用 BDB 或 LDBM 作为后台数据库。因此,若需要正常使用 OpenLDAP 服务器,需要安装 BDB 数据库在下载[Berkeley DB](http://www.oracle.com/technology/software/products/berkeley-db/index.html) Berkeley DB 下载页面 以下载并安装 `db-4.6.19.tar.gz` 为例,使用如下命令: ```bash # tar zxvf db-4.6.19.tar.gz # cd db-4.6.19/build_unix # ../dist/configure # make # make install
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
默认情况下,BDB 被安装在/usr/local/BerkeleyDB.4.6/目录中,为了能让 OpenLDAP 使用 BDB 的库文件,还需要将 BDB 库文件所在的目录添加到系统动态链接库的路径中。需要编辑系统动态 链接库的配置文件/etc/ld.so.conf,在文件的末尾加入如下语句:
/usr/local/ BerkeleyDB.4.6/lib 之后,使用以下命令刷新系统动态链接库缓存:Berkeley DB 数据库安装完毕。
#### 3.这里我选择yum一键安装因为centos会自动安装一些需要的依赖
1.LDAP Server Setup:
a.安装LDAP服务(使用YUM本地光盘安装)
会提示安装以下几个必须的包,另外鉴于依赖,可能还会安装一些其他的包,所以我们选择-y:
```bash
openldap-devel-2.4.23-26.el6.x86_64
openldap-clients-2.4.23-26.el6.x86_64
openldap-2.4.23-26.el6.x86_64
openldap-servers-2.4.23-26.el6.x86_64
# yum install -y vim automake autoconf gcc xz ncurses-devel \ patch python-devel git python-pip gcc-c++ # 安装基本环境,后面依赖
# yum install -y openldap openldap-servers openldap-clients openldap-devel
前面编译安装也提到: OpenLDAP 使用`Berkely-DB`来作为数据库存储信息,我们可以去官网下载解压到本地安装。But,用Yum的话,应该会帮我们做好这一切事情。 我们只要在安装完后检查一下是否安装了db4*相关的rpm包就可以了。If true,那恭喜,我们可以进行下一步了。If not,请用yum命令安装。 查看rpm安装包的命令:`rpm -qa | grep db4`
1
2
3
[root@openldap ~]# rpm -qa | grep db4
db4-4.7.25-19.el6_6.x86_64
db4-utils-4.7.25-19.el6_6.x86_64
## 2. 配置 OpenLDAP 服务器 OpenLDAP 的主配置文件是`/etc/openldap/slapd.conf`,配置 OpenLDAP 服务器主要是对该文件 进行修改。 拷贝LDAP配置文件到LDAP目录
1
2
# cp /usr/share/openldap-servers/slapd.conf.obsolete /etc/openldap/slapd.conf ## 该文件是slapd的配置文件
# cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG ## 数据库的配置文件
Note: redhat6.0或6.1版本配置文件在主目录有备份:
1
2
# cd /etc/openldap/
# cp slapd.conf slapd.conf.bak
#### 配置 slapd.conf 文件 需要注意的是每次修改配置文件的设置后,需重新启动 OpenLDAP 服务后才能使新的配置生 效。按照以下方法配置/etc/openldap/slapd.conf 文件。 #### 设置 Schema `Schema(模式)`定义了 LDAP 中的对象类型、属性、语法和匹配规则等,如用户的电子邮件、 联系地址和联系电话等属性,它类似于关系数据库中的表结构。在实际应用中,不同的应用领域 会有不同的 Schema,用户可以通过自定义 Schema 使 LDAP 能够存储各种各样的信息。`OpenLDAP 安装目录的/etc/openldap/schema`目录下包含许多常用的 Schema 定义文件(例如,用于表示单位中 人员的 InetOrgPerson 模式),使用它们已经可以满足一般性应用的需要。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@openldap openldap]# ll /etc/openldap/schema/*.schema
-rw-r--r--. 1 root root 6190 5月 11 07:32 /etc/openldap/schema/collective.schema
-rw-r--r--. 1 root root 8063 5月 11 07:32 /etc/openldap/schema/corba.schema
-rw-r--r--. 1 root root 20499 5月 11 07:32 /etc/openldap/schema/core.schema
-rw-r--r--. 1 root root 73994 5月 11 07:32 /etc/openldap/schema/cosine.schema
-rw-r--r--. 1 root root 10388 5月 11 07:32 /etc/openldap/schema/duaconf.schema
-rw-r--r--. 1 root root 3289 5月 11 07:32 /etc/openldap/schema/dyngroup.schema
-rw-r--r--. 1 root root 6267 5月 11 07:32 /etc/openldap/schema/inetorgperson.schema
-rw-r--r--. 1 root root 13901 5月 11 07:32 /etc/openldap/schema/java.schema
-rw-r--r--. 1 root root 2387 5月 11 07:32 /etc/openldap/schema/misc.schema
-rw-r--r--. 1 root root 7640 5月 11 07:32 /etc/openldap/schema/nis.schema
-rw-r--r--. 1 root root 1514 5月 11 07:32 /etc/openldap/schema/openldap.schema
-rw-r--r--. 1 root root 20467 5月 11 07:32 /etc/openldap/schema/pmi.schema
-rw-r--r--. 1 root root 19963 5月 11 07:32 /etc/openldap/schema/ppolicy.schema
编辑 slapd.conf 文件,如下: ```bash # See slapd.conf(5) for details on configuration options. # This file should NOT be world readable. # 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
  1. 其中,core.schema 是所有 LDAP 目录所必需的,nis.schema 文件用于在 LDAP 目录文件中提 供网络信息系统数据。一般而言,在不能肯定是否需要这些 schema 文件时,不应删除这些文件

2.修改目录树后缀 slapd.conf 中,目录树后缀为:

suffix "dc=my-domain,dc=com"

将其修改为:

suffix "dc=ihaozhuo,dc=com"

3.修改管理员 DN
slapd.conf 中,原 LDAP 修改管理员 DN 为:

rootdn "cn=Manager,dc=my-domain,dc=com"

将其改为:

rootdn  "cn=admin,dc=ihaozhuo,dc=com"
1
2
3
4
5
4.设置支持数据库 将原先设置的数据库: ```bash database ldbm ``` 修改为已安装的BDB:
```bash
database bdb
5.使用 slappasswd 命令创建加密口令 在 slapd.conf 文件中,需要输入修改 OpenLDAP 后台数据库所必需的口令。默认情况下,在 slapd.conf 文件中使用 rootpw 语句以明文字符串定义口令。该口令赋予对后台数据库的完全控制 权限。
1
# rootpw secret
若希望把后台数据库口令改为“qwe123.com”,则作如下修改:
1
rootpw 111
但是,明文字符串是不安全的,应当为 OpenLDAP 创建加密口令。创建加密口令使用 slappasswd命令。加密方式有 SSHA、MD5、SMD5、SSH 等。 #### 创建LDAP管理员密码 这里我输入的密码是qwe123.com,输入完密码后,返回一串密文,先保存到剪贴板,之后要复制到LDAP配置文件中使用:
1
2
3
4
[root@openldap ]# slappasswd
New password:
Re-enter new password:
{SSHA}k2+3iWauGVNo8k2sKQbGAe/iUeaAq3Hk
则 OpenLDAP 后台数据库将使用加密口令。 总结配置:
1
2
3
4
5
6
7
8
9
10
database bdb
suffix "dc=ihaozhuo,dc=com"
checkpoint 1024 15
rootdn "cn=admin,dc=ihaozhuo,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}k2+3iWauGVNo8k2sKQbGAe/iUeaAq3Hk
到这里就配置完sldap.conf * 说明:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
loglevel:设置日志级别
suffix:其实就是BaseDN
rootdn:超级管理员的dn
rootpw:超级管理员的密码
```
#### 修改系统日志配置文件
```bash
# vim /etc/rsyslog.conf
local4.* /var/log/ldap.log
# local7.*下添加一行
在启动服务。
# service rsyslog restart
## 3. 测试 slapd.conf 设置 完成 slapd.conf 文件的设置后,可以运行 slaptest 命令进行测试。命令如下:
1
2
[root@openldap openldap]# slaptest -u
config file testing succeeded
如果lapd.conf文件设置不正确,将出现`“slaptest: bad configuration file!”`的提示,同时提示 错误的行号,按照提示进行修改后,运行 slaptest 命令重新检查,直到配置文件设置正确。可[参考链接](http://www.oschina.net/question/137892_77767) #### OpenLDAP 的启动与停止 启动slapd, 查看启动情况
1
service slapd start
如果跟下面一样报错 error启动 slapd:[失败] 下面是解决方法:
1
2
3
4
5
6
7
8
9
[root@openldap openldap]# service slapd start
/var/lib/ldap/__db.006 is not owned by "ldap" [警告]
/var/lib/ldap/__db.005 is not owned by "ldap" [警告]
/var/lib/ldap/__db.004 is not owned by "ldap" [警告]
/var/lib/ldap/__db.003 is not owned by "ldap" [警告]
/var/lib/ldap/alock is not owned by "ldap" [警告]
/var/lib/ldap/__db.001 is not owned by "ldap" [警告]
/var/lib/ldap/__db.002 is not owned by "ldap" [警告]
正在启动 slapd: [失败]
解决方法:
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
进入 cd /var/lib/ldap/
slapd (会生成一些库文件)
[root@openldap ldap]# ll
总用量 11312
-rw-r--r--. 1 root root 2048 9月 28 15:41 alock
-rw-------. 1 root root 24576 9月 28 15:41 __db.001
-rw-------. 1 root root 9093120 9月 28 15:41 __db.002
-rw-------. 1 root root 335552512 9月 28 15:41 __db.003
-rw-------. 1 root root 2359296 9月 28 15:37 __db.004
-rw-------. 1 root root 753664 9月 28 15:41 __db.005
-rw-------. 1 root root 32768 9月 28 15:41 __db.006
-rw-r--r--. 1 root root 845 9月 28 15:06 DB_CONFIG
[root@openldap ldap]# slapd
[root@openldap ldap]# ll
总用量 11472
-rw-r--r--. 1 root root 2048 9月 28 15:51 alock
-rw-------. 1 root root 24576 9月 28 15:51 __db.001
-rw-------. 1 root root 9093120 9月 28 15:51 __db.002
-rw-------. 1 root root 335552512 9月 28 15:51 __db.003
-rw-------. 1 root root 2359296 9月 28 15:51 __db.004
-rw-------. 1 root root 753664 9月 28 15:51 __db.005
-rw-------. 1 root root 32768 9月 28 15:51 __db.006
-rw-r--r--. 1 root root 845 9月 28 15:06 DB_CONFIG
-rw-------. 1 root root 8192 9月 28 15:51 dn2id.bdb
-rw-------. 1 root root 32768 9月 28 15:51 id2entry.bdb
-rw-------. 1 root root 10485760 9月 28 15:51 log.0000000001
[root@openldap ldap]# netstat -ntlp | grep 389
tcp 0 0 0.0.0.0:389 0.0.0.0:* LISTEN 1859/slapd
tcp 0 0 :::389 :::* LISTEN 1859/slapd
[root@openldap ldap]# chown ldap:ldap *
[root@openldap ldap]# chmod 600 *
[root@openldap ldap]# ll
总用量 11472
-rw-------. 1 ldap ldap 2048 9月 28 15:55 alock
-rw-------. 1 ldap ldap 24576 9月 28 15:55 __db.001
-rw-------. 1 ldap ldap 9093120 9月 28 16:25 __db.002
-rw-------. 1 ldap ldap 335552512 9月 28 15:55 __db.003
-rw-------. 1 ldap ldap 2359296 9月 28 16:10 __db.004
-rw-------. 1 ldap ldap 753664 9月 28 15:55 __db.005
-rw-------. 1 ldap ldap 32768 9月 28 16:10 __db.006
-rw-------. 1 ldap ldap 845 9月 28 15:06 DB_CONFIG
-rw-------. 1 ldap ldap 8192 9月 28 15:51 dn2id.bdb
-rw-------. 1 ldap ldap 32768 9月 28 15:51 id2entry.bdb
-rw-------. 1 ldap ldap 10485760 9月 28 16:10 log.0000000001
[root@openldap ldap]# service slapd restart
停止 slapd: [确定]
正在启动 slapd: [确定]
[root@openldap ldap]# service slapd start
正在启动 slapd:ln: 创建硬链接"/var/run/slapd.pid": 文件已存在
[root@openldap ldap]# service slapd status
slapd (pid 2197) 正在运行...
You have new mail in /var/spool/mail/root
在下一步执行: # rm -rf /etc/openldap/slapd.d/* 测试并生成配置文件: slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d 返回config file testing succeeded,则配置成功。 赋予生成的配置文件予权限并重启:
1
2
3
4
5
# chown -R ldap:ldap /etc/openldap/slapd.d
# service slapd restart
netstat -tulnp | grep slapd
tcp 0 0 0.0.0.0:389 0.0.0.0:* LISTEN 2358/slapd
tcp 0 0 :::389 :::* LISTEN 2358/slapd
## 4.创建一个账号,以备客户端测试登陆
1
2
# useradd ldapuser1
# passwd ldapuser1
至此,这些用户仅仅是系统上存在的用户`(存储在/etc/passwd和/etc/shadow上)`,并没有在LDAP数据库里,所以要把这些用户导入到LDAP里面去。但LDAP只能识别特定格式的文件 即后缀为ldif的文件(也是文本文件),所以不能直接使用`etc/passwd和/etc/shadow。` 需要migrationtools这个工具把这两个文件转变成LDAP能识别的文件。 ## 5. 安装配置migrationtools yum install migrationtools -y #### 进入migrationtool配置目录
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#cd /usr/share/migrationtools/
首先编辑migrate_common.ph
# vi migrate_common.ph
...
# Default DNS domain
$DEFAULT_MAIL_DOMAIN = "ihaozhuo.com";
# Default base
$DEFAULT_BASE = "dc=ihaozhuo,dc=com";
.....
保存退出。:-)
K.下面利用pl脚本将/etc/passwd 和/etc/shadow生成LDAP能读懂的文件格式,保存在/tmp/下
# ./migrate_base.pl > /tmp/base.ldif
# ./migrate_passwd.pl /etc/passwd > /tmp/passwd.ldif
# ./migrate_group.pl /etc/group > /tmp/group.ldif
#### 说明: 第一次启动生会初始化ldap数据库,在/var/lib/ldap中,如果想删除ldap数据库就删除该目录,保留DB_CONFIG配置文件。新版的ldap使用的是/etc/openldap/slapd.d 下的配置文件,删除原来的配置文件,slaptest是重新生成新的配置文件. ## 6.导入数据 下面就要把这三个文件导入到LDAP,这样LDAP的数据库里就有了我们想要的用户
1
2
3
4
# ldapadd -x -D "cn=admin,dc=example,dc=com" -W -f /tmp/base.ldif
# ldapadd -x -D "cn=admin,dc=example,dc=com" -W -f /tmp/passwd.ldif
# ldapadd -x -D "cn=admin,dc=example,dc=com" -W -f /tmp/group.ldif
过程若无报错,则LDAP服务端配置完毕.
执行成功会出现:
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
[root@openldap migrationtools]# ldapadd -x -D "cn=admin,dc=ihaozhuo,dc=com" -W -f /tmp/base.ldif
Enter LDAP Password:
adding new entry "dc=ihaozhuo,dc=com"
adding new entry "ou=Hosts,dc=ihaozhuo,dc=com"
adding new entry "ou=Rpc,dc=ihaozhuo,dc=com"
adding new entry "ou=Services,dc=ihaozhuo,dc=com"
adding new entry "nisMapName=netgroup.byuser,dc=ihaozhuo,dc=com"
.........
[root@openldap migrationtools]# ldapadd -x -D "cn=admin,dc=ihaozhuo,dc=com" -W -f /tmp/passwd.ldif
Enter LDAP Password:
adding new entry "uid=root,ou=People,dc=ihaozhuo,dc=com"
adding new entry "uid=bin,ou=People,dc=ihaozhuo,dc=com"
adding new entry "uid=daemon,ou=People,dc=ihaozhuo,dc=com"
adding new entry "uid=adm,ou=People,dc=ihaozhuo,dc=com"
adding new entry "uid=lp,ou=People,dc=ihaozhuo,dc=com"
adding new entry "uid=sync,ou=People,dc=ihaozhuo,dc=com"
.....
[root@openldap migrationtools]# ldapadd -x -D "cn=admin,dc=ihaozhuo,dc=com" -W -f /tmp/group.ldif
Enter LDAP Password:
adding new entry "cn=root,ou=Group,dc=ihaozhuo,dc=com"
adding new entry "cn=bin,ou=Group,dc=ihaozhuo,dc=com"
.......
ldapsearch 查看数据
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
[root@openldap migrationtools]# ldapsearch -x -b "dc=ihaozhuo,dc=com"
# extended LDIF
#
# LDAPv3
# base <dc=ihaozhuo,dc=com> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#
# ihaozhuo.com
dn: dc=ihaozhuo,dc=com
dc: ihaozhuo
objectClass: top
objectClass: domain
# Hosts, ihaozhuo.com
dn: ou=Hosts,dc=ihaozhuo,dc=com
ou: Hosts
objectClass: top
objectClass: organizationalUnit
# Rpc, ihaozhuo.com
dn: ou=Rpc,dc=ihaozhuo,dc=com
ou: Rpc
objectClass: top
objectClass: organizationalUnit
# Services, ihaozhuo.com
dn: ou=Services,dc=ihaozhuo,dc=com
ou: Services
objectClass: top
objectClass: organizationalUnit
# netgroup.byuser, ihaozhuo.com
dn: nisMapName=netgroup.byuser,dc=ihaozhuo,dc=com
nisMapName: netgroup.byuser
objectClass: top
objectClass: nisMap
# Mounts, ihaozhuo.com
dn: ou=Mounts,dc=ihaozhuo,dc=com
ou: Mounts
objectClass: top
objectClass: organizationalUnit
# Networks, ihaozhuo.com
dn: ou=Networks,dc=ihaozhuo,dc=com
ou: Networks
objectClass: top
objectClass: organizationalUnit
# People, ihaozhuo.com
dn: ou=People,dc=ihaozhuo,dc=com
ou: People
objectClass: top
objectClass: organizationalUnit
# Group, ihaozhuo.com
dn: ou=Group,dc=ihaozhuo,dc=com
ou: Group
objectClass: top
objectClass: organizationalUnit
# Netgroup, ihaozhuo.com
dn: ou=Netgroup,dc=ihaozhuo,dc=com
ou: Netgroup
objectClass: top
objectClass: organizationalUnit
# Protocols, ihaozhuo.com
dn: ou=Protocols,dc=ihaozhuo,dc=com
ou: Protocols
objectClass: top
objectClass: organizationalUnit
# Aliases, ihaozhuo.com
dn: ou=Aliases,dc=ihaozhuo,dc=com
ou: Aliases
objectClass: top
objectClass: organizationalUnit
# netgroup.byhost, ihaozhuo.com
dn: nisMapName=netgroup.byhost,dc=ihaozhuo,dc=com
nisMapName: netgroup.byhost
objectClass: top
objectClass: nisMap
# root, People, ihaozhuo.com
dn: uid=root,ou=People,dc=ihaozhuo,dc=com
uid: root
cn: root
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword:: e2NyeXB0fSQ2JHJCNmVjYmdEZGtUR2w1c3QkTldDc1NQNXJBYXU3QkhpUWlXVXl
LaXl4dW9VNWtFNm0wZ1dILmRzaXhFL2ZPTG1zOC52OTdNdXVuNkZlNjhDOExTYmtvVjdiaW03Lmti
ak1ZbURVZC4=
shadowLastChange: 17056
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 0
gidNumber: 0
homeDirectory: /root
gecos: root
# bin, People, ihaozhuo.com
dn: uid=bin,ou=People,dc=ihaozhuo,dc=com
uid: bin
cn: bin
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword:: e2NyeXB0fSo=
shadowLastChange: 15980
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
loginShell: /sbin/nologin
uidNumber: 1
gidNumber: 1
homeDirectory: /bin
gecos: bin
................
/相关信息导入数据库成功 ## 7.实现LDAP用户home目录自动挂载
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
centos 6 :
yum install nfs-utils rpcbind
服务器端:
###(建立挂载的目录,并且挂载目录。)
[root@openldap ~]# mkdir /opt/centos6
[root@openldap ~]# cd /opt/centos6/
[root@openldap centos6]# mkdir thisISnfsFile
[root@openldap centos6]# vi /etc/exports
[root@openldap centos6]# chkconfig nfs on
[root@openldap centos6]# /etc/init.d/rpcbind start
正在启动 rpcbind: [确定]
[root@openldap centos6]# /etc/init.d/nfs start
启动 NFS 服务: [确定]
启动 NFS mountd: [确定]
启动 NFS 守护进程: [确定]
正在启动 RPC idmapd: [确定]
[root@openldap centos6]# cat /etc/exports
/opt/centos6 *(rw,sync)
### 备注:/opt/centos6表示nfs共享的目录 有读写权限。
这个可以不需要写:
/opt/centos6 192.168.1.0/24(ro,no_root_squash)
### 备注:/opt/centos6表示nfs共享的目录 192.168.1.0-192.168.1.254区间的IP可以访问,访问权限是自读,root 用户
可参考:[Nfs共享同步](http://blog.chinaunix.net/uid-26284318-id-3111651.html) ## 8.使用 phpLDAPadmin OpenLDAP 安装目录的 bin 子目录下提供了管理目录树的客户端命令(如 ldapadd、ldapdelete 和 ldapsearch 等),但对于不熟悉 OpenLDAP 命令的初学者而言,使用它们去管理目录树是一件非 常麻烦的事。可以借助于图形界面的 LDAP管理工具来管理目录树,其中,用 PHP 编写的 phpLDAPadmin 就是一款很好的选择。 1.1 初始化数据 为了能使用 phpLDAPadmin 管理目录树,需要为目录树建立初始化数据,方法是将初始化数 据保存在 LDIF 文件中,然后使用 ldapadd 命令导入 LDAP 的数据库中。 LDIF 是 LDAP Data Interchange Format (即 LDAP 数据交换格式)的缩写。将 LDAP 保存为 一种简单的文本格式,该格式可以用于在符合 LDAP 标准的目录上完成批量操作,如添加、修改、 删除和导入、导出数据等批量操作。LDIF 可以在来自两个不同的厂家的 LDAP 服务器间交换数据, 即使 LDAP 服务器使用不同的后台数据库或运行在不同的操作系统上。 这一步已经在上面导入过数据了。 * 下载与安装 phpLDAPadmin 是一款开放源代码的,通过它提供的友好用户界面,只要使用 Web 浏览器即 可轻松管理本地或远程的 LDAP 服务器,例如浏览 LDAP 目录树,创建/删除/修改和复制节点, 执行搜索,导入/导出 LDIF 文件,查看服务器 schema。还可以在两个 LDAP 服务器之间复制对象、 恢复删除、复制树节点。phpLDAPadmin 的下载地址是 http://phpldapadmin.sourceforge.net/ 实现phpldapadmin 网页WEB管理用户 需要注意的是`,phpLDAPadmin `是一个基于 `web `的管理工具,因此,若要正常使用 phpLDAPadmin,需要确保` Apache` 服务器运行正常。
1
2
3
4
5
6
7
8
9
yum install httpd -y
vi /etc/httpd/conf/httpd.conf
添加:
....
ServerName 192.168.1.186:80
.....
service httpd start
先通过scp上传phpldapadmin-1.2.3.zip到apache网页目录 下载:[phpldapadmin](https://sourceforge.net/projects/phpldapadmin/files/phpldapadmin-php5/1.2.3/phpldapadmin-1.2.3.tgz) 或者这里用我下载好的链接wget. cd /var/www/html/ wget http://oak0aohum.bkt.clouddn.com/phpldapadmin-1.2.3.tgz tar -zxvf phpldapadmin-1.2.3.tgz mv phpldapadmin-1.2.3 phpldapadmin cd phpldapadmin/config/ cp config.php.example config.php vim config.php #### 2.修改配置文件 用文本编辑器打开 config.php 文件后发现,尽管文件行数几百行,但实际上很多都是 php 程 序的注释语句。因此,只需要修改其中一部分内容,即可完成 phpLDAPadmin 的配置。设置如下:
1
2
3
4
5
6
7
8
9
10
/*
$servers->newServer('ldap_pla');
$servers->setValue('server','name','LDAP Server');
$servers->setValue('server','host','192.168.1.186');
$servers->setValue('server','port',389);
$servers->setValue('server','base',array('dc=ihaozhuo,dc=com'));
$servers->setValue('login','auth_type','cookie');
$servers->setValue('login','bind_id','cn=admin,dc=ihaozhuo,dc=com');
$servers->setValue('login','bind_pass','qwe123.com');
$servers->setValue('server','tls',false);
#### 对以上的设置作如下说明: LDAP 服务器名 $ldapservers->SetValue($i,'server','name','My LDAP Server'); 使用以上语句,设置 LDAP 服务器名称为“My LDAP Server”。 > LDAP 服务器 IP $ldapservers->SetValue($i,'server','host','192.168.1.186'); 使用以上语句,设置 LDAP 服务器地址为“192.168.1.186”。 >LDAP 服务器管理员 DN $ldapservers->SetValue($i,'login','dn','cn=admin,dc=ihaozhuo,dc=com'); 设置 LDAP 服务器管理员 DN为`“cn=Manager,dc=example,dc=com”。` >LDAP 服务器管理员口令 $ldapservers->SetValue($i,'login','pass',''); 此处将 LDAP 服务器管理员口令设置为空。 LDAP 服务器认证方式phpLDAPadmin 提供了 cookie、session 和 config 这三种认证方式。cookie 方式提供一个登录 的界面,让用户输入正确的 LDAP 管理员的 DN 和口令才允许登录到服务器,同时 LDAP 管理员 的 DN 与口令会保存在客户端 Web 浏览器的 cookie 里面。session 方式类似 cookie,不同点在于 LDAP 管理员的 DN 与口令保存在服务器端,而不是客户端。config 是 phpLDAPadmin 缺省的认证 方式,不需要用户登录,但需要将LDAP管理员的DN和口令写在phpLDAPadmin的主配置文件中。 以上语句表明 phpLDAPadmin 采用 cookie 认证。在使用 cookie 认证方式时,必须配置一个口 令加密字符串,以便安全地加密和解密一些敏感信息。'blowfish'就是口令加密字符串,可以随意 设置,例如设置为“phpldapadmin”。 删除的内容: ‘ 删除的内容: ’ 设置完毕后,保存 config.php 文件使设置生效。 ## apache-http修改 vim /etc/httpd/conf/httpd.conf <Directory "/var/www/html/phpldapadmin"> DirectoryIndex index.html index.html.var index.php 重启服务。 service httpd restart ## 网页访问 http://192.168.1.186/phpldapadmin 报错无法正常访问,是由于php,php-ldap依赖包没有安装. 安装php可参考我博客上面文档:[PHP编译升级YUM最全面安装部署](http://blog.yangcvo.me/2015/12/21/PHP%E7%BC%96%E8%AF%91%E5%8D%87%E7%BA%A7YUM%E6%9C%80%E5%85%A8%E9%9D%A2%E5%AE%89%E8%A3%85%E9%83%A8%E7%BD%B2/) 安装完,重启http服务。 service httpd restart 设置防火墙访问: -A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT 重启iptables service iptables restart #### 1.登录 ![](http://image.chengyangyang.com/openldap4.png) 单击左侧“Login”链接,打开如图1.1 所示页面,输入 ldap 服务器认证信息。此处应当输 入管理员的 DN 和密码。 ![](http://image.chengyangyang.com/openldap5.png) 单击“认证”按钮后,进入 phpLDAPadmin 管理页面,如图 1.2所示。页面右侧提示“LDAP 服务器认证成功”,页面左侧是 LDAP 的目录树。 在左页面中单击【dc=ihaozhuo,dc=com】链接,在右页面中会出现目录树的各种属性并提供各 种操作链接。 >查看对象 ![](http://image.chengyangyang.com/openldap6.png) 因为之前导入了 LDIF 文件,初始化的数据在此处可以显示出来。 #### 2.创建对象 选择【创建一个子条目】链接,在出现的【创建对象】页面中,选择【Organization Unit】(组 织机构),如图1.3所示。 >选择需要创建的对象 ![](http://image.chengyangyang.com/openldap7.png) 单击【Organization Unit】前面的单选按钮后,进入创建【Organization Unit】界面,如图 >创建新组织机构(OU) ![](http://image.chengyangyang.com/openldap8.png) 在 phpLDAPadmin 中创建 LDAP 目录树中的其他对象,同样使用如上所述的方法,不同的是 需要在图1.3 中选择不同的对象。 > 创建 OU 成功 ![](http://image.chengyangyang.com/openldap9.png) #### 3.导入导出 使用导入导出按钮,可以将 LDAP 服务器使用的 LDIF 文件导出,也可以导入需要的 LDIF 文 件。直接导入导出 LDIF 文件是管理 LDAP 目录树一种快捷方法。 在该页面中,单击【浏览】按钮,选择相关的 LDIF 文件,或是直接在【Paste your LDIF file】 文件的位置输入 LDIF 文件内容,单击【Proceed】按钮,开始导入。 若导入成功,显示如下图所示提示内容。若导入不成功,同样会出现相关错误提示。 ![](http://image.chengyangyang.com/openldap10.png) 选择导出操作时,单击页面左侧【export】导出链接,出现如图 所示【导出】页面。在 该页面中,选择 DN;导出范围、导出格式及行结束标志等都在该页面中设置。 ![](http://image.chengyangyang.com/openldap11.png) 注意: 导入用户成功以后,再次导入或者创建 下次不要重复导入。不然会报错,68 导入group 和user就行,过滤 、/etc/passwd 、/etc/group新建的用户,导入成功以后,重新刷新。 ## 设置 LDIF 文件 LDAP 数据交换格式(LDIF)是指存储 LDAP 配置信息及目录内容的标准文本文件格式,之 所以使用文本文件格式来存储这些信息是为了方便读取和修改。LDAP 也是其他大多数服务配置 文件所采取的格式。LDIF 文件常用来向目录导入或更改记录信息,这些信息需要按照 LDAP 中 schema 的格式进行组织,并会接受 schema 的检查,不符合其要求的格式将会出现报错信息。 #### 1.语法格式 LDIF 文件中条目的语法结构如下: ```bash dn: <distinguished name> <attrdesc>: <attrvalue> <attrdesc>: <attrvalue> <attrdesc>:: <base64-encoded-value> <attrdesc>:< <URL> ...
1
例如: ```bash #LDIF file example dn: dc=mydomain,dc=org objectClass: domain dc: mydomain
以“#”号开头的为注释行;第二行起的各行中,冒号左边为属性,右边是属性的值,与编程 中的变量及为其所赋的值类似,LDIF 文件中属性可以被重复赋值。 以下是一个有三个条目的 LDIF 文件: ```bash dn: cn=Barbara J Jensen,dc=example,dc=com cn: Barbara J Jensen cn: Babs Jensen objectclass: person description:< file:///tmp/babs sn: Jensen dn: cn=Bjorn J Jensen,dc=example,dc=com cn: Bjorn J Jensen cn: Bjorn Jensen objectclass: person sn: Jensen dn: cn=Jennifer J Jensen,dc=example,dc=com cn: Jennifer J Jensen cn: Jennifer Jensen objectclass: person sn: Jensen jpegPhoto:: /9j/4AAQSkZJRgABAAAAAQABAAD/2wBDABALD A4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQ ERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVG ...
1
2
3
4
5
#### 2.创建 LDIF 文件 可以用任何文本编辑器以 root 用户进行创建 LDIF 文件。当创建 LDIF 文件时需要注意,在每 个 DN 行前应添加空行,确保 LDAP 能够识别是一个新的 DN 的开始。 例如,创建 test.ldif 文件。
3.定义基准
DN使用如下内容定义基准 DN。 ``` dn: dc=test, dc=net objectClass: top objectClass: dcobject objectClass: organization o: Test, Inc. dc: test
4.定义管理员
1
dn: cn=manager, dc=test, dc=net objectClass: organizationalRole cn: manager description: A Manager of Test, inc. ``` 5.定义组织机构 ``` dn: ou=members, dc=test, dc=net objectClass: organizationalUnit ou: members
6.定义用户

dn: cn=Ray D. Jones, ou= members, dc=test, dc=net
objectClass: organizationalPerson
objectClass: inetOrgPerson
cn: Ray D. Jones
sn: Jones
telephoneNumber: 444-555-6767
mail: jonesrd@test.net
localityName: Houston
dn: cn=Eric S. Woods, ou= members, dc=test, dc=net
objectClass: organizationalPerson
objectClass: inetOrgPerson
cn: Eric S. Woods
sn: Woods
telephoneNumber: 444-555-6768
mail: woodses@test.net
localityName: Houston

1
2
3
7.保存并导入 LDIF 文件 使用如下命令导入 LDIF 文件
``` # ldapadd -x -W -D "cn=manager,dc=test,dc=net" -f test.ldif Enter LDAP Password:

此处输入的口令是 LDAP 管理员口令,-x 表明使用简单验证。-D 表示使用在 slapd.conf 文件 中所定义的 DN。-W 表示提示输入口令而不是从命令行输入。-f 表明要装载的文件“test.ldif”。
ldapadd 命令成功添加了每个条目内容同时,会列出每个条目内容有关的 DN。

8.搜索目录

搜索目录使用 ldapsearch 命令,搜索结果如下:

1
# ldapsearch -x -W -D 'cn=manager,dc=test,dc=net' -b ' dc=test,dc=net ' '(objectClass=*)' Enter LDAP Password: # extended LDIF # # LDAPv3 # base < dc=test,dc=net > with scope subtree # filter: (objectClass=*) # requesting: ALL # # test. net dn: dc=test, dc=net objectClass: top objectClass: dcobject objectClass: organization o: Test, Inc. dc: test # manager, test. net dn: cn=manager, dc=test, dc=net objectClass: organizationalRole cn: manager description: A Manager of Test, inc. # members, test. net dn: ou=members, dc=test, dc=net objectClass: organizationalUnit ou: members ...