标签:
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主要的简称含义:
这里准备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
在3台服务器上均进行如下操作。
vi /etc/resolv.confnameserver 8.8.8.8
nameserver 8.8.4.4
setenforce
0
rpm -Uvh http://mirror-fpt-telecom.fpt.net/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
1
|
yum install openldap openldap-servers openldap-clients openldap-devel compat-openldap
|
1
2
3
4
5
6
7
8
|
mkdir /var/log/slapd
chmod 755 /var/log/slapd/
chown ldap:ldap /var/log/slapd/
sed -i "/local4.*/d" /etc/rsyslog.conf
cat >> /etc/rsyslog.conf << EOF
local4.* /var/log/slapd/slapd.log
EOF
service rsyslog restart
|
1
2
3
4
|
[root@openldap-master ~]# slappasswd
New password:
Re-enter new password:
{SSHA}DOS0VOBzmvD3beMsuFllLBOi6CAt4Kcj
|
修改slapd.conf配置
1
2
|
cp /usr/share/openldap-servers/slapd.conf.obsolete /etc/openldap/slapd.conf
mv /etc/openldap/slapd.d{,.bak}
|
修改suffix 和rootdn,rootpw,suffix我这里用了二级域名,如果你想用主域名也可以,写成dc=54im,dc=com,其中rootpw可以是明文,这里我们经过SSHA算法加密下,
1
2
3
4
5
6
7
8
9
10
11
|
114 database bdb
115 suffix "dc=openldap,dc=54im,dc=com"
116 checkpoint 1024 15
117 rootdn "cn=Manager,dc=openldap,dc=54im,dc=com"
118 # Cleartext passwords, especially for the rootdn, should
119 # be avoided. See slappasswd(8) and slapd.conf(5) for details.
120 # Use of strong authentication encouraged.
121 # rootpw secret
122 # rootpw {crypt}ijFYNcSNctBYg
123 rootpw {SSHA}hHZMkvQ3bj07PYOb6emsZHZfGtXvd5g8 //这里用上面产生的密码
|
1
2
|
[root@openldap-master openldap]# slaptest -u -f slapd.conf
config file testing succeeded
|
这里有个日志级别的问题
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
[root@openldap-master ~]# slapd -d ?
Installed log subsystems:
Any (-1, 0xffffffff)记录所有的信息
Trace (1, 0x1)跟踪功能调用的信息
Packets (2, 0x2)包处理的debug信息
Args (4, 0x4)丰富的debug信息
Conns (8, 0x8)连接管理信息
BER (16, 0x10)包的收发信息
Filter (32, 0x20)搜索过滤的处理过程
Config (64, 0x40)配置文件的处理过程
ACL (128, 0x80)访问控制列表处理过程
Stats (256, 0x100)连接、操作及其结果的统计数据
Stats2 (512, 0x200)向客户端返回的结果的统计信息
Shell (1024, 0x400)与shell后端的通信信息
Parse (2048, 0x800)显示记录条目的分析信息
Sync (16384, 0x4000)从服务器数据同步资源消耗处理信息
None (32768, 0x8000)
NOTE: custom log subsystems may be later installed by specific code
|
你可以同时设置几种日志级别,方法是将日志级别的数字加起来。 比如同时设置Trace和Stats级别,那么在slapd.conf中:
loglevel 257
或者启动OpenLDAP时,使用命令参数-d 257来指定
1
2
3
|
cd /var/lib/ldap/
cp /usr/share/openldap-servers/DB_CONFIG.example ./DB_CONFIG
chown ldap.ldap DB_CONFIG
|
启动ldap服务,自动创建数据库文件
1
2
|
chkconfig slapd on
/etc/init.d/slapd start
|
服务启动后,可以看到生成了几个数据库文件
1
2
3
4
5
6
7
8
9
10
11
12
13
|
[root@openldap-master ldap]# ll
总用量 11472
-rw-r--r--. 1 ldap ldap 2048 5月 22 13:42 alock
-rw-------. 1 ldap ldap 24576 5月 22 13:42 __db.001
-rw-------. 1 ldap ldap 9093120 5月 22 13:42 __db.002
-rw-------. 1 ldap ldap 335552512 5月 22 13:42 __db.003
-rw-------. 1 ldap ldap 2359296 5月 22 13:42 __db.004
-rw-------. 1 ldap ldap 753664 5月 22 13:42 __db.005
-rw-------. 1 ldap ldap 32768 5月 22 13:42 __db.006
-rw-r--r--. 1 root root 921 5月 22 13:42 DB_CONFIG
-rw-------. 1 ldap ldap 8192 5月 22 13:42 dn2id.bdb
-rw-------. 1 ldap ldap 32768 5月 22 13:42 id2entry.bdb
-rw-------. 1 ldap ldap 10485760 5月 22 13:42 log.0000000001
|
-x 信息排序-b 指定搜索范围起点
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
[root@openldap-master openldap]# ldapsearch -x -b "dc=openldap,dc=54im,dc=com"
# extended LDIF
#
# LDAPv3
# base <dc=openldap,dc=54im,dc=com> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#
# search result
search: 2
result: 32 No such object
# numResponses: 1
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
[root@openldap-master openldap]# mkdir /54im_home
[root@openldap-master openldap]# useradd -u 8001 -d /54im_home/ivon01 ivon01
[root@openldap-master openldap]# useradd -u 8002 -d /54im_home/ivon02 ivon02
[root@openldap-master openldap]# useradd -u 8003 -d /54im_home/ivon03 ivon03
[root@openldap-master openldap]# echo "54im.com" |passwd --stdin ivon01
更改用户 ivon01 的密码 。
passwd: 所有的身份验证令牌已经成功更新。
[root@openldap-master openldap]# echo "54im.com" |passwd --stdin ivon02
更改用户 ivon02 的密码 。
passwd: 所有的身份验证令牌已经成功更新。
[root@openldap-master openldap]# echo "54im.com" |passwd --stdin ivon03
更改用户 ivon03 的密码 。
passwd: 所有的身份验证令牌已经成功更新。
|
1
2
3
4
5
6
7
8
|
[root@openldap-master openldap]# yum install migrationtools -y
[root@openldap-master openldap]# cd /usr/share/migrationtools/
[root@openldap-master migrationtools]# vi migrate_common.ph
70 # Default DNS domain
71 $DEFAULT_MAIL_DOMAIN = "openldap.54im.com";
72
73 # Default base
74 $DEFAULT_BASE = "dc=openldap,dc=54im,dc=com";
|
主要的概念:
dn:唯一区分名
dc:所属区域
ou:所属组织
cn/uid:全名/登录ID
运行脚本migrate_base.pl,它会创建根项,并为 Hosts、Networks、Group和 People 等创建低一级的组织单元,指定为base.ldif文件,这里我们只有下面这3个
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
[root@openldap-master migrationtools]# ./migrate_base.pl >base.ldif
[root@openldap-master migrationtools]# vi base.ldif
dn: dc=openldap,dc=54im,dc=com
dc: openldap
objectClass: top
objectClass: domain
dn: ou=People,dc=openldap,dc=54im,dc=com
ou: People
objectClass: top
objectClass: organizationalUnit
dn: ou=Group,dc=openldap,dc=54im,dc=com
ou: Group
objectClass: top
objectClass: organizationalUnit
|
创建用户和组的数据库文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
[root@openldap-master migrationtools]# grep ivon /etc/passwd >user.txt
[root@openldap-master migrationtools]# ./migrate_passwd.pl user.txt ./user.ldif
[root@openldap-master migrationtools]# grep ivon /etc/group >group.txt
[root@openldap-master migrationtools]# ./migrate_group.pl group.txt ./group.ldif
[root@openldap-master migrationtools]# ll base.ldif user.ldif group.ldif
-rw-r--r--. 1 root root 285 5月 22 13:57 base.ldif
-rw-r--r--. 1 root root 426 5月 22 13:59 group.ldif
-rw-r--r--. 1 root root 1335 5月 22 13:58 user.ldif
[root@openldap-master migrationtools]# ldapsearch -x -b -L "dc=openldap,dc=54im,dc=com"
# extended LDIF
#
# LDAPv3
# base <-L> with scope subtree
# filter: dc=openldap,dc=54im,dc=com
# requesting: ALL
#
# search result
search: 2
result: 34 Invalid DN syntax
text: invalid DN
# numResponses: 1
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
[root@openldap-master migrationtools]# /etc/init.d/slapd restart
停止 slapd:[确定]
正在启动 slapd:[确定]
[root@openldap-master migrationtools]# ldapadd -D "cn=Manager,dc=openldap,dc=54im,dc=com" -W -x -f /usr/share/migrationtools/base.ldif
Enter LDAP Password:
adding new entry "dc=openldap,dc=54im,dc=com"
adding new entry "ou=People,dc=openldap,dc=54im,dc=com"
adding new entry "ou=Group,dc=openldap,dc=54im,dc=com"
[root@openldap-master migrationtools]# ldapadd -D "cn=Manager,dc=openldap,dc=54im,dc=com" -W -x -f /usr/share/migrationtools/user.ldif
Enter LDAP Password:
adding new entry "uid=ivon01,ou=People,dc=openldap,dc=54im,dc=com"
adding new entry "uid=ivon02,ou=People,dc=openldap,dc=54im,dc=com"
adding new entry "uid=ivon03,ou=People,dc=openldap,dc=54im,dc=com"
[root@openldap-master migrationtools]# ldapadd -D "cn=Manager,dc=openldap,dc=54im,dc=com" -W -x -f /usr/share/migrationtools/group.ldif
Enter LDAP Password:
adding new entry "cn=ivon01,ou=Group,dc=openldap,dc=54im,dc=com"
adding new entry "cn=ivon02,ou=Group,dc=openldap,dc=54im,dc=com"
adding new entry "cn=ivon03,ou=Group,dc=openldap,dc=54im,dc=com"
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
[root@openldap-master migrationtools]# ldapsearch -x -b "dc=openldap,dc=54im,dc=com"
# extended LDIF
#
# LDAPv3
# base <dc=openldap,dc=54im,dc=com> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#
# openldap.54im.com
dn: dc=openldap,dc=54im,dc=com
dc: openldap
objectClass: top
objectClass: domain
# People, openldap.54im.com
。。。。省略
search: 2
result: 0 Success
# numResponses: 10
# numEntries: 9
|
yum安装apache+php环境
1
|
yum install httpd php php-bcmath php-gd php-mbstring php-xml php-ldap
|
yum安装phpldapadmin
1
|
yum install phpldapadmin #要有epel源
|
我这里是yum安装的,所以config.d下面有phpldapadmin.conf,改下httpd.conf中的servername就可以。
注意:如果是下载的phpldapadmin包接下的话需要修改httpd.conf配置文件,最文件最后新增
1
2
3
4
5
6
7
8
9
10
11
|
vi /etc/httpd/conf/httpd.conf
ServerName openldap.54im.com
Alias /phpldapadmin /usr/share/phpldapadmin/htdocs
Alias /ldapadmin /usr/share/phpldapadmin/htdocs
<Directory /usr/share/phpldapadmin/htdocs>
Order Deny,Allow
Deny from all
Allow from 127.0.0.1 192.168.1.0/24
Allow from ::1
</Directory>
|
修改phpldapadmin配置文件
1
2
3
4
|
[root@openldap-master ~]# vi /etc/phpldapadmin/config.php
# line 397: uncomment, line 398: make it comment
$servers->setValue(‘login‘,‘attr‘,‘dn‘);
// $servers->setValue(‘login‘,‘attr‘,‘uid‘);
|
重启httpd服务后访问
登录ldap
登录后即可新增用户和组等操作,看了到我们迁移进去的3个用户和组
我这里客户端安装在192.168.1.111 这台服务器上,这台后面也会做证书服务器。
1
|
[root@openldap-ca ~]# yum install openldap-clients nss-pam-ldapd
|
我们可以在终端使用图像化界面配置,在crt里面输入 authconfig-tui
这里注意,如果有dns的情况下话,可以用域名,否则要绑定hosts或者用IP,TLS这里我们先不选,后面再介绍
authconfig-tui会修改很多配置文件,先来检查下
1
2
3
4
|
[root@openldap-ca ~]# grep -v "#" /etc/openldap/ldap.conf |grep -v "^$"
TLS_CACERTDIR /etc/openldap/cacerts
URI ldap://openldap.54im.com/
BASE dc=openldap,dc=54im,dc=com
|
1
2
3
4
5
6
7
|
[root@openldap-ca ~]# grep -v "#" /etc/nslcd.conf |grep -v "^$"
uid nslcd
gid ldap
uri ldap://openldap.54im.com/
base dc=openldap,dc=54im,dc=com
ssl no
tls_cacertdir /etc/openldap/cacerts
|
1
2
3
4
5
6
|
[root@openldap-ca ~]# grep -v "#" /etc/pam_ldap.conf |grep -v "^$"
base dc=openldap,dc=54im,dc=com
uri ldap://openldap.54im.com/
ssl no
tls_cacertdir /etc/openldap/cacerts
pam_password md5
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
[root@openldap-ca ~]# grep -v "#" /etc/nsswitch.conf |grep -v "^$"
passwd: files ldap
shadow: files ldap
group: files ldap
hosts: files dns
bootparams: nisplus [NOTFOUND=return] files
ethers: files
netmasks: files
networks: files
protocols: files
rpc: files
services: files sss
netgroup: files ldap
publickey: nisplus
automount: files ldap
aliases: files nisplus
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
[root@openldap-ca ~]# grep -v "#" /etc/pam.d/system-auth|grep -v "^$"
auth required pam_env.so
auth sufficient pam_fprintd.so
auth sufficient pam_unix.so nullok try_first_pass
auth requisite pam_succeed_if.so uid >= 500 quiet
auth sufficient pam_ldap.so use_first_pass
auth required pam_deny.so
account required pam_unix.so broken_shadow
account sufficient pam_localuser.so
account sufficient pam_succeed_if.so uid < 500 quiet
account [default=bad success=ok user_unknown=ignore] pam_ldap.so
account required pam_permit.so
password requisite pam_cracklib.so try_first_pass retry=3 type=
password sufficient pam_unix.so md5 shadow nullok try_first_pass use_authtok
password sufficient pam_ldap.so use_authtok
password required pam_deny.so
session optional pam_ldap.so
session required pam_limits.so
session [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session required pam_unix.so
session optional pam__mkhomedir.so skel=/etc/skel umask=077
|
1
2
3
|
[root@openldap-ca ~]# grep "USELDAP" /etc/sysconfig/authconfig
USELDAPAUTH=yes
USELDAP=yes
|
启动nslcd服务,并设置为开机启动
1
2
|
service nslcd start
chkconfig nslcd on
|
验证:
1
2
3
4
5
6
7
8
|
[root@openldap-ca ~]# id ivon01
uid=8001(ivon01) gid=8001(ivon01) 组=8001(ivon01)
[root@openldap-ca ~]# id ivon02
uid=8002(ivon02) gid=8002(ivon02) 组=8002(ivon02)
[root@openldap-ca ~]# id ivon03
uid=8003(ivon03) gid=8003(ivon03) 组=8003(ivon03)
[root@openldap-ca ~]# su - ivon01
su: 警告:无法切换到目录/54im_home/ivon01: 没有那个文件或目录
|
显示如上信息,说明账户可以登录,但没找到用户主目录。这需要在本地配置nfs并通过autofs自动挂载服务器家目录到本地客户端
nfs在openldap服务器上配置,默认centos 6上已经安装了nfs
1
2
3
4
5
6
7
8
9
10
11
|
[root@openldap-master ~]# /etc/init.d/rpcbind start
[root@openldap-master ~]# /etc/init.d/nfslock start
[root@openldap-master ~]# /etc/init.d/nfs start
启动 NFS 服务: [确定]
关掉 NFS 配额:[确定]
启动 NFS mountd:[确定]
启动 NFS 守护进程:[确定]
正在启动 RPC idmapd:[确定]
[root@openldap-master ~]# chkconfig rpcbind on
[root@openldap-master ~]# chkconfig nfslock on
[root@openldap-master ~]# chkconfig nfs on
|
配置nfs
1
2
|
[root@openldap-master ~]# vi /etc/exports
/54im_home 192.168.1.0/24(rw,sync)
|
如果开了selinux,则需要 setsebool -P use_nfs_home_dirs on
vi /etc/sysconfig/nfs,去掉一些端口的注释符(可选,如果不取消这些端口注释,客户端showmount的时候会报错,不影响挂载)
1
2
3
4
|
LOCKD_TCPPORT=32803
LOCKD_UDPPORT=32769
MOUNTD_PORT=892
STATD_PORT=662
|
重启nfs
配置防火墙
1
2
3
4
5
6
7
8
9
10
11
|
vi /etc/sysconfig/iptables
-A INPUT –p tcp –m state --state NEW –m tcp --dport 111 –j ACCEPT
-A INPUT –p udp –m state --state NEW –m udp --dport 111 –j ACCEPT
-A INPUT –p tcp –m state --state NEW –m tcp --dport 662 –j ACCEPT
-A INPUT –p udp –m state --state NEW –m udp --dport 662 –j ACCEPT
-A INPUT –p tcp –m state --state NEW –m tcp --dport 892 –j ACCEPT
-A INPUT –p udp –m state --state NEW –m udp --dport 892 –j ACCEPT
-A INPUT –p tcp –m state --state NEW –m tcp --dport 2049 –j ACCEPT
-A INPUT –p udp –m state --state NEW –m udp --dport 2049 –j ACCEPT
-A INPUT –p tcp –m state --state NEW –m tcp --dport 32803 –j ACCEPT
-A INPUT –p udp –m state --state NEW –m udp --dport 32769 –j ACCEPT
|
在客户端检查下nfs输出
1
2
3
|
[root@openldap-ca ~]# showmount -e openldap.54im.com
Export list for openldap.54im.com:
/54im_home 192.168.1.0/24
|
默认情况下,centos 6已经安装了nfs及autofs,如果没有,则使用yum –y install nfs-utils autofs
1
2
3
4
5
|
(1)service rpcbind start ,chkconfig rpcbind on
(2)service rpcidmapd start ,chkconfig rpcidmapd on
(3)service nfslock start ,chkconfig nfslock on
(4)service netfs start ,chkconfig netfs on
(5)service autofs start ,chkconfig autofs on
|
配置autofs服务
1
2
3
4
5
|
vi /etc/auto.master ,在最后一行后面加入:
/54im_home /etc/auto.nfs
vi /etc/auto.nfs,输入如下内容并保存:
* -rw,soft,intr 192.168.1.137:/54im_home/&
|
重启下autofs服务:service autofs restart
客户端测试:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
[root@openldap-ca ~]# su - ivon01
[ivon01@openldap-ca ~]$ pwd
/54im_home/ivon01
[ivon01@openldap-ca ~]$ ls
[ivon01@openldap-ca ~]$ mkdir 54im.com
[root@openldap-ca ~]# su - ivon02
[ivon02@openldap-ca ~]$ df -H
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root 19G 2.6G 16G 15% /
tmpfs 258M 0 258M 0% /dev/shm
192.168.1.137:/54im_home/ivon01 19G 2.4G 16G 14% /54im_home/ivon01
192.168.1.137:/54im_home/ivon02 19G 2.4G 16G 14% /54im_home/ivon02
然后在openldap服务器上查看nfs共享目录
[root@openldap-master ~]# ls /54im_home/ivon01/
54im.com
|
注意事项:
对/etc/auto.nfs文件使用*及&通配符时,则/etc/auto.master里的挂载点必须与服务器的挂载点同名同目录/nfshome,否则客户端su – 切换时会提示找不到目录。
不建议把ldap用户直接创建在/home文件夹里。否则由于/etc/auto.nfs文件里的*及&符号的自动匹配的作用,客户autofs会自动在内存中创建/home目录,会隐藏掉实际的/home目录
配置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 连接断开
yum install openssl
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
|
[root@openldap-ca ~]# cd /etc/pki/CA/
[root@openldap-ca CA]# ls
certs crl newcerts private
[root@openldap-ca CA]# touch index.txt
[root@openldap-ca CA]# echo 01 >serial
[root@openldap-ca CA]# ls
certs crl index.txt newcerts private serial
[root@openldap-ca CA]#vi /etc/pki/tls/openssl.cnf
dir = /etc/pki/CA # 根目录
certs = $dir/certs # 公钥目录
crl_dir = $dir/crl # 过期,吊销证书目录
database = $dir/index.txt # 证书签名记录文件
#unique_subject = no # Set to ‘no‘ to allow creation of
# several ctificates with same subject.
new_certs_dir = $dir/newcerts # 新的公钥证书目录
certificate = $dir/CA.crt # CA中心的公钥
serial = $dir/serial # 每次签名序号自动+1
crlnumber = $dir/crlnumber # the current crl number
# must be commented out to leave a V1 CRL
crl = $dir/crl.pem # 吊销的证书
private_key = $dir/private/CA.key # 私钥
RANDFILE = $dir/private/.rand # private random number file
省略若干
default_days = 365 证书有效期(默认一年)
default_crl_days = 30 吊销列表更新周期
[ policy_match ] 策略匹配
countryName = match 必须匹配(城市名)
stateOrProvinceName = match (国家或州名)
organizationName = match (组织名)
organizationalUnitName = optional可选的匹配(单位名)
commonName = supplied用户提供的,必须不一样 (常用名)
emailAddress = optional 邮件地址,可以不填
...
[ req_distinguished_name ]
countryName_default = CN 设置国家
stateOrProvinceName_default = BeiJing 省
localityNmae_default = BeiJing 城市
0.organizationName_default = Example, Inc. 组织
|
1
2
3
4
5
|
[root@openldap-ca CA]# (umask 077;openssl genrsa -out private/CA.key)
Generating RSA private key, 1024 bit long modulus
................++++++
..............++++++
e is 65537 (0x10001)
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
[root@openldap-ca CA]# openssl req -new -x509 -key private/CA.key >CA.crt
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ‘.‘, the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:SHANGHAI
Locality Name (eg, city) [Default City]:BAOSHAN
Organization Name (eg, company) [Default Company Ltd]:54IM
Organizational Unit Name (eg, section) []:IT
Common Name (eg, your name or your server‘s hostname) []:openldap-ca.54im.com
Email Address []:474356107@qq.com
|
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
|
[root@openldap-master ~]# openssl genrsa -out 54im-ldap.key
Generating RSA private key, 1024 bit long modulus
....................++++++
......................++++++
e is 65537 (0x10001)
[root@openldap-master ~]# openssl req -new -key 54im-ldap.key -out 54im-ldap.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ‘.‘, the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:SHANGHAI
Locality Name (eg, city) [Default City]:BAOSHAN
Organization Name (eg, company) [Default Company Ltd]:54IM
Organizational Unit Name (eg, section) []:IT
Common Name (eg, your name or your server‘s hostname) []:openldap.54im.com
Email Address []:474356107@qq.com
Please enter the following ‘extra‘ attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
|
1
2
3
|
[root@openldap-master ~]# scp 54im-ldap.csr openldap-ca.54im.com:/tmp
root@openldap-ca.54im.com‘s password:
54im-ldap.csr 100% 700 0.7KB/s 00:00
|
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
|
[root@openldap-ca CA]# openssl ca -in /tmp/54im-ldap.csr -out /tmp/54im-ldap.crt
Using configuration from /etc/pki/tls/openssl.cnf
Check that the request matches the signature
Signature ok
Certificate Details:
Serial Number: 1 (0x1)
Validity
Not Before: May 22 07:58:15 2014 GMT
Not After : May 22 07:58:15 2015 GMT
Subject:
countryName = CN
stateOrProvinceName = SHANGHAI
organizationName = 54IM
organizationalUnitName = IT
commonName = openldap.54im.com
emailAddress = 474356107@qq.com
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
Netscape Comment:
OpenSSL Generated Certificate
X509v3 Subject Key Identifier:
7D:50:67:5B:69:36:B8:FD:9F:9B:8E:E9:EB:4D:08:C0:A1:8D:3C:FC
X509v3 Authority Key Identifier:
keyid:92:7C:3D:9C:5E:03:34:02:07:3B:0C:16:1A:BD:85:21:FE:53:54:39
Certificate is to be certified until May 22 07:58:15 2015 GMT (365 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
|
1
2
3
4
5
6
7
|
[root@openldap-ca tmp]# scp -r /tmp/54im-ldap.crt openldap.54im.com:/root
root@openldap.54im.com‘s password:
54im-ldap.crt
[root@openldap-ca CA]# scp -r CA.crt openldap.54im.com:/root
root@openldap.54im.com‘s password:
CA.crt
|
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
|
[root@openldap-master ~]# vi /etc/openldap/ldap.conf
URI ldap://127.0.0.1/
BASE dc=openldap,dc=54im,dc=com
TLS_CACERTDIR /etc/openldap/cacerts
[root@openldap-master ~]#/etc/openldap/slapd.conf
TLSCACertificateFile /etc/openldap/cacerts/CA.crt
TLSCertificateFile /etc/openldap/cacerts/54im-ldap.crt
TLSCertificateKeyFile /etc/openldap/cacerts/54im-ldap.key
[root@openldap-master ~]# mkdir /etc/openldap/cacerts/
[root@openldap-master ~]# cp /root/CA.crt /etc/openldap/cacerts/
[root@openldap-master ~]# cp /root/54im-ldap. /etc/openldap/cacerts/
54im-ldap.crt 54im-ldap.csr 54im-ldap.key
[root@openldap-master ~]# cp /root/54im-ldap.* /etc/openldap/cacerts/
[root@openldap-master ~]# chown ldap.ldap /etc/openldap/cacerts/
[root@openldap-master ~]# service slapd stop
停止 slapd:[确定]
这里我们采用这种方式来启动ldap,这样可以监听加密和非加密的端口,
[root@openldap-master ~]# slapd -h "ldap:/// ldaps:///"
如果只想监听加密的
[root@openldap-master ~]# slapd -h "ldaps:///"
[root@openldap-master ~]# netstat -ntpl |grep slapd
tcp 0 0 0.0.0.0:636 0.0.0.0:* LISTEN 25671/slapd
tcp 0 0 0.0.0.0:389 0.0.0.0:* LISTEN 25671/slapd
tcp 0 0 :::636 :::* LISTEN 25671/slapd
tcp 0 0 :::389 :::* LISTEN 25671/slapd
|
cp /etc/pki/CA/private/CA.key /etc/openldap/cacerts/
1
2
3
4
|
[root@openldap-ca CA]# cat /etc/openldap/ldap.conf
TLS_CACERTDIR /etc/openldap/cacerts
URI ldaps://openldap.54im.com/
BASE dc=openldap,dc=54im,dc=com
|
1
2
3
4
5
6
|
[root@openldap-ca CA]# ldapwhoami -v -x -Z
ldap_initialize( <DEFAULT> )
ldap_start_tls: Operations error (1)
additional info: TLS already started
anonymous
Result: Success (0)
|
如果遇到如下错误:
1
2
3
4
5
|
#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)
|
在客户端的ldap.conf中加了“TLS_REQCERT allow”,重启nslcd 后出现了正常结果
1
2
3
4
5
|
[root@openldap-ca CA]# ldapwhoami -D "uid=ivon01,ou=People,dc=openldap,dc=54im,dc=com" -W -H ldaps://openldap.54im.com -v
ldap_initialize( ldaps://openldap.54im.com:636/??base )
Enter LDAP Password:
dn:uid=ivon01,ou=People,dc=openldap,dc=54im,dc=com
Result: Success (0)
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
[root@openldap-ca CA]# ldapsearch -x -b "dc=openldap,dc=54im,dc=com" -H ldaps://openldap.54im.com
# extended LDIF
#
# LDAPv3
# base <dc=openldap,dc=54im,dc=com> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#
# openldap.54im.com
dn: dc=openldap,dc=54im,dc=com
dc: openldap
objectClass: top
objectClass: domain
|
首先我们来配置一台和主一样的openldap,保证以下条件
一、保证两台服务器里都配置的一样的根dc,比如我的是:dc=openldap,dc=54im,dc=com。
二、两边的管理帐户都有cn=Manager,dc=openldap,dc=54im,dc=com,密码都为54im.com。
三、保证目前AB两台服务器的数据完全一致。如果闲麻烦可以先导出所有数据,然后删除当作全新安装,待同步完成后从其中一台导入即可。
前言:
Openldap 2.4的同步机制已经和2.3完全不同,我这里的同步机制采用的是镜像模式,并且双向镜像。
1
|
yum install openldap openldap-servers openldap-clients openldap-devel compat-openldap httpd php php-bcmath php-gd php-mbstring php-xml php-ldap phpldapadmin
|
1
2
3
|
suffix "dc=ldap,dc=54im,dc=com"
rootdn "cn=Manager,dc=openldap,dc=54im,dc=com"
rootpw {SSHA}hHZMkvQ3bj07PYOb6emsZHZfGtXvd5g8 //这里用上面产生的密码
|
我这里是yum安装的,所以config.d下面有phpldapadmin.conf,改下httpd.conf中的servername就可以。
注意:如果是下载的phpldapadmin包接下的话需要修改httpd.conf配置文件,最文件最后新增
1
2
3
4
5
6
7
8
9
10
11
|
vi /etc/httpd/conf/httpd.conf
ServerName openldap2.54im.com
Alias /phpldapadmin /usr/share/phpldapadmin/htdocs
Alias /ldapadmin /usr/share/phpldapadmin/htdocs
<Directory /usr/share/phpldapadmin/htdocs>
Order Deny,Allow
Deny from all
Allow from 127.0.0.1 192.168.1.0/24
Allow from ::1
</Directory>
|
最后启动slpad服务
/etc/init.d/slapd start
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
index entryCSN,entryUUID eq //新增
moduleload syncprov.la //把前面的注释去掉
modulepath /usr/lib/openldap //把前面的注释去掉
modulepath /usr/lib64/openldap //把前面的注释去掉
配置文件末尾新增
serverID 1
overlay syncprov
syncrepl rid=001
provider=ldap://192.168.1.137:389
type=refreshAndPersist
searchbase="dc=openldap,dc=54im,dc=com"
schemachecking=on
bindmethod=simple
binddn="cn=Manager,dc=openldap,dc=54im,dc=com"
credentials=54im.com
retry="60 +"
mirrormode on
|
1
2
3
4
5
6
7
8
9
10
11
12
|
syncrepl rid=001 #和openldap2 服务器保持一致,告诉openldap2 现在和你是同一组。
provider=ldap://192.168.1.137:389 #B服务器LDAP的IP及端口
type=refreshAndPersist #设置为持续同步
searchbase="dc=openldap,dc=54im,dc=com" #从B服务器同步dc=openldap,dc=54im,dc=com
schemachecking=on #schema验证开启
bindmethod=simple #密码验证为简单模式(即明文,此处你可以改为加密)
binddn="cn=Manager,dc=lhg,dc=com" #使用cn=Manager,dc=openldap,dc=54im,dc=com用户进行读取(openldap2服务器上必须有该用户)
credentials=54im.com #密码为54im.com
retry="60 +" #重试为60秒,60和“+”之间必须有空格
#以上几个都是syncrepl的参数,可以考虑在一行里完成,我这里在最前面用一个TAB做了换行。
mirrormode on #开启镜像模式
|
killall -9 slapdslapd -h ldap:/// ldaps:///
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
index entryCSN,entryUUID eq //新增
moduleload syncprov.la //把前面的注释去掉
modulepath /usr/lib/openldap //把前面的注释去掉
modulepath /usr/lib64/openldap //把前面的注释去掉
配置文件末尾新增
serverID 2
overlay syncprov
syncrepl rid=001
provider=ldap://192.168.1.143:389
type=refreshAndPersist
searchbase="dc=openldap,dc=54im,dc=com"
schemachecking=on
bindmethod=simple
binddn="cn=Manager,dc=openldap,dc=54im,dc=com"
credentials=54im.com
retry="60 +"
mirrormode on
|
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包安装。
1
2
|
wget http://prdownloads.sourceforge.net/lam/ldap-account-manager-4.5-0.fedora.1.noarch.rpm
rpm -ivh ldap-account-manager-4.5-0.fedora.1.noarch.rpm
|
cat /etc/httpd/conf.d/lam.apache.conf
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
|
[root@openldap-master config]# cat /usr/share/ldap-account-manager/config/lam.conf | egrep -v "^#|^$"
serverURL: ldap://localhost:389
admins: cn=Manager,dc=openldap,dc=54im,dc=com
passwd: {SSHA}Nbd31hSBKRDW0BqepRYsGpvzC3f26Iib
treesuffix: dc=openldap,dc=54im,dc=com
defaultLanguage: en_GB.utf8:UTF-8:English (Great Britain)
scriptPath:
scriptServer:
scriptRights: 750
cachetimeout: 5
searchLimit: 0
modules: posixAccount_minUID: 10000
modules: posixAccount_maxUID: 30000
modules: posixAccount_minMachine: 50000
modules: posixAccount_maxMachine: 60000
modules: posixGroup_minGID: 10000
modules: posixGroup_maxGID: 20000
modules: posixGroup_pwdHash: SSHA
modules: posixAccount_pwdHash: SSHA
activeTypes: user,group,host,smbDomain
types: suffix_user: ou=People,dc=openldap,dc=54im,dc=com
types: attr_user: #uid;#givenName;#sn;#uidNumber;#gidNumber
types: modules_user: inetOrgPerson,posixAccount,shadowAccount,sambaSamAccount
types: suffix_group: ou=group,dc=openldap,dc=54im,dc=com
types: attr_group: #cn;#gidNumber;#memberUID;#description
types: modules_group: posixGroup,sambaGroupMapping
types: suffix_host: ou=machines,dc=openldap,dc=54im,dc=com
types: attr_host: #cn;#description;#uidNumber;#gidNumber
types: modules_host: account,posixAccount,sambaSamAccount
types: suffix_smbDomain: dc=openldap,dc=54im,dc=com
types: attr_smbDomain: sambaDomainName:Domain name;sambaSID:Domain SID
types: modules_smbDomain: sambaDomain
lamProMailSubject: Your password was reset
lamProMailText: Dear @@givenName@@ @@sn@@,+::++::+your password was reset to: @@newPassword@@+::++::++::+Best regards+::++::+deskside support+::+
|
在windows想验证自己搭建的openldap是否配置成功,有个图像化的操作界面,首先电脑上得安装java软件jdk-8u5-windows-x64.exe。(不是浏览器那个java插件)
软件下载:http://pan.baidu.com/s/1ntHQF4P
软件解压后,运行lbe.bat这个
默认openldap匿名查询开了,所以只要别人知道你的openldap服务器ip就可以扫描到你的组织架构,OU,用户等信息,这些对外公布是不安全的。
比如上面这个图,我只输入了openldap的域名,勾上匿名,就可以查到你得额Base DN,然后保存后,就可以连接看到你整个组织架构了。
怎么关闭openldap的匿名查询呢,只要在slapd.conf配置文件中加入disallow bind_anon即可(加在 allow bind_v2 这行后面)。
发现已经连接不上我们的openldap了。
创建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
附:两种快速清除配置、重新导入数据的配置命令
================== 前面五行都是相同的 =====================
1
2
3
4
5
|
service slapd stop
rm -rf /etc/openldap/slapd.d/*
rm -rf /var/lib/ldap/*
cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
cd /usr/share/migrationtools
|
================== 以下为第一种方法 =====================
1
2
3
4
5
6
7
|
slapadd -v -l frontend.ldif
slapadd -v -l user.ldif
slapadd -v -l groups.ldif
slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d
chown -R ldap:ldap /var/lib/ldap
chown -R ldap:ldap /etc/openldap/slapd.d
service slapd start //使用slapadd添加完档案后才启动数据库
|
================== 以下为第二种方法 =====================
1
2
3
4
5
6
7
|
slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d
chown -R ldap:ldap /var/lib/ldap
chown -R ldap:ldap /etc/openldap/slapd.d
service slapd start //lapdadd命令必须先启动数据库
ldapadd -x -D cn=Manager,dc=kingmed,dc=com -W -f frontend.ldif
ldapadd -x -D cn=Manager,dc=kingmed,dc=com -W -f user.ldif
ldapadd -x -D cn=Manager,dc=kingmed,dc=com -W -f groups.ldif
|
手动录入方法
第一步是要建立DN:
1
2
3
4
5
6
7
|
# ldapadd -x -D ‘cn=root,dc=openldap,dc=54im,dc=com‘ -W
dn: dc=openldap,dc=54im,dc=com
objectClass: dcObject
objectClass: organization
dc: openldap
o: Corporation
description: d Corporation
|
注意:如果你用复制/粘贴功能把以上内容拷贝过去,一定要注意每行后面不要有空格,建议还是手工输入,按Ctrl+d存盘。
第二步是建立RDN:
1
2
|
# ldapadd -x -D ‘cn=root,dc=openldap,dc=54im,dc=com‘ -W
#-x表示用简单验证,-D表示指定目录,-W表示弹出密码输入提示
|
输入密码,这里的密码是在配置文件中rootpw项设置的密码,不是操作系统中root用户的密码。验证通过后就可输入以下内容:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
dn: uid=qq,dc=openldap,dc=54im,dc=com
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
uid: qq
cn: qq
sn: qq
telephoneNumber: 138888888
description: openldap test
telexNumber: tex-8888888
street: my street
postOfficeBox: postofficebox
displayName: qqdisplay
homePhone: home1111111
mobile: mobile99999
mail:qq@qq.com
|
输入完所有信息后,按Ctrl+d结束存盘。如果出现出错信息,请查一下对象类和属性的对应关系有没有错或输入失误。初学者就容易出错的地方是对象类和属性的对应关系没有处理好。对象类和属性是在schema文档中定义的。它们之间的关系是这样的,对象类中有些属性是必选的,有些属性是可选的。录入信息的属性必须在对象类中有定义才能用。
输入以下命令可查询到刚才输入的信息。
1
2
|
# ldapsearch -x -b ‘dc=openldap,dc=54im,dc=com‘
-b选项是设置目录起点,如果设置了客户端的BASE配置参数,该项可不用。
|
如果按以上配置文件设置了acl,用上面的查询命令是查询不到受保护的内容的。如上面的userPassword and mail。要查询到这些受限内容,需要通过验证才可以:
1
2
|
# ldapsearch -x -LLL -h openldap.54im.com -b ‘dc=openldap,dc=54im,dc=com‘ -D ‘uid=qq,dc=openldap,dc=54im,dc=com‘ -W ‘uid=qq‘
接着提示输入密码。输入userPassword的密码回车,所有信息就都出来了。
|
本文参考:
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
Centos6 yum安装openldap+phpldapadmin+TLS+双主配置
标签:
原文地址:http://www.cnblogs.com/AloneSword/p/4758814.html