LDAP 基础教程

LDAP 全称轻量级目录访问协议(英文:Lightweight Directory Access Protocol),是一个运行在 TCP/IP 上的目录访问协议。LDAP实现提供被称为目录服务的信息服务,可以看做是一张特殊的数据库系统。可以有效的解决众多网络服务的用户账户问题,规定了统一的身份信息数据库、身份认证机制和接口,实现了资源和信息的统一管理,保证了数据的一致性和完整性。

使用场景

有两个系统A,B;需要把A系统创建的用户同步到B中,而B是个apache 开源项目,此时需要借助LDAP来解决。首先在A中建用户的同时,同步更新到LDAP中,然后B系统从LDAP中同步到自己的系统中,这样就实现了A中的用户到B系统的同步。

LDAP理解

在LDAP中,信息以树状方式组织,基本数据单元是条目,而每个条目由属性构成,属性由类型(Type)和一个或多个值(Value)组成。

Entry

包含的信息描述了现实世界中的一个真实的对象,在目录系统中可以理解为一个节点。在目录中添加一个Entry时,该Entry必须属于一个或者多个对象类(Oject Class),Entry的类型由属性Object Class规定。每个Entry都有一个唯一的DN(distinguished name)来标识Entry在directory中的位置。用Java的方式Entry相当于一个Instances,而Ojbect class自然就是Class。

根节点DN的命名有多种方法,其中之一就是域名命名法,例如sohu.com根阶节点的DN应该是DN:dc=sohu,dc=com,People节点的DN:ou=People,dc=example,dc=com,RDN是目录树中节点的相对标识,例如People节点的RDN:ou=people。

Attribute

每个Entry都是由许多Attribute组成,每个属性描述的是对象的一个特征,每个属性由一个类型和一个或多个值Value组成。 每个属性类型有所对应的语法和匹配规则;对象类和属性类型的定义均可以使用继承的概念。每个条目创建时,必须定义所属的对象类,必须提供对象类中的必选属性类型的属性值,在LDAP中一个属性类型可以对应多个值。 常见属性:

属性名 是否必填 描述
c 国家
dc domain component,常用来指一个域名的一部分
o 该条目所属的组织名(Organization Name)
ou 一个组织单元的名字
cn common name,一个对象的名字,如果指人,使用全名
sn Surname,一个人的姓
uid Userid,某个用户的登录名,与Linux系统中用户的uid不同
userPassword 登陆密码
mail 邮箱
givenName 一个人的名
displayName 显示条目时要使用的首选名称
uidNumber 账号的UID
gidNumber 账号的GID
homeDirectory 用户的家目录指定
loginShell 用户登录的SHELL
employeeNumber 工号相关信息
homePhone 家庭电话
mobile 该条目的手机号码
description 该条目的描述信息

Object class

在LDAP中,一个条目必须包含一个Oject class属性,且需要赋予至少一个值。每个值将用作一条LDAP条目进行数据存储的模板,模板中包含了一个条目必须被赋值的属性和可选的属性。 Object分为三类,结构型(Structural),如Person和orginzationUnit,辅助型(Auxiliary),如extensibeObject,抽象型(Abstract):如top,抽象型的ObjectClass不能直接使用。 下面部分常用的ObjectClass,定义在/etc/openldap/schema/core.schema文件中

名称 描述 必要属性
domain
organization o
organizationalUnit ou
person sn,cn
organizationPerson cn,sn
top 抽象型,顶级ObjectClass
posixAccount Linux用户 cn,gidNumber,homeDirectory,uid,uidNumber
posixGroup Linux用户组 cn,gidNumber
  • Entry必须仅包含一个Structural类型的OjectClass,其他两种类型可包括0或者多个。

LDAP 功能模型

描述LDAP 协议可以采用的相关操作,来访问存储在目录树中的数据,可以将操作分 成三组: (1) 更新操作 包括添加,删除,重命名,修改Entry (2) Interrogation Operation 用于数据的查询 (3) 认证和控制 (bind unbind abandon)

LDAP 安全模型

(1) 提供一个框架,包含目录中的信息不被非法访问,LDAP 的安全模型主要是通过身份认 证、安全通道和访问控制(ACL)来实现。 (2) LDAP 是一个面向连接的协议,在能够对LDAP 目录进行任何操作之前,LDAP 客户端 端必须获得一个到LDAP 服务端的一个连接,在这个过程中需要对LDAP 客户端的身份进 行验证(可以理解为用户绑定)。 (3) 在用户通过验证之后,为用户分配附加的权限,比如一些用户只能查看特定的Entry,而不能修改。一些用户可以查看并且修改所有的Entry等。

下面是一个典型的 LDAP 目录树结构,其中每个节点表示一个条目。在下一节中,我们将按照这个结构来配置一个简单的 LDAP 服务。

本文仅涉及没有SSL的OpenLDAP配置。

一、环境准备

两台虚拟机

IP hostname 说明
192.168.1.101 openldap-server server端
192.168.1.102 openldap-client client端

关闭SELinux

查看SELinux状态:getenforce, 或/usr/sbin/sestatus 临时关闭:

setenforce 0

永久关闭:

sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config 
grep SELINUX=disabled /etc/selinux/config

关闭iptables

chkconfig  iptables off
/etc/init.d/iptables stop 
/etc/init.d/iptables status

官方文档:

http://www.openldap.org/doc/admin24/

步骤 分为server端操作和client端操作

二、server端安装OpenLDAP

1. yum安装OpenLDAP

[root@openldap-server ~]# yum install openldap openldap-servers openldap-servers-sql openldap-clients openldap-devel compat-openldap -y

OpenLDAP的相关配置文件信息

  • /etc/openldap/slapd.conf:OpenLDAP的主配置文件,记录根域信息,管理员名称,密码,日志,权限等
  • /etc/openldap/slapd.d/*:这下面是/etc/openldap/slapd.conf配置信息生成的文件,每修改一次配置信息,这里的东西就要重新生成
  • /etc/openldap/schema/*:OpenLDAP的schema存放的地方
  • /var/lib/ldap/*:OpenLDAP的数据文件
  • /usr/share/openldap-servers/slapd.conf.obsolete 模板配置文件
  • /usr/share/openldap-servers/DB_CONFIG.example 模板数据库配置文件

OpenLDAP监听的端口:

  • 默认监听端口:389(明文数据传输)
  • 加密监听端口:636(密文数据传输)

2. 复制ldap配置文件到/etc

[root@openldap-server ~]# cp /usr/share/openldap-servers/slapd.conf.obsolete /etc/openldap/slapd.conf

3. 生成ldap管理员密码(把ldappassword改为自己的管理员密码)

[root@openldap-server ~]# slappasswd -s ldappassword
{SSHA}b6YpCvRFWAWQdJpueuyzk79VXlikj4Z1

4. 修改slapd.conf

修改其中cn,dc相关内容,及rootpw密文密码,rootpw配置上面设置的密码 (rootpw必须顶格写,与密码Tab键分开)

[root@openldap-server ~]# cp /etc/openldap/slapd.conf /etc/openldap/slapd.conf.bak
[root@openldap-server ~]# vim /etc/openldap/slapd.conf
......
database        bdb
suffix          "dc=qq,dc=com"
checkpoint      1024 15
rootdn          "cn=Manager,dc=qq,dc=com"             #管理LDAP中信息的最高权限,即管理员权限,登陆时用。
......
rootpw			{SSHA}b6YpCvRFWAWQdJpueuyzk79VXlikj4Z1

检测/etc/openldap/slapd.conf是否有错误

[root@openldap-server ~]# slaptest -f /etc/openldap/slapd.conf
config file testing succeeded

5. 检测并重新生成ldap数据库

[root@openldap-server ~]# cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG    # 拷贝DB_CONFIG文件
[root@openldap-server ~]# cd /etc/openldap/
[root@openldap-server openldap]# ls -l slapd.d/
drwxr-x--- 3 ldap ldap 4096 7月  13 13:59 cn=config
-rw-r----- 1 ldap ldap 1281 7月  13 13:50 cn=config.ldif
[root@openldap-server openldap]# rm -rf slapd.d/*            # 删除默认配置 (否则添加ldap用户时会报错)
[root@openldap-server openldap]#
 
官方对于OpenLDAP2.4 ,不推荐使用 slapd.conf 作为配置文件。从这个版本开始所有配置数据都保存在 /etc/openldap/slapd.d/中

[root@openldap-server openldap]# slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d/
5b02d207 bdb_db_open: database "dc=qq,dc=com": db_open(/var/lib/ldap/id2entry.bdb) failed: No such file or directory (2).
5b02d207 backend_startup_one (type=bdb, suffix="dc=qq,dc=com"): bi_db_open failed! (2)
slap_startup failed (test would succeed using the -u switch) 

[root@openldap-server openldap]# slaptest -u
config file testing succeeded
出现succeed继续

6. 修改相关ldap文件权限

[root@openldap-server openldap]# chown -R ldap:ldap /var/lib/ldap/
[root@openldap-server openldap]# chown -R ldap:ldap /etc/openldap/

7. 启动slapd服务

[root@openldap-server openldap]# service slapd start
Starting slapd:                                            [  OK  ]
[root@openldap-server openldap]# service slapd status 
slapd (pid  12896) is running...
[root@openldap-server openldap]# chkconfig slapd on
[root@openldap-server openldap]# lsof -i:389
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
slapd   12896 ldap    7u  IPv4 702934      0t0  TCP *:ldap (LISTEN)
slapd   12896 ldap    8u  IPv6 702935      0t0  TCP *:ldap (LISTEN)

三、OpenLDAP日志功能开启

1. slapd.conf配置文件里加上日志行

这里的日志级别有很多种,这里选择256这个值的级别(主从节点都要打开openldap日志功能)

[root@openldap-master ~]# cp /etc/openldap/slapd.conf{,.bak3}
[root@openldap-master ~]# vim /etc/openldap/slapd.conf           #中间的空格用tab键分开
.......  # 最后添加
loglevel  256

2. 修改了配置文件,所有得重新生成配置文件的信息

[root@openldap-master ~]# rm -rf /etc/openldap/slapd.d/*
[root@openldap-master ~]# slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d/
config file testing succeeded
[root@openldap-master ~]# slaptest -u
config file testing succeeded
[root@openldap-master ~]# chown -R ldap:ldap /var/lib/ldap/
[root@openldap-master ~]# chown -R ldap:ldap /etc/openldap/

3. 修改/etc/rsyslog.conf文件,加上下面内容

[root@openldap-master ~]# cp /etc/rsyslog.conf{,.bak}
[root@openldap-master ~]# vim /etc/rsyslog.conf
........    # 最后添加
local4.*	/var/log/slapd/slapd.log

4. 创建日志文件目录,授权

[root@openldap-master ~]# mkdir /var/log/slapd
[root@openldap-master ~]# chmod 755 /var/log/slapd/
[root@openldap-master ~]# chown ldap.ldap /var/log/slapd/

5. 重启syslog服务和slapd服务

[root@openldap-master ~]# /etc/init.d/rsyslog restart
Shutting down system logger:                               [  OK  ]
Starting system logger:                                    [  OK  ]
 
[root@openldap-master ~]# /etc/init.d/slapd restart
Stopping slapd:                                            [  OK  ]
Starting slapd:                                            [  OK  ]
[root@openldap-master ~]# lsof -i:389
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
slapd   13773 ldap    7u  IPv4 840484      0t0  TCP *:ldap (LISTEN)
slapd   13773 ldap    8u  IPv6 840485      0t0  TCP *:ldap (LISTEN)

6. 查看openldap日志信息

[root@openldap-master ~]# tail -f /var/log/slapd/slapd.log

四、server端安装migrationtools,创建根域条目(可选)

参考:http://book.51cto.com/art/201602/505737.htm

1. 安装migrationtools 工具

migrationtools 实现OpenLDAP 用户及用户组的添加。

[root@openldap-server openldap]# yum install migrationtools -y

2. 编辑/usr/share/migrationtools/migrate_common.ph并修改相关配置

[root@openldap-server openldap]# cp /usr/share/migrationtools/migrate_common.ph{,.bak}
[root@openldap-server openldap]# vim /usr/share/migrationtools/migrate_common.ph
# 搜索”dc=”,值改为与slapd.conf一致内容
......
# Default DNS domain
$DEFAULT_MAIL_DOMAIN = "qq.com";
 
# Default base
$DEFAULT_BASE = "dc=qq,dc=com";

3. 创建OpenLDAP 根域条目,base.ldif

[root@openldap-server openldap]# /usr/share/migrationtools/migrate_base.pl > base.ldif
[root@openldap-server openldap]# cat base.ldif
dn: dc=qq,dc=com
dc: qq
objectClass: top
objectClass: domain
 
dn: ou=Hosts,dc=qq,dc=com
ou: Hosts
objectClass: top
objectClass: organizationalUnit
 
dn: ou=Rpc,dc=qq,dc=com
ou: Rpc
objectClass: top
objectClass: organizationalUnit
 
dn: ou=Services,dc=qq,dc=com
ou: Services
objectClass: top
objectClass: organizationalUnit
 
dn: nisMapName=netgroup.byuser,dc=qq,dc=com
nismapname: netgroup.byuser
objectClass: top
objectClass: nisMap
 
dn: ou=Mounts,dc=qq,dc=com
ou: Mounts
objectClass: top
objectClass: organizationalUnit
 
dn: ou=Networks,dc=qq,dc=com
ou: Networks
objectClass: top
objectClass: organizationalUnit
 
dn: ou=People,dc=qq,dc=com
ou: People
objectClass: top
objectClass: organizationalUnit
 
dn: ou=Group,dc=qq,dc=com
ou: Group
objectClass: top
objectClass: organizationalUnit
 
dn: ou=Netgroup,dc=qq,dc=com
ou: Netgroup
objectClass: top
objectClass: organizationalUnit
 
dn: ou=Protocols,dc=qq,dc=com
ou: Protocols
objectClass: top
objectClass: organizationalUnit
 
dn: ou=Aliases,dc=qq,dc=com
ou: Aliases
objectClass: top
objectClass: organizationalUnit
 
dn: nisMapName=netgroup.byhost,dc=qq,dc=com
nismapname: netgroup.byhost
objectClass: top
objectClass: nisMap

可以编辑base.ldif 进行修改,将不需要的条目删除,然后通过ldapadd 导入至OpenLDAP目录树。

4. 添加base.ldif到ldap(输入密码为上面创建的:ldappassword)

[root@openldap-server openldap]# ldapadd -x -D "cn=Manager,dc=qq,dc=com" -w ldappassword -f ./base.ldif
Enter LDAP Password:

ldap_sasl_bind(SIMPLE): Can't contact LDAP server (-1)                              '

出现这个错误的时候,查看服务和端口都已经开启了,需要你手动指定主机名和你的端口号(ldap端口号为389),使用-h 加上主机名。

[root@openldap-server openldap]# ldapadd -x -D "cn=Manager,dc=qq,dc=com" -w ldappassword -f ./base.ldif -h openldap-server -p 389

adding new entry "dc=qq,dc=com"
 
adding new entry "ou=Hosts,dc=qq,dc=com"
 
adding new entry "ou=Rpc,dc=qq,dc=com"
 
adding new entry "ou=Services,dc=qq,dc=com"
 
adding new entry "nisMapName=netgroup.byuser,dc=qq,dc=com"
 
adding new entry "ou=Mounts,dc=qq,dc=com"
 
adding new entry "ou=Networks,dc=qq,dc=com"
 
adding new entry "ou=People,dc=qq,dc=com"
 
adding new entry "ou=Group,dc=qq,dc=com"
 
adding new entry "ou=Netgroup,dc=qq,dc=com"
 
adding new entry "ou=Protocols,dc=qq,dc=com"
 
adding new entry "ou=Aliases,dc=qq,dc=com"
 
adding new entry "nisMapName=netgroup.byhost,dc=qq,dc=com"

5. 检查ldapadd是否成功(密码为上面创建的:ldappassword)(必须检查确认Manager数据添加了,才能通过phpldapAdmin登录)

[root@openldap-server openldap]# ldapsearch -x -D "cn=Manager,dc=qq,dc=com" -b "ou=Aliases,dc=qq,dc=com" -w ldappassword
# extended LDIF
#
# LDAPv3
# base <ou=Aliases,dc=qq,dc=com> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

# Aliases, qq.com
dn: ou=Aliases,dc=qq,dc=com
ou: Aliases
objectClass: top
objectClass: organizationalUnit
 
# search result
search: 2
result: 0 Success
 
# numResponses: 2
# numEntries: 1

六、安装openLdap桌面服务

1. yum安装httpd及PhpLdapAdmin

[root@openldap-server openldap]# rpm -ivh http://mirrors.ukfast.co.uk/sites/dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
[root@openldap-server openldap]# yum install httpd phpldapadmin -y

2. 配置/etc/httpd/conf.d/phpldapadmin.conf允许从远程访问

[root@openldap-server openldap]# cp -a /etc/httpd/conf.d/phpldapadmin.conf{,.bak}     #可以先把此文件cp备份一份
[root@openldap-server openldap]# vim /etc/httpd/conf.d/phpldapadmin.conf
Alias /phpldapadmin /usr/share/phpldapadmin/htdocs 
Alias /ldapadmin /usr/share/phpldapadmin/htdocs 
   
<Directory /usr/share/phpldapadmin/htdocs> 
  Order Deny,Allow 
  Allow from all 
  Allow from 127.0.0.1                         #或者去掉下面这三行内容,表示运行所有客户机访问(本测试案例就去掉了这三行)
  Allow from ::1
  Allow from all     #允许哪些IP地址访问phpldapadmin,我写的全部。
</Directory>

3. 修改/etc/phpldapadmin/config.php配置用DN登录

[root@openldap-server openldap]# cp /etc/phpldapadmin/config.php{,.bak}
[root@openldap-server openldap]# vim /etc/phpldapadmin/config.php
.......
//$servers->setValue('login','attr','uid');      #注释掉这一行
$servers->setValue('login','attr','dn');         #添加这一行
 
[root@openldap-server openldap]# diff /etc/phpldapadmin/config.php /etc/phpldapadmin/config.php.bak
398,399c398,399
< //$servers->setValue('login','attr','uid');
< $servers->setValue('login','attr','dn');
---
> $servers->setValue('login','attr','uid');
>

4. 启动httpd服务

[root@openldap-server openldap]# chkconfig httpd on
[root@openldap-server openldap]# service httpd start
Starting httpd: httpd: apr_sockaddr_info_get() failed for openldap-server
httpd: Could not reliably determine the server's' fully qualified domain name, using 127.0.0.1 for ServerName
														   [  OK  ]										   
[root@openldap-server openldap]# service httpd status
httpd (pid  13010) is running...
[root@openldap-server openldap]# lsof -i:80
COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
httpd   13010   root    4u  IPv6 757231      0t0  TCP *:http (LISTEN)
httpd   13012 apache    4u  IPv6 757231      0t0  TCP *:http (LISTEN)
httpd   13013 apache    4u  IPv6 757231      0t0  TCP *:http (LISTEN)
httpd   13014 apache    4u  IPv6 757231      0t0  TCP *:http (LISTEN)
httpd   13015 apache    4u  IPv6 757231      0t0  TCP *:http (LISTEN)
httpd   13016 apache    4u  IPv6 757231      0t0  TCP *:http (LISTEN)
httpd   13017 apache    4u  IPv6 757231      0t0  TCP *:http (LISTEN)
httpd   13018 apache    4u  IPv6 757231      0t0  TCP *:http (LISTEN)
httpd   13019 apache    4u  IPv6 757231      0t0  TCP *:http (LISTEN)

5. 打开Web UI并登录LDAP

URL:   $IP/phpldapadmin
用户名  "cn=Manager,dc=qq,dc=com"
密码   "ldappassword"

七、新建组织(公司)、管理员、组及用户

添加用户和用户组的方式有两种。一种是将系统用户通过migrationtools 工具生成LDIF 文件并结合ldapadd 命令导入OpenLDAP 目录树中,生成OpenLDAP 用户。另一种通过自定义LDIF 文件并通过OpenLDAP 命令进行添加或者修改操作。本文主要介绍第二种来完成OpenLDAP用户的添加。

1. 组织

创建组织:

[root@openldap-server data]# vim o.ldif      #在根目录下建立不同组织
dn: o=tengxun,dc=qq,dc=com
objectclass: top
objectclass: dcobject
objectclass: organization
dc: qq
o: tengxun
description: 腾讯
street: 深圳腾讯大厦

此LDIF 文件中存在中文字符,建议使用Linux dos2unix 命令进行转换,例如dos2unix -k –n filenew_file。作者建议尽可能不要使用中文字符进行添加,而使用英文添加。

导入组织数据

[root@openldap-server data]# ldapadd -x -D "cn=Manager,dc=qq,dc=com" -w ldappassword -f ./o.ldif -h openldap-server -p 389
adding new entry "o=tengxun,dc=qq,dc=com"

============================================================ 如果报错:

[root@openldap-server data]# ldapadd -x -D "cn=Manager,dc=qq,dc=com" -w ldappassword -f ./o.ldif -h openldap-server -p 389
ldapadd: attributeDescription "dn": (possible missing newline after line 3, entry "o=tengxun,dc=qq,dc=com"?)
adding new entry "o=tengxun,dc=qq,dc=com"
ldap_add: Type or value exists (20)
				additional info: ou: value #0 provided more than once

产生原因:o.ldif文件中的不规范的空格所致!!即导入的数据含有空格所致! 纠错如下:

dn:(空格)o=tengxun,dc=qq,dc=com
changetype:(空格)add(结尾无空格)
objectclass:(空格)top(结尾无空格)
objectclass:(空格)organizationalUnit(结尾无空格)
ou:(空格)echnology(结尾无空格)
(1空行,空行必须要定格,不能留空格)(结尾无空格)
........(后面的配置内容纠正方法同样)

===========================================================

查询刚导入数据

[root@openldap-server data]# ldapsearch -x -D "cn=Manager,dc=qq,dc=com" -b "o=tengxun,dc=qq,dc=com" -w ldappassword -h openldap-server -p 389
# extended LDIF
#
# LDAPv3
# base <o=tengxun,dc=qq,dc=com> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

# tengxun, qq.com
dn: o=tengxun,dc=qq,dc=com
objectClass: top
objectClass: dcObject
objectClass: organization
dc: qq
o: tengxun
description:: 572R5biF
street:: 5YyX5Lqs5biC5a6J57+U5YyX6YeM55SyMTHlj7fljJfkuqzliJvkuJrlpKfljqZC5bqnN
 zAx5a6k

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1

2. 管理员及组

在新建组织下创建管理员及组

在tengxun组织下创建一个 Manager 的组织角色(该角色内的用户具有管理整个 LDAP 的权限)和 People 和 Group 两个组织单元:
[root@openldap-server data]# vim admin_group.ldif
# admin
dn: cn=Manager,o=tengxun,dc=qq,dc=com
objectClass: organizationalRole
cn: Manager

# Group组
dn: ou=Group,o=tengxun,dc=qq,dc=com
ou: Group
objectClass: organizationalUnit

# People组
dn: ou=People,o=tengxun,dc=qq,dc=com
ou: People
objectClass: organizationalUnit

导入组数据

[root@openldap-server data]# ldapadd -x -D "cn=Manager,dc=qq,dc=com" -w ldappassword -f ./admin_group.ldif  -h openldap-server -p 389
adding new entry "cn=Manager,o=tengxun,dc=qq,dc=com"

adding new entry "ou=Group,o=tengxun,dc=qq,dc=com"

adding new entry "ou=People,o=tengxun,dc=qq,dc=com"

通过以上的所有步骤,我们就设置好了一个 LDAP 目录树:其中基准 dn: o=tengxun,dc=qq,dc=com 是该树的根节点,其下有一个管理域 cn=Manager,o=tengxun,dc=qq,dc=com 和两个组织单元 ou=People,o=tengxun,dc=qq,dc=com 及 ou=Group,o=tengxun,dc=qq,dc=com。

3. 用户

创建用户及部门(cn组)

[root@openldap-server data]# vim adduser.ldif
# create new
# replace to your own domain name for "dc=***,dc=***" section
dn: uid=huateng.ma,ou=People,o=tengxun,dc=qq,dc=com
objectClass: top
objectclass: person
#objectclass: organizationalPerson
objectclass: inetOrgPerson
objectClass: shadowAccount
uid: huateng.ma
cn: huateng.ma
sn: ma
displayName: 马化腾
ou: People
description:  可视化
#userPassword: ldappassword
userPassword: {SSHA}b6YpCvRFWAWQdJpueuyzk79VXlikj4Z1
mail: huateng.ma@qq.com

dn: cn=kaifa,ou=Group,o=tengxun,dc=qq,dc=com
objectClass: top
objectClass: groupOfUniqueNames
cn: kaifa
uniquemember: uid=huateng.ma,ou=People,o=tengxun,dc=qq,dc=com

导入用户数据

[root@openldap-server data]# ldapadd -x -D "cn=Manager,dc=qq,dc=com" -w ldappassword -f ./adduser.ldif -h openldap-server -p 389
adding new entry "uid=huateng.ma,ou=People,o=tengxun,dc=qq,dc=com"
adding new entry "cn=kaifa,ou=Group,o=tengxun,dc=qq,dc=com"

可以登陆phpLDAPadmin的web界面查询新导入的数据

添加其它用户

[root@openldap-server data]# vim adduser.ldif
# create new
# replace to your own domain name for "dc=***,dc=***" section
dn: uid=san.zhang,ou=People,o=tengxun,dc=qq,dc=com
objectClass: top
objectclass: person
#objectclass: organizationalPerson
objectclass: inetOrgPerson
objectClass: shadowAccount
uid: san.zhang
cn: san.zhang
sn: zhang
displayName: 张三
ou: People
description:  可视化
#userPassword: ldappassword
userPassword: {SSHA}b6YpCvRFWAWQdJpueuyzk79VXlikj4Z1
mail: san.zhang@qq.com

把san.zhang用户加入到kaifa组中(没验证)

dn: cn=kaifa,ou=Group,o=tengxun,dc=qq,dc=com
changetype: modify
add: memberuid
memberuid: san.zhang
或者

通过OpenLDAP界面把san.zhang用户添加到kaifa组中

点击左侧相应组织下的"ou=Group" --> "cn=kaifa" --> "uniqueMember" --> 点击下面的赋值,复制上面一行,然后修改uid保存即可。

八、参考:

http://book.51cto.com/art/201602/505669.htm https://www.cnblogs.com/kevingrace/p/9052669.html https://www.cnblogs.com/AloneSword/p/4758814.html

当你发现自己的才华撑不起野心时,就请安静下来学习吧