三分钟上手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…
相关文章
相关标签/搜索