Openldap基于digest-md5方式的SASL认证配置
1. openldap编译
如果需要openldap支持SASL认证,需要在编译时加上–enable-spasswd选项
安装完cyrus-sasl,openssl(可选),BDB包后执行:
|
1
2
|
$ sudo ldconfig
$ export LD_LIBRARY_PATH="/usr/local/lib:/usr/local/BerkeleyDB.4.8/lib:/lib/i386-linux-gnu/"
|
注:
/usr/local/lib为 libsasl2.so.2所在目录
/usr/local/BerkeleyDB.4.8/lib为 libdb-4.8.so所在目录
/lib/i386-linux-gnu/为 libssl.so.1.0.0所在目录
|
1
|
$ ./configure CPPFLAGS=-I/usr/local/BerkeleyDB.4.8/include --enable-spasswd
|
安装完毕后
|
1
|
$ ldapsearch -x -s base -LLL supportedSASLMechanisms
|
输出:
|
1
2
3
4
|
dn:
supportedSASLMechanisms: DIGEST-MD5
supportedSASLMechanisms: CRAM-MD5
supportedSASLMechanisms: OTP
|
可以看到默认已经提供DIGEST-MD5方式 的SASL机制。
2. slapd.conf配置
|
1
|
$ cat /usr/local/etc/openldap/slapd.conf | grep -v ^#
|
配置输出:
|
1
2
3
4
5
6
7
8
9
10
11
12
|
include /usr/local/etc/openldap/schema/core.schema
include /usr/local/etc/openldap/schema/asterisk.schema
pidfile /usr/local/var/run/slapd.pid
argsfile /usr/local/var/run/slapd.args
database ldif
suffix "ou=accounts,dc=com"
rootdn "uid=manager,cn=digest-md5,cn=auth"
authz-regexp
uid=([^,]*),cn=digest-md5,cn=auth
AstAccountName=$1,ou=accounts,dc=com
password-hash {CLEARTEXT}
directory /usr/local/var/openldap-data
|
2.1 用户密码相关配置
参考http://www.openldap.org/doc/admin24/sasl.html#DIGEST-MD5
This section describes the use of the SASL DIGEST-MD5 mechanism using secrets stored either in the directory itself or in Cyrus SASL’s own database.
这里提到了两种管理用户密码的方式
a.对于第一种:
To use secrets stored in sasldb, simply add users with the saslpasswd2 command:
|
1
|
saslpasswd2 -c <username>
|
The passwords for such users must be managed with the saslpasswd2 command.
b.对于第二种:
To use secrets stored in the LDAP directory, place plaintext passwords in the userPassword attribute. It will be necessary to add an option to slapd.conf to make sure that passwords set using the LDAP Password Modify Operation are stored in plaintext:
|
1
|
password-hash {CLEARTEXT}
|
Passwords stored in this way can be managed either with ldappasswd(1) or by simply modifying the userPassword attribute. Regardless of where the passwords are stored, a mapping will be needed from authentication request DN to user’s DN.
在 这里,我采用了第二种。根据文档说明,这种方式的密码是存在userPassword属性中的,因此每个需要进行认证的用户都必须有一个 userPassword属性。并且通过在slapd.conf文件中通过指定password-hash {CLEARTEXT}来确保密码存储为明文的文本格式。
由于每个认证用户都必须有一个userPassword属性,因此对应的条目必须具有一个含有userPassword 属性的objectclass,我采用 simpleSecurityObject这个objectclass,这是一个辅助objectclass(区别于structual objectclass),仅包含一个必要属性userPassword.
参见core.schema:
|
1
2
3
4
|
objectclass ( 0.9.2342.19200300.100.4.19 NAME 'simpleSecurityObject'
DESC 'RFC1274: simple security object'
SUP top AUXILIARY
MUST userPassword )
|
因此可以将管理员用户的ldif数据文件配置为:
manager.ldif:
|
1
2
3
4
5
6
7
|
dn: ou=accounts,dc=com
ou: accounts
objectclass: organizationalUnit
dn: AstAccountName=manager,ou=accounts,dc=com
userPassword: grandstream
objectClass: AsteriskAccount
objectClass: simpleSecurityObject
|
2.2 认证ID与实际条目映射
参考http://www.openldap.org/doc/admin24/sasl.html#Mapping%20Authentication%20Identities
The DIGEST-MD5 mechanism produces authentication IDs of the form:
|
1
|
uid=<username>,cn=<realm>,cn=digest-md5,cn=auth
|
If the default realm is used,the realm name is omitted from the ID, giving:
|
1
|
uid=<username>,cn=digest-md5,cn=auth
|
对于我们的例子,配置管理员认证ID为:
|
1
|
rootdn "uid=manager,cn=digest-md5,cn=auth"
|
认证ID与实际的LDAP条目之间有两种映射方式:direct mapping和search-based mappings.
Where possible, direct mapping of the authentication request DN to the user’s DN is generally recommended. Aside from avoiding the expense of searching for the user’s DN, it allows mapping to DNs which refer to entries not held by this server.
基于以上原因,采用direct mapping方式。
The LDAP administrator will need to tell the slapd server how to map an authentication request DN to a user’s authentication DN. This is done by adding one or more authz-regexp directives to the slapd.conf(5) file. This directive takes two arguments:
|
1
|
authz-regexp <search pattern> <replacement pattern>
|
Suppose the authentication request DN is written as:
|
1
|
uid=adamson,cn=example.com,cn=gssapi,cn=auth
|
and the user’s actual LDAP entry is:
|
1
|
uid=adamson,ou=people,dc=example,dc=com
|
then the following authz-regexp directive in slapd.conf(5) would provide for direct mapping.
|
1
2
3
|
authz-regexp
uid=([^,]*),cn=example.com,cn=gssapi,cn=auth
uid=$1,ou=people,dc=example,dc=com
|
对于我们的例子则是:
|
1
2
3
|
authz-regexp
uid=([^,]*),cn=digest-md5,cn=auth
AstAccountName=$1,ou=accounts,dc=com
|
依据正则表达式的语法,([^,]*)匹配直到遇到逗号之前的字符,$1反向引用([^,]*)中的内容。
3 导入管理员用户信息
采 用这种方式时认证用户包括管理员的密码都是存储在ldap目录中的,也就是说,管理员本身的信息也是需要导入的,而在这种方式下rootdn的配置不满足 suffix的要求,不能设置rootpw选项,也就不能绑定管理员用户使用ldapadd命令进行管理员信息导入了,那管理员本身的信息如何导入呢?可 以通过以下命令:
|
1
|
$ slapadd -l manager.ldif
|
4 数据操作
开启openldap服务器
|
1
|
$ /usr/local/libexec/slapd&
|
导入ldif数据文件,添加数据
|
1
|
$ ldapadd -Y DIGEST-MD5 -U manager -f gs_phonebook.ldif -w grandstream
|
manager:管理员用户的DN为AstAccountName=manager,ou=accounts,dc=com,根据映射关系,对应的uid就是这里的AstAccountName属性的值manager。
grandstream:对应userPassword属性的值,即管理员密码。
gs_phonebook.ldif:要导入的ldif数据文件。
查询数据
|
1
|
$ ldapsearch -Y DiGEST-MD5 -U manager -w grandstream -b ou=accounts,dc=com
|
删除数据
|
1
|
$ ldapdelete -Y DiGEST-MD5 -U manager -w grandstream <DN1> <DN2> …<DNn>
|
或递归删除
|
1
|
$ ldapdelete -Y DiGEST-MD5 -U manager -w grandstream -r <BaseDN>
|
Openldap基于digest-md5方式的SASL认证配置的更多相关文章
- ASP.NET WebApi 基于分布式Session方式实现Token签名认证
一.课程介绍 明人不说暗话,跟着阿笨一起学玩WebApi!开发提供数据的WebApi服务,最重要的是数据的安全性.那么对于我们来说,如何确保数据的安全将会是需要思考的问题.在ASP.NETWebSer ...
- ASP.NET WebApi 基于分布式Session方式实现Token签名认证(发布版)
一.课程介绍 明人不说暗话,跟着阿笨一起学玩WebApi!开发提供数据的WebApi服务,最重要的是数据的安全性.那么对于我们来说,如何确保数据的安全将会是需要思考的问题.在ASP.NETWebSer ...
- Kafka - SASL认证
kafka SASL认证配置 1.找到kafka安装根目录,在config文件夹下创建kafka_server_jaas.conf,写入 KafkaServer { org.apache.kafka. ...
- Spring Security认证配置(一)
学习本章之前,可以先了解下上篇 Spring Security基本配置. 本篇主要讲述Spring Security基于表单,自定义用户认证配置(上篇中的配置,本篇将不再阐述).一共分为三步: 1.处 ...
- svn使用openldap验证apache访问方式
启用svn服务器的sasl验证机制 1.安装cyrus-sasl认证包 # yum install -y *sasl* # rpm -qa|grep sasl cyrus-sasl-2.1.23-15 ...
- XEP-0078:非SASL认证
XEP-0078:非SASL认证 抽象: 这个文件规定了使用Jabber的Jabber的服务器和服务认证的协议:智商:AUTH命名空间.注意哦:本文规定的协议,取而代之的SASL认证的被取代,如RFC ...
- kafka SASL认证介绍及自定义SASL PLAIN认证功能
目录 kafka 2.x用户认证方式小结 SASL/PLAIN实例(配置及客户端) broker配置 客户端配置 自定义SASL/PLAIN认证(二次开发) kafka2新的callback接口介绍 ...
- 基于token的多平台身份认证架构设计
基于token的多平台身份认证架构设计 1 概述 在存在账号体系的信息系统中,对身份的鉴定是非常重要的事情. 随着移动互联网时代到来,客户端的类型越来越多, 逐渐出现了 一个服务器,N个客户端的格 ...
- 谈谈基于OAuth 2.0的第三方认证 [下篇]
从安全的角度来讲,<中篇>介绍的Implicit类型的Authorization Grant存在这样的两个问题:其一,授权服务器没有对客户端应用进行认证,因为获取Access Token的 ...
随机推荐
- poj_3987 Trie图
题目大意 有N个病毒,病毒由A-Z字母构成,N个病毒各不相同.给出一段程序P,由A-Z字母构成,若病毒在在程序P或者P的逆转字符串P'中存在,则该程序P被该病毒感染.求出程序P被多少种病毒感染. 题目 ...
- bigpipe&bigrender
bigpipe: 先输出页面的整体布局,在按块输出输出页面的每个部分.这样可以让服务器的运算.网络的传输和浏览器的渲染并行.适用于服务器运算较慢的时候. bigrender: 主要在浏览器端,先将字符 ...
- $.data(elem, key, val) 和 elem.data(key, val)
var div1 = $("div"), div2 = $("div"); 1. div1.data("key", &quo ...
- COGS 1224. [SHOI2002]百事世界杯之旅(期望概率)
COGS 1224. [SHOI2002]百事世界杯之旅 ★ 输入文件:pepsi.in 输出文件:pepsi.out 简单对比 时间限制:1 s 内存限制:128 MB [问题描述] ...
- 关于Memcached反射型DRDoS攻击分析
一.Memcached反射攻击原理 1.反射DRDoS攻击: DRDoS攻击时DoS攻击的一种,DoS是指通过发送或引发大量的资源消耗导致服务不可用的一种攻击方式,中文称之为拒绝服务攻击.DRDoS是 ...
- Service简介 demos
extends:http://blog.csdn.net/ithomer/article/details/7364024 一. Service简介 Service是android 系统中的四大组件之一 ...
- springMVC各个包下的作用
spring的jar各包作用spring.jar是包含有完整发布的单个jar包,spring.jar中包含除了spring-mock.jar里所包含的内容外其它所有jar包的内容,因为只有在开发环境下 ...
- 使用Yii2中dropdownlist实现地区三级联动的例子
原文:http://www.yiichina.com/code/636 <?php use yii\helpers\Url; use yii\widgets\ActiveForm; use yi ...
- Yii数据库子查询嵌入select中,而不是where条件语句中
$subQuery = (new Query())->select('COUNT(*)')->from('user'); // SELECT `id`, (SELECT COUNT(*) ...
- Windows 7 Ultimate(旗舰版)SP1 32/64位官方原版下载地址
MSDN于2011年5月12日,最新发布简体中文Windows 7 Ultimate 旗舰版 SP1 DVD镜像安装包,分32位和64位两个版本.最新发行代号分别是:677486(32位),67740 ...