2023年6月21日发(作者:)
LDAP协议简介以及OpenLDAP服务搭建我这篇⽂章是⾃⼰在学习LDAP的时候,为了记录下来,将⾃⼰收集的资料集合成⼀篇⽂章⽽成的仅供参考,并⾮原创。参考过的⽂章有⼀:LDAP协议简介LDAP,全称为轻量级⽬录访问协议,是⼀项开放协议,⽤于通过分层⽬录结构对数据进⾏存储与检索。LDAP是⼀种灵活得解决⽅案,适⽤于定义各类条⽬及相关性质。OpenLDAP项⽬是实现了LDAP协议的开源软件。基本LDAP数据组件属性(Attribute)LDAP系统中的数据主要以被称为属性得元素形式存储。属性在本质上属于健-值对。与其它系统不同,其中的健名称由为条⽬选定得objectClass进⾏预定义。另外,属性中的数据必须匹配属性初始定义内所定义得类型。属性不是随便定义的,需要符合⼀定规则,⽽这个规则可以通过schema制定。条⽬(Entry)单凭属性本⾝没有多少作⽤,我们必须将其与其它事物进⾏关联。在LDAP中,我们在条⽬内使⽤属性。条⽬基本上相当于属性与⼀条⽤于描述事物得名称得集合。条⽬也叫记录项,是LDAP中最基本的颗粒,就像字典中的词条,或者是数据库中的记录。通常对LDAP的添加、删除、更改、检索都是以条⽬为基本对象的。⼀个Entry就是⼀条记录,是LDAP中⼀个基本的存储单元。也可以看作是⼀个DN和⼀组属性的集合。dn:每⼀个条⽬都有⼀个唯⼀的标识名rdn:⼀般指dn逗号最左边的部分Base DN:LDAP⽬录树的最顶部DITDIT代表的是与⽂件系统类似得⼀种组织化结构,其中每个条⽬有且只有⼀个⽗条⽬,其下则可能有任意数量⼦条⽬。定义LDAP数据组件属性Attribute定义属性定义必须注明属性名称、任何其它能够⽤于引⽤该属性得名称、可以输⼊的数据类型以及其它各类元数据。该元数级能够描述此属性,告知LDAP如何对属性值进⾏排序或⽐对,同时告知其如何将其与其它属性相关联。幸运的是,⼤多数情况下我们⽆需⾃⾏定义属性,因为⼤部分LDAP实现⽅案中已经提供各类最为常⽤得属性,其它⽅案也能够导⼊现成属性。ObjectClass定义各个属性被收集在objectClass条⽬中。ObjectClass属于相关属性得简单分组,可⽤于描述特定事物。对象类是属性的集合,LDAP预想了很多⼈员组织机构中常见的对象,并将其封装成对象类。通过对象类可以⽅便的定义条⽬类型。每个条⽬可以直接继承多个对象类。对象类有三种类型:结构类型,抽象类型和辅助类型。结构类型是最基本的类型,它规定了对象实体的基本属性,每个条⽬属于且仅属于⼀个结构型对象类。抽象类型可以是结构类型或其它抽象类型⽗类,它将对象属性中共性的部分组织在⼀起,称为其它类的模板,条⽬不能直接集成抽象型对象类。辅助类型规定对象实体的扩展属性。每个条⽬⾄少有⼀个结构性对象类。SchemaobjectClass定义与属性定义两者由⼀套架构组合在⼀起,这个就是schema。就是对象类,属性分别约定了条⽬、属性、值,所有的这些构成了模式——对象类的集合。LDAP协议的衍⽣版本ldap:// 基本LDAP协议,允许对⽬录服务进⾏结构化访问ldaps:// 此衍⽣版本⽤于通过SSL/TLS实现LDAP表达。ldapi://⽤于通过IPC表达LDAP,其通常⽤于安全接⼊本地LDAP系统以实现管理⽤途.LDAP特点LDAP的结构⽤树表⽰,⽽不是⽤表格。LDAP可以很快地得到查询结果,不过在写⽅⾯,就慢得多LDAP提供了静态数据得快速查询⽅式Client/server模型:Server⽤于存储数据,Client提供操作⽬录信息树的⼯具LDAP是⼀种开放Internet标准,LDAP协议是跨平台的Interent协议Backend & Databaseldap的后台进程slapd接收、响应请求,但实际存储数据、获取数据的操作是由Backends做的,⽽数据是存放在Database中的,所以你可以看到backend和database指令是⼀样的值如bdb。⼀个backend可以有多个database instance,但是每个database的suffix和rootdn不⼀样。⽽bdb是⼀个⾼性能的⽀持事务和故障恢复的数据库后端,可以满⾜⼤部分需求。TLS&SASL分布式LDAP是以明⽂的格式通过⽹络来发送信息的,包括client访问ldap的密码,SSL/TLS的加密协议就是来保证数据传送的保密性和完整性。SASL是简单⾝份验证安全框架,它能够实现openldap客户端到服务器的⽤户验证,也就是ldapsearch,ldapmodify这些标准客户端⼯具默认尝试与LDAP服务器认证⽤户的⽅式。SASL有⼏⼤⼯业实现标准:Kerveros V5、DIGEST-MD5、EXTERNAL、PLAIN、LOGIN。LDIF(LDAP数据交换格式)LDIF是LDAP数据库信息的⼀种⽂本格式,⽤于数据的导⼊导出。LDAP Search filter搜索Filter⼀般由(attribute=value)这样的单元组成。⼆.搭建LDAP服务器这⾥我们使⽤的是OpenLDAP框架进⾏LDAP服务器的搭建。搭建⽅式有源码安装、docker搭建。apt-get install build-essential1.在Ubuntu上搭建OpenLDAP服务器 1.1 准备编译环境和依赖包apt-get install build-essential关于这个build-essential的作⽤,可以⽤apt-cache depends 'build-essential'来查看它的依赖可以看到它相关了很多编译有关的软件包apt-get install libssl-dev⽽libssl-dev 包含了openssl的include⽂件和代码库 1.2 安装openldap和berkeleyOpenLDAP默认使⽤BerkeleyDB数据库,因此需要先安装BerkeleryDB。wget /berkeley-db/ #下载BerkeleyDB压缩包wget ftp:///pub/OpenLDAP/openldap-release/ #下载openldap源码tar -zxf openldap* #解压openldaptar -zxf db* #解压berkeleyDB 1.2.1安装BerkeleyDBcd db*../dist/configure --prefix=/usr/local/berkeleydb-5.1make && make install 1.2.2安装openldap 1.2.2.1⾸先设置环境变量export BERkELEYDB_HOME="/usr/local/berkeleydb-5.1"export CPPFLAGS="-I$BERKELERYDB_HOME/include"export LDFLAGS="-L$BERKELEYDB_HOME/lib"export LD_LIBRARY_PATH="$BERKELEYDB_HOME/lib"export LDAP_HOME="/usr/local/openldap-2.4"export PATH="$PATH:$BERKELEYDB_HOME/bin:$LDAP_HOME/bin:$LDAP_HOME/sbin:$LDAP_HOME/libexec"1.2.2.2 编译安装cd openldap*./configure -prefix=/usr/local/openldap-2.4make dependmake
make install安装完成后就可以进⾏配置了1.3 OpenLDAP的基本配置1.3.1配置root密码slappassed1.3.2修改配置⽂件⽂件在/etc/openldap下,有四个⽂件,主要的是 and ,其它两个是backup⽂件。对进⾏修改。# $OpenLDAP: pkg/ldap/servers/slapd/,v 1.23.2.8 2003/05/24 23:19:14 kurt Exp $## See (5) for details on configuration options.# This file should NOT be world readable.##为了有效使⽤⽬录服务,包含相关的⽂件。注意,在包含⽂件时是要按⼀定顺序的,因为#⽂件⾥的属性存在依赖关系。如果顺序不对,服务器启动不了,⽂档间的依赖关系在⽂档#中都有说明,请仔细查看⼀下。如果懒得看也可以按我的顺序。include /usr/local/openldap/etc/openldap/schema/include /usr/local/openldap/etc/openldap/schema/include /usr/local/openldap/etc/openldap/schema/include /usr/local/openldap/etc/openldap/schema/
include /usr/local/openldap/etc/openldap/schema/
include /usr/local/openldap/etc/openldap/schema/include /usr/local/openldap/etc/openldap/schema/include /usr/local/openldap/etc/openldap/schema/# Define global ACLs to disable default read access.
# Do not enable referrals until AFTER you have a working directory# service AND an understanding of referrals.#referral ldap://
pidfile /usr/local/openldap/var/sfile /usr/local/openldap/var/
loglevel 1
#增加了⽇志功能,需修改syslog配置⽂件,在⽂件中增加⼀项:local4.* /var/log/⽇志级别定义可查相官⽅⽹站的⽂档。#1级记录的信息很多,可⽤于调试。# Load dynamic backend modules:# modulepath /usr/local/openldap/libexec/openldap# moduleload back_# moduleload back_# moduleload back_# moduleload back_# moduleload back_# moduleload back_
# Sample security restrictions# Require integrity protection (prevent hijacking)# Require 112-bit (3DES or better) encryption for updates# Require 63-bit encryption for simple bind# security ssf=1 update_ssf=112 simple_bind=64
# Sample access control policy:# Root DSE: allow anyone to read it# Subschema (sub)entry DSE: allow anyone to read it# Other DSEs:# Allow self write access# Allow authenticated users read access# Allow anonymous users to authenticate# Directives needed to implement policy:# access to ="" by * read# access to ="cn=Subschema" by * read# access to *# by self write# by users read# by anonymous auth## if no access controls are present, the default policy is:# Allow read by all## rootdn can always write!
######################################################################## ldbm database definitions#######################################################################
database bdbsuffix "dc=it,dc=com"#改成你⾃已的⽬录后缀,rootdn "cn=root,dc=example,dc=org"#设置root为管理员,与linux的root没有什么关系。# Cleartext passwords, especially for the rootdn, should# be avoid. See slappasswd(8) and (5) for details.# Use of strong authentication {MD5}mjkiuPt0wXhpxxkdiOOO+0000000AKq0by#设置root密码,⽤MD5加密。密码串⽤slappasswd -h {MD5}指令⽣成# The database directory MUST exist prior to running slapd AND
# should only be accessible by the slapd and slap tools.# Mode 700 ory /usr/local/openldap/var/openldap-data
# Indices to maintainindex objectClass eq#这⾥可根据你的需要设置相关索引,以加快查询速度。具体内容可查询官⽅⽹站管理⼿册。
配置完之后,服务器就基本配置完成了。⽤下⾯命令进⾏启动slapd没有出错信息证明服务正常启动slapd -d 1如果有问题,可以⽤上⾯的形式去看具体报错信息。可以⽤以下命令验证服务是否正常运⾏ldapsearch -x -b '' -s base '(objectclass=*)' namingContexts1.3.3 信息的录⼊⼿动录⼊⽅法第⼀步要建⽴DN:ldapadd -x -D 'cn=root,dc=example,dc=org' -Wdn:dc=example,dc=orgobjectClass:dcObjectobjectClass:organizationdc:exampleo:Corporation第⼆步建⽴RDNldapadd -x -D 'cn=root,dc=example,dc=org' -Wdn: uid=qq,dc=it,dc=comobjectClass: personobjectClass: organizationalPersonobjectClass: inetOrgPersonuid: qqcn: qqsn: qqtelephoneNumber: 138888888description: openldap testtelexNumber: tex-8888888street: my streetpostOfficeBox: postofficeboxdisplayName: qqdisplayhomePhone: home1111111mobile: mobile99999mail:qq@输⼊完之后按 Ctrl+d 结果存盘。⽂件⽅式ldapadd -x -D 'cn=root,dc=example,dc=org' -W -f 2.⽤docker部署LDAP服务器这种⽅式⽐源码安装简单多了,只要安装了docker,就可以简单搭建OpenLDAP服务器。docker实现openldap的image有
它们的⽂档在打开上⾯的⽹址可以看到。我这⾥就不详细说了。
2023年6月21日发(作者:)
LDAP协议简介以及OpenLDAP服务搭建我这篇⽂章是⾃⼰在学习LDAP的时候,为了记录下来,将⾃⼰收集的资料集合成⼀篇⽂章⽽成的仅供参考,并⾮原创。参考过的⽂章有⼀:LDAP协议简介LDAP,全称为轻量级⽬录访问协议,是⼀项开放协议,⽤于通过分层⽬录结构对数据进⾏存储与检索。LDAP是⼀种灵活得解决⽅案,适⽤于定义各类条⽬及相关性质。OpenLDAP项⽬是实现了LDAP协议的开源软件。基本LDAP数据组件属性(Attribute)LDAP系统中的数据主要以被称为属性得元素形式存储。属性在本质上属于健-值对。与其它系统不同,其中的健名称由为条⽬选定得objectClass进⾏预定义。另外,属性中的数据必须匹配属性初始定义内所定义得类型。属性不是随便定义的,需要符合⼀定规则,⽽这个规则可以通过schema制定。条⽬(Entry)单凭属性本⾝没有多少作⽤,我们必须将其与其它事物进⾏关联。在LDAP中,我们在条⽬内使⽤属性。条⽬基本上相当于属性与⼀条⽤于描述事物得名称得集合。条⽬也叫记录项,是LDAP中最基本的颗粒,就像字典中的词条,或者是数据库中的记录。通常对LDAP的添加、删除、更改、检索都是以条⽬为基本对象的。⼀个Entry就是⼀条记录,是LDAP中⼀个基本的存储单元。也可以看作是⼀个DN和⼀组属性的集合。dn:每⼀个条⽬都有⼀个唯⼀的标识名rdn:⼀般指dn逗号最左边的部分Base DN:LDAP⽬录树的最顶部DITDIT代表的是与⽂件系统类似得⼀种组织化结构,其中每个条⽬有且只有⼀个⽗条⽬,其下则可能有任意数量⼦条⽬。定义LDAP数据组件属性Attribute定义属性定义必须注明属性名称、任何其它能够⽤于引⽤该属性得名称、可以输⼊的数据类型以及其它各类元数据。该元数级能够描述此属性,告知LDAP如何对属性值进⾏排序或⽐对,同时告知其如何将其与其它属性相关联。幸运的是,⼤多数情况下我们⽆需⾃⾏定义属性,因为⼤部分LDAP实现⽅案中已经提供各类最为常⽤得属性,其它⽅案也能够导⼊现成属性。ObjectClass定义各个属性被收集在objectClass条⽬中。ObjectClass属于相关属性得简单分组,可⽤于描述特定事物。对象类是属性的集合,LDAP预想了很多⼈员组织机构中常见的对象,并将其封装成对象类。通过对象类可以⽅便的定义条⽬类型。每个条⽬可以直接继承多个对象类。对象类有三种类型:结构类型,抽象类型和辅助类型。结构类型是最基本的类型,它规定了对象实体的基本属性,每个条⽬属于且仅属于⼀个结构型对象类。抽象类型可以是结构类型或其它抽象类型⽗类,它将对象属性中共性的部分组织在⼀起,称为其它类的模板,条⽬不能直接集成抽象型对象类。辅助类型规定对象实体的扩展属性。每个条⽬⾄少有⼀个结构性对象类。SchemaobjectClass定义与属性定义两者由⼀套架构组合在⼀起,这个就是schema。就是对象类,属性分别约定了条⽬、属性、值,所有的这些构成了模式——对象类的集合。LDAP协议的衍⽣版本ldap:// 基本LDAP协议,允许对⽬录服务进⾏结构化访问ldaps:// 此衍⽣版本⽤于通过SSL/TLS实现LDAP表达。ldapi://⽤于通过IPC表达LDAP,其通常⽤于安全接⼊本地LDAP系统以实现管理⽤途.LDAP特点LDAP的结构⽤树表⽰,⽽不是⽤表格。LDAP可以很快地得到查询结果,不过在写⽅⾯,就慢得多LDAP提供了静态数据得快速查询⽅式Client/server模型:Server⽤于存储数据,Client提供操作⽬录信息树的⼯具LDAP是⼀种开放Internet标准,LDAP协议是跨平台的Interent协议Backend & Databaseldap的后台进程slapd接收、响应请求,但实际存储数据、获取数据的操作是由Backends做的,⽽数据是存放在Database中的,所以你可以看到backend和database指令是⼀样的值如bdb。⼀个backend可以有多个database instance,但是每个database的suffix和rootdn不⼀样。⽽bdb是⼀个⾼性能的⽀持事务和故障恢复的数据库后端,可以满⾜⼤部分需求。TLS&SASL分布式LDAP是以明⽂的格式通过⽹络来发送信息的,包括client访问ldap的密码,SSL/TLS的加密协议就是来保证数据传送的保密性和完整性。SASL是简单⾝份验证安全框架,它能够实现openldap客户端到服务器的⽤户验证,也就是ldapsearch,ldapmodify这些标准客户端⼯具默认尝试与LDAP服务器认证⽤户的⽅式。SASL有⼏⼤⼯业实现标准:Kerveros V5、DIGEST-MD5、EXTERNAL、PLAIN、LOGIN。LDIF(LDAP数据交换格式)LDIF是LDAP数据库信息的⼀种⽂本格式,⽤于数据的导⼊导出。LDAP Search filter搜索Filter⼀般由(attribute=value)这样的单元组成。⼆.搭建LDAP服务器这⾥我们使⽤的是OpenLDAP框架进⾏LDAP服务器的搭建。搭建⽅式有源码安装、docker搭建。apt-get install build-essential1.在Ubuntu上搭建OpenLDAP服务器 1.1 准备编译环境和依赖包apt-get install build-essential关于这个build-essential的作⽤,可以⽤apt-cache depends 'build-essential'来查看它的依赖可以看到它相关了很多编译有关的软件包apt-get install libssl-dev⽽libssl-dev 包含了openssl的include⽂件和代码库 1.2 安装openldap和berkeleyOpenLDAP默认使⽤BerkeleyDB数据库,因此需要先安装BerkeleryDB。wget /berkeley-db/ #下载BerkeleyDB压缩包wget ftp:///pub/OpenLDAP/openldap-release/ #下载openldap源码tar -zxf openldap* #解压openldaptar -zxf db* #解压berkeleyDB 1.2.1安装BerkeleyDBcd db*../dist/configure --prefix=/usr/local/berkeleydb-5.1make && make install 1.2.2安装openldap 1.2.2.1⾸先设置环境变量export BERkELEYDB_HOME="/usr/local/berkeleydb-5.1"export CPPFLAGS="-I$BERKELERYDB_HOME/include"export LDFLAGS="-L$BERKELEYDB_HOME/lib"export LD_LIBRARY_PATH="$BERKELEYDB_HOME/lib"export LDAP_HOME="/usr/local/openldap-2.4"export PATH="$PATH:$BERKELEYDB_HOME/bin:$LDAP_HOME/bin:$LDAP_HOME/sbin:$LDAP_HOME/libexec"1.2.2.2 编译安装cd openldap*./configure -prefix=/usr/local/openldap-2.4make dependmake
make install安装完成后就可以进⾏配置了1.3 OpenLDAP的基本配置1.3.1配置root密码slappassed1.3.2修改配置⽂件⽂件在/etc/openldap下,有四个⽂件,主要的是 and ,其它两个是backup⽂件。对进⾏修改。# $OpenLDAP: pkg/ldap/servers/slapd/,v 1.23.2.8 2003/05/24 23:19:14 kurt Exp $## See (5) for details on configuration options.# This file should NOT be world readable.##为了有效使⽤⽬录服务,包含相关的⽂件。注意,在包含⽂件时是要按⼀定顺序的,因为#⽂件⾥的属性存在依赖关系。如果顺序不对,服务器启动不了,⽂档间的依赖关系在⽂档#中都有说明,请仔细查看⼀下。如果懒得看也可以按我的顺序。include /usr/local/openldap/etc/openldap/schema/include /usr/local/openldap/etc/openldap/schema/include /usr/local/openldap/etc/openldap/schema/include /usr/local/openldap/etc/openldap/schema/
include /usr/local/openldap/etc/openldap/schema/
include /usr/local/openldap/etc/openldap/schema/include /usr/local/openldap/etc/openldap/schema/include /usr/local/openldap/etc/openldap/schema/# Define global ACLs to disable default read access.
# Do not enable referrals until AFTER you have a working directory# service AND an understanding of referrals.#referral ldap://
pidfile /usr/local/openldap/var/sfile /usr/local/openldap/var/
loglevel 1
#增加了⽇志功能,需修改syslog配置⽂件,在⽂件中增加⼀项:local4.* /var/log/⽇志级别定义可查相官⽅⽹站的⽂档。#1级记录的信息很多,可⽤于调试。# Load dynamic backend modules:# modulepath /usr/local/openldap/libexec/openldap# moduleload back_# moduleload back_# moduleload back_# moduleload back_# moduleload back_# moduleload back_
# Sample security restrictions# Require integrity protection (prevent hijacking)# Require 112-bit (3DES or better) encryption for updates# Require 63-bit encryption for simple bind# security ssf=1 update_ssf=112 simple_bind=64
# Sample access control policy:# Root DSE: allow anyone to read it# Subschema (sub)entry DSE: allow anyone to read it# Other DSEs:# Allow self write access# Allow authenticated users read access# Allow anonymous users to authenticate# Directives needed to implement policy:# access to ="" by * read# access to ="cn=Subschema" by * read# access to *# by self write# by users read# by anonymous auth## if no access controls are present, the default policy is:# Allow read by all## rootdn can always write!
######################################################################## ldbm database definitions#######################################################################
database bdbsuffix "dc=it,dc=com"#改成你⾃已的⽬录后缀,rootdn "cn=root,dc=example,dc=org"#设置root为管理员,与linux的root没有什么关系。# Cleartext passwords, especially for the rootdn, should# be avoid. See slappasswd(8) and (5) for details.# Use of strong authentication {MD5}mjkiuPt0wXhpxxkdiOOO+0000000AKq0by#设置root密码,⽤MD5加密。密码串⽤slappasswd -h {MD5}指令⽣成# The database directory MUST exist prior to running slapd AND
# should only be accessible by the slapd and slap tools.# Mode 700 ory /usr/local/openldap/var/openldap-data
# Indices to maintainindex objectClass eq#这⾥可根据你的需要设置相关索引,以加快查询速度。具体内容可查询官⽅⽹站管理⼿册。
配置完之后,服务器就基本配置完成了。⽤下⾯命令进⾏启动slapd没有出错信息证明服务正常启动slapd -d 1如果有问题,可以⽤上⾯的形式去看具体报错信息。可以⽤以下命令验证服务是否正常运⾏ldapsearch -x -b '' -s base '(objectclass=*)' namingContexts1.3.3 信息的录⼊⼿动录⼊⽅法第⼀步要建⽴DN:ldapadd -x -D 'cn=root,dc=example,dc=org' -Wdn:dc=example,dc=orgobjectClass:dcObjectobjectClass:organizationdc:exampleo:Corporation第⼆步建⽴RDNldapadd -x -D 'cn=root,dc=example,dc=org' -Wdn: uid=qq,dc=it,dc=comobjectClass: personobjectClass: organizationalPersonobjectClass: inetOrgPersonuid: qqcn: qqsn: qqtelephoneNumber: 138888888description: openldap testtelexNumber: tex-8888888street: my streetpostOfficeBox: postofficeboxdisplayName: qqdisplayhomePhone: home1111111mobile: mobile99999mail:qq@输⼊完之后按 Ctrl+d 结果存盘。⽂件⽅式ldapadd -x -D 'cn=root,dc=example,dc=org' -W -f 2.⽤docker部署LDAP服务器这种⽅式⽐源码安装简单多了,只要安装了docker,就可以简单搭建OpenLDAP服务器。docker实现openldap的image有
它们的⽂档在打开上⾯的⽹址可以看到。我这⾥就不详细说了。
发布评论