三分鐘上手openldap帳號系統

蘇小林發表於2019-06-09

公司內的帳號系統一般使用openldap,openldap相對於把帳號存入mysql等關聯式資料庫中開發和維護成本都比較低,所以openldap成了公司內帳號體系最合適的選擇

可以通過下面的內容快速上手這個openldap帳號系統

名詞概念

這個ldap裡面使用了很多的別名,下面列出了常用的別名

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

cn: 常用名,類比使用者的呢稱(全名)

sn: 使用者的姓氏

giveName: 使用者名稱字(不包含姓)

dc: 所屬域名,類比名稱空間,一個使用者可以存在在多個dc中

uid: 登入使用的名稱

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

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可以檢視啟動效果

三分鐘上手openldap帳號系統
可以看到這個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
複製程式碼

操作效果如下

三分鐘上手openldap帳號系統
可以看到資料已經成功匯入了

搜尋資料

可以使用ldapsearch命令查詢資料,比如查詢這個域名: dc=example,dc=org 下的所有資料

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

操作效果如下

三分鐘上手openldap帳號系統

可以看到查詢成功執行了

備份資料

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

三分鐘上手openldap帳號系統

清空資料

可以使用ldapdelete -x -D "cn=admin,dc=example,dc=org" -w admin -r "dc=example,dc=org"命令清空example,dc=org下的所有oepnldap的資料

操作效果如下:

三分鐘上手openldap帳號系統

注意並沒有刪除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進行匯入

操作效果如下

三分鐘上手openldap帳號系統

使用ldapsearch命令進行驗證

三分鐘上手openldap帳號系統
可以看到資料已經成功匯入了

客戶端

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…

相關文章