博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
三分钟上手openldap帐号系统
阅读量:6229 次
发布时间:2019-06-21

本文共 3095 字,大约阅读时间需要 10 分钟。

公司内的帐号系统一般使用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=orgobjectclass:topobjectclass:personobjectclass:uidObjectobjectclass:simpleSecurityObjectuserPassword:123456cn:第一个用户sn:suuid:1telephoneNumber:13288888888复制代码

注意:很多objectClass都会提供额外的字段,比如上面的telephoneNumber字段就是person这个objectClass提供的

objectClass列表参考: 可以通过定义schema创建新的objectClass:

搭建openldap服务器

可以使用这个docker一键启动openldap服务器,参考: 编写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=orgobjectclass:topobjectclass:organizationo:myorganizationdescription:我的组织dn:ou=firstunit,o=myorganization,dc=example,dc=orgobjectclass:topobjectclass:organizationalUnitdescription:组织里的第一个单位dn:uid=1,ou=firstunit,o=myorganization,dc=example,dc=orgobjectclass:topobjectclass:personobjectclass:uidObjectobjectclass:simpleSecurityObjectuserPassword:123456cn:第一个用户sn:suuid:1复制代码

然后导入到ldap服务器里面

docker-compose exec ldap bashldapadd  -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:
  2. Apache Directory Studio
  3. phpLDAPadmin

jxplorer有中文界面,并且简单容易上手,Apache Directory Studio功能强大,建议先使用jxplorer上手,然后再使用Apache Directory Studio进行操作,phpLDAPadmin可以自行了解

程序客户端

  • java参考:
  • php参考:
  • go参考:

一些注意的点

定义有密码用户使用simpleSecurityObject这个objectClass,比如

dn: cn=suxiaolin,dc=example,dc=orgobjectClass: organizationalRoleobjectclass: simpleSecurityObjectcn: suxiaolinuserPassword:123456复制代码

这个userPassword字段的值就是用户密码

参考资料

转载于:https://juejin.im/post/5cfcf5e351882555f4466060

你可能感兴趣的文章
Linux~上部署.net MVC出现的问题与解决
查看>>
DDD~充血模型和失血模型
查看>>
android DPI与分辨率的关系及计算方式
查看>>
forward_list
查看>>
伪分布式网络爬虫框架的设计与自定义实现(一)
查看>>
解决npm ERR! Unexpected end of JSON input while parsing near的方法汇总
查看>>
MySQL 入门
查看>>
js的操作及css样式
查看>>
bootstrapValidator关于js,jquery动态赋值不触发验证(不能捕获“程序赋值事件”)解决办法...
查看>>
数据库设计基础>范式
查看>>
POJ 3461 Oulipo(模式串在主串中出现的次数)
查看>>
Openstack的镜像属性
查看>>
【分享】用Canvas实现画板功能
查看>>
C++走向远洋——46(教师兼干部类、多重继承、派生)
查看>>
spring IOC源码分析(1)
查看>>
「深入理解计算系统」从Hello World开始
查看>>
手写Json转换
查看>>
Xception
查看>>
MySQL——约束(constraint)详解---转载
查看>>
模板函数
查看>>