三分鐘上手openldap賬號系統

公司內的賬號系統通常使用openldap,openldap相對於把賬號存入mysql等關係數據庫中開發和維護成本都比較低,因此openldap成了公司內賬號體系最合適的選擇php

能夠經過下面的內容快速上手這個openldap賬號系統html

名詞概念

這個ldap裏面使用了不少的別名,下面列出了經常使用的別名java

dn: 區別名,類比mysql的主鍵idmysql

cn: 經常使用名,類比用戶的呢稱(全名)linux

sn: 用戶的姓氏git

giveName: 用戶名字(不包含姓)github

dc: 所屬域名,類比命名空間,一個用戶能夠存在在多個dc中spring

uid: 登陸使用的名稱sql

c: 所屬國家,好比CN表示中國docker

ou: 所屬組織

LDIF: openldap的數據描述格式,類比linux的/etc/passwd文件格式,使用固定的格式來描述包含的數據

dn:uid=1,ou=firstunit,o=myorganization,dc=example,dc=org
objectclass:top
objectclass:person
objectclass:uidObject
objectclass:simpleSecurityObject
userPassword:123456
cn:第一個用戶
sn:su
uid:1
telephoneNumber:13288888888
複製代碼

注意:不少objectClass都會提供額外的字段,好比上面的telephoneNumber字段就是person這個objectClass提供的

objectClass列表參考:www.zytrax.com/books/ldap/… 能夠經過定義schema建立新的objectClass: www.openldap.org/doc/admin24…

搭建openldap服務器

可使用這個docker一鍵啓動openldap服務器,參考:github.com/osixia/dock… 編寫docker-compose.yml以下

version: '3'

services:
    ldap:
      image: osixia/openldap:1.2.4
      environment:
        - TZ=PRC
      ports:
        - 389:389
        - 636:636
    admin:
      image: osixia/phpldapadmin:0.8.0
      volumes:
        - ./data/admin/config:/container/service/phpldapadmin/assets/config
      ports:
        - 6443:443
      links:
        - ldap
複製代碼

而後啓動

docker-compose up -d
複製代碼

使用命令docker-compose ps能夠查看啓動效果

能夠看到這個ldap服務器已經在389端口監聽了

這個docker建立的管理員賬號是:cn=admin,dc=example,dc=org 密碼:admin 默認的域名是:dc=example,dc=org

組織架構

用戶體系通常體現了公司的組織架構,經常使用的組織架構有下面兩種

  1. 互聯網命名的組織架構:根節點爲國家,國家下爲域名,域名下爲組織/組織單元,再往下爲用戶
  2. 企業命名的組織架構:根節點爲域名,域名下面爲部門,部門下面爲用戶

下面就用企業命名的組件架構舉例

命令行操做

建立數據

構建ldif文件,好比myo.ldif

dn:o=myorganization,dc=example,dc=org
objectclass:top
objectclass:organization
o:myorganization
description:個人組織

dn:ou=firstunit,o=myorganization,dc=example,dc=org
objectclass:top
objectclass:organizationalUnit
description:組織裏的第一個單位

dn:uid=1,ou=firstunit,o=myorganization,dc=example,dc=org
objectclass:top
objectclass:person
objectclass:uidObject
objectclass:simpleSecurityObject
userPassword:123456
cn:第一個用戶
sn:su
uid:1
複製代碼

而後導入到ldap服務器裏面

docker-compose exec ldap bash
ldapadd  -x  -D "cn=admin,dc=example,dc=org"  -W  -f myo.ldif
複製代碼

操做效果以下

能夠看到數據已經成功導入了

搜索數據

可使用ldapsearch命令查找數據,好比查找這個域名: dc=example,dc=org 下的全部數據

ldapsearch -x -H ldap://localhost -b dc=example,dc=org -D "cn=admin,dc=example,dc=org" -w admin
複製代碼

操做效果以下

能夠看到查詢成功執行了

備份數據

使用slapcat -v -l mybackup.ldif進行備份 操做效果以下

清空數據

可使用ldapdelete -x -D "cn=admin,dc=example,dc=org" -w admin -r "dc=example,dc=org"命令清空example,dc=org下的全部oepnldap的數據

操做效果以下:

注意並無刪除dc=example,dc=org這條記錄

恢復數據

注意:恢復前須要把備份文件中的這些字段先刪掉

  1. creatorsName
  2. modifiersName
  3. modifyTimestamp
  4. createTimestamp
  5. entryUUID
  6. entryCSN
  7. structuralObjectClass 而後刪掉這條記錄dn: dc=example,dc=org

使用命令ldapadd -x -D"cn=admin,dc=example,dc=org" -w admin -f mybackup.ldif進行導入

操做效果以下

使用ldapsearch命令進行驗證

能夠看到數據已經成功導入了

客戶端

ldap目前有三個客戶端能夠選擇

  1. jxplorer: jxplorer.org/
  2. Apache Directory Studio
  3. phpLDAPadmin

jxplorer有中文界面,而且簡單容易上手,Apache Directory Studio功能強大,建議先使用jxplorer上手,而後再使用Apache Directory Studio進行操做,phpLDAPadmin能夠自行了解

程序客戶端

一些注意的點

定義有密碼用戶使用simpleSecurityObject這個objectClass,好比

dn: cn=suxiaolin,dc=example,dc=org
objectClass: organizationalRole
objectclass: simpleSecurityObject
cn: suxiaolin
userPassword:123456
複製代碼

這個userPassword字段的值就是用戶密碼

參考資料

  1. explainshell.com/explain/1/l…
  2. github.com/osixia/dock…
  3. github.com/osixia/dock…
相關文章
相關標籤/搜索