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>

时间: 2024-10-26 23:40:26

Openldap基于digest-md5方式的SASL认证配置的相关文章

linux(CentOS)之postfix服务器sasl认证和基于cyrus-sasl访问控制

一.为postfix开启基于cyrus-sasl的认证功能. 修改/etc/sysconfig/saslauthd文件中的 MECH=pam 改为 MECH=shadow 启动saslauthd service saslauthd start 验证是否能够使用系统上的账号密码来进行认证 testsaslauthd -u user -p passwd 若认证通过,则提示:0,OK,"Success", 认证失败会提示:0,NO,"authentication failed&qu

邮件服务器(三)——centos6.5安装配置dovecot并实现sasl认证功能

一.安装配置dovecot 1.dovecot简介 Dovecot 是一个开源的 IMAP 和 POP3 邮件服务器,支持四种协议:pop3(110/tcp), imap4(143/tcp), pop3s, imaps.POP / IMAP 是 MUA 从邮件服务器中读取邮件时使用的协议.其中,与 POP3 是从邮件服务器中下载邮件存起来,IMAP4 则是将邮件留在服务器端直接对邮件进行管理.操作. 2.安装dovecot # yum install dovecot -y 3.配置dovecot

谈谈基于OAuth 2.0的第三方认证 [下篇]

从安全的角度来讲,<中篇> 介绍的Implicit类型的Authorization Grant存在这样的两个问题:其一,授权服务器没有对客户端应用进行认证,因为获取Access Token的请求只提供了客户端应用的ClientID而没有提供其ClientSecret:其二,Access Token是授权服务器单独颁发给客户端应用的,照理说对于其他人(包括拥有被访问资源的授权者)应该是不可见的.Authorization Code类型的Authorization Grant很好地解决了这两个问题

ISACA率先将技能网络安全培训与基于实际操作的考试和认证相结合

伊利诺伊州罗林梅多斯--(美国商业资讯)--国际信息系统审计协会(ISACA)今天宣布推出全新网络安全认证组合,首次将技能培训与基于实际操作的考试和认证相结合.这七项新的Cybersecurity Nexus (CSX)认证有助于专业人士在不断变化的领域中规划并发展其职业,同时帮助雇主弥补技能缺口.IT和商业技能培训领域的领先提供商Global Knowledge是ISACA首家授权提供CSX课程组合的培训机构,该课程组合将于2015年第三季度开放.国际信息系统审计协会与美国信息安全大会(RSA

基于token的多平台身份认证架构设计

基于token的多平台身份认证架构设计 1   概述 在存在账号体系的信息系统中,对身份的鉴定是非常重要的事情. 随着移动互联网时代到来,客户端的类型越来越多, 逐渐出现了 一个服务器,N个客户端的格局 . 不同的客户端产生了不同的用户使用场景,这些场景: 有不同的环境安全威胁 不同的会话生存周期 不同的用户权限控制体系 不同级别的接口调用方式 综上所述,它们的身份认证方式也存在一定的区别. 本文将使用一定的篇幅对这些场景进行一些分析和梳理工作. 2   使用场景 下面是一些在IT服务常见的一些

ASP.NET Core WebApi基于Redis实现Token接口安全认证

一.课程介绍 明人不说暗话,跟着阿笨一起玩WebApi!开发提供数据的WebApi服务,最重要的是数据的安全性.那么对于我们来说,如何确保数据的安全将会是需要思考的问题.在ASP.NET WebService服务中可以通过SoapHead验证机制来实现,那么在ASP.NET Core WebApi中我们应该如何保证我们的接口安全呢?  近年来RESTful API开始风靡,使用HTTP header来传递认证令牌似乎变得理所应当,而单页应用(SPA).前后端分离架构似乎正在促成越来越多的WEB应

掌握基于 JWT 实现的 Token 身份认证

引语 最近正好在独立开发一个后台管理系统,涉及到了基于Token的身份认证,自己边学边用边做整理和总结,对基于JWT实现的Token的身份认证做一次相对比较全面的认识. 一.基于session的跨域身份验证 Internet服务无法与用户身份验证分开.一般过程如下. 用户向服务器发送用户名和密码. 验证服务器后,相关数据(如用户角色,登录时间等)将保存在当前会话中. 服务器向用户返回session_id,session信息都会写入到用户的Cookie. 用户的每个后续请求都将通过在Cookie中

【Quartz】基于Spring注解方式配置Quartz

林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka         在上讲[Quartz]Spring3.2.9+Quqrtz2.2.1实现定时实例中,我们使用了XML的方式来配置Quartz定时任务,虽然比用API的方式简便多了,但是Spring还支持基本注解的方式来配置.这样做不仅更加简单,而且代码量也更加少了. 新建一个Java工程,导入要用到的包,Spring3.2.Quartz2.2.1.aopalliance-1.0.jar.co

spring与hibernate整合配置基于Annotation注解方式管理实务

1.配置数据源 数据库连接基本信息存放到properties文件中,因此先加载properties文件 1 <!-- jdbc连接信息 --> 2 <context:property-placeholder 3 location="classpath:io/shuqi/ssh/spring/transactionalAnnotation/jdbc.properties"/> 使用DBCP数据源配置xml如下 1 <!-- dbcp数据源配置 -->