公司内的账号系统通常使用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…
可使用这个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
能够查看启动效果
这个docker建立的管理员账号是:cn=admin,dc=example,dc=org 密码:admin 默认的域名是:dc=example,dc=org
用户体系通常体现了公司的组织架构,经常使用的组织架构有下面两种
下面就用企业命名的组件架构举例
构建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这条记录
注意:恢复前须要把备份文件中的这些字段先删掉
使用命令ldapadd -x -D"cn=admin,dc=example,dc=org" -w admin -f mybackup.ldif
进行导入
操做效果以下
使用ldapsearch命令进行验证
ldap目前有三个客户端能够选择
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字段的值就是用户密码