LDAP是輕量目錄訪問協議,英文全稱是Lightweight Directory Access Protocol,通常都簡稱爲LDAP。它是基於X.500標準的,可是簡單多了而且能夠根據須要定製。與X.500不一樣,LDAP支持TCP/IP,這對訪問Internet是必須的。LDAP的核心規範在RFC中都有定義,全部與LDAP相關的RFC均可以在LDAPman RFC網頁中找到。 簡單說來,LDAP是一個獲得關於人或者資源的集中、靜態數據的快速方式。 LDAP是一個用來發布目錄信息到許多不一樣資源的協議。一般它都做爲一個集中的地址本使用,不過根據組織者的須要,它能夠作得更增強大php
如今市場上有關LDAP的產品已有不少,各大軟件公司都在他們的產品中集成了LDAP服務,如Microsoft的ActiveDirectory、Lotus的Domino Directory、IBM的WebSphere中也集成了LDAP服務。LDAP的開源實現是OpenLDAP,它比商業產品一點也不差,並且源碼開放。html
OpenLDAP 是最經常使用的目錄服務之一,它是一個由開源社區及志願者開發和管理的一個開源項目,提供了目錄服務的全部功能,包括目錄搜索、身份認證、安全通道、過濾器等等。大多數的 Linux 發行版裏面都帶有 OpenLDAP 的安裝包。OpenLDAP 服務默認使用非加密的 TCP/IP 協議來接收服務的請求,並將查詢結果傳回到客戶端。因爲大多數目錄服務都是用於系統的安全認證部分好比:用戶登陸和身份驗證,因此它也支持使用基於 SSL/TLS 的加密協議來保證數據傳送的保密性和完整性。OpenLDAP 是使用 OpenSSL 來實現 SSL/TLS 加密通訊的前端
這裏引伸一下LDAP主要的簡稱含義:java
這裏準備3臺虛擬機,在cloudstack上生成很方便,固然能夠根據本身需求來部署,能夠只部署簡單的ldap,也能夠部署ldap+ca,也能夠部署ldap複製,前2個均可以在一臺服務器上進行。linux
openldap master: 192.168.1.137 域名:openldap.54im.comgit
openldap slave: 192.168.1.143 域名:openldap2.54im.comweb
ca+openldap client: 192.168.1.111 域名:openldap-ca.54im.com算法
在3臺服務器上均進行以下操做。shell
vi /etc/resolv.conf數據庫nameserver 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,保證如下條件
1、保證兩臺服務器裏都配置的同樣的根dc,好比個人是:dc=openldap,dc=54im,dc=com。
2、兩邊的管理賬戶都有cn=Manager,dc=openldap,dc=54im,dc=com,密碼都爲54im.com。
3、保證目前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強大功能
一、使用LAM,能夠經過Web接口較爲直觀的、簡便的管理存儲在LDAP目錄裏的用戶、用戶組和計算機系統帳戶。
二、管理Unix的用戶、用戶組、主機、域名。
三、強大的過濾和排序功能。
四、賬號屬性管理。
五、多構造屬性。
六、直觀樹狀查看模式。
七、計劃查看模式。
八、經過文件上傳建立賬號。
九、全部賬號可導出爲PDF文件格式。
十、管理用戶、用戶組、配額和自動建立刪除用戶的Home目錄。
十一、支持LDAP+SSL加密模式。
十二、多國語言支持,如Catalan、Chinese(Traditional)等。
安裝需求
一、PHP5語言環境和Perl語言環境。
二、OpenLDAP2.0或更高版本。
三、支持CSS的網頁瀏覽器。
四、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