SASL的学习笔记(转贴)_yuanyuan_186的博客-程序员ITS304

分类: LINUX

(1) 什么是SASL和Cyrus SASL

SASL (Simple Authentication Security Layer) is an Internet standards-track method for remote computers to authenticate. The Cyrus SASL library makes supporting various SASL mechanisms easy for both client and server writers.

The Cyrus project is the implementation of an enterprise mail system by the Carnegie Mellon University Computing Services Department. We are interested in scalable, easy to administer systems.

(2) Cyrus SASL组成部分

SASL是一个胶合(glue)库,通过这个库把应用层  形式多样的认证系统整合在一起。这有点类似于 PAM,但是后者是认证方式,决定什么人可以访问什么服务而SASL是认证过程,侧重于信任建立过程,这个过程可以调用PAM来建立信任关系。

应用层

应用层是SASL库的使用者既可以是客户应用程序,也可以是服务应用程序,或者两者都是(在代理的情况下)。应用层负责SASL认证协商的连线和传达,具体的认证交给SASL库应用层的例子有Cyrus IMAPd,OpenLDAP,Sendmail,Mutt,sieveshell,cyradm等

SASL胶合层(Glue Layer)

负责如下的工作:
加载插件;
从应用层获取必要的认证属性,以选择适当的认证机制(或者限制可用的认证机制);
给应用层列出可用的插件;
为特定的认证请求选择最好的认证机制;
在应用层和被选的认证机制间路由认证数据;
为应用层提供SASL协商信息,比如认证的用户,请求的认证ID,安全层的强度等。

SASL还提供一些别的服务给应用层和插件,一些是常用的工具,比如MIME Base64编码解码,随机数生成;还有一些是和认证相关的,比如口令验证服务。

最后,SASL还允许应用层和认证机制层访问两种特殊类型的插件:Auxiliary Property或者 auxprop插件,它提供了简单的数据库接口,可返回用户属性,比如口令,home目录,邮件地址等;Username Canoicalization,提供了一个站点相关的用户正名服务(使用户名称规范化),或者其他的任务.

SASL认证机制(SASL Mechanisms)

有三种类型的机制:
Password Verification Mechanisms - 接收远程的口令,传递给SASL胶合层,由口令验证器验证,这种机制的例子有PLAIN
Shared Secret Mechanisms - 不是直接传递口令明文,而是服务方发起一个认证,客户证明自己知道这个口令,这需要服务方和客户方都保存有口令.这种机制的例子有CRAM-MD5,DIGEST-MD5以及SRP
Kerberos Mechanisms - 使用信任的第三方来验证客户。

Auxiliary Property(auxprop)

为胶合层提供数据库服务,Cyrus SASL支持两种auxprop插件:SASLdb和SQL。auxprop通常用于共享密码机制。

Username Canonicalization

不是很常用,一般用于为应用层提供用户的规范名称。

口令验证服务

根据用户名和口令的明文,判断是否验证正确。口令验证服务器通过SASL选项pwcheck_method来选择,有两类主要的口令验证器:
auxprop - 使用auxprop插件获取口令,比较和用户提供的口令是否相符;
saslauthd - 呼叫saslauthd服务进程,验证用户。saslauthd支持很多识别方式,比如PAM,LDAP,Kerberos数据库等

(3) SASL 术语

认证ID(Authentication identifier)和授权ID(Authorization identifier)

userid(user id, authorization id) - 用户ID,授权ID,说明执行操作的授权个体。
authid(authentication id) - 认证ID,证明某人确系某人。

比如小王休假,小李暂时接替他的工作。那么为了有小王的权限,小李认证时使用自己的帐号,即authid,执行具体的操作时需要有小王的user id,这样才能做他的工作。

一般userid和authid是相同的。

Realms

A realm is an abstract set of users and certain mechanisms authenticate users in a certain realm.

最简单的情况是单服务单机器的情况,realm就是FQDN(Full-qualified domain name),如果应用层没有提供,则很多SASL机制采用默认的。

如果要多机共享口令,则通常选择域名,比如CMU.EDU。单个站点也可以支持多个不同的realms。为了把不同realm的用户加入sasldb,可以在saslpasswd2命令中用u选项,SQL插件通过宏'%r'在查询串中加入realm。

(4) SASL工作流程

PLAIN机制,sasl_checkpass(),以及明文口令

auxprop - 根据auxiliary property插件提供的userPassword属性验证用户,数据库通常保存在/etc/sasldb2;
saslauthd - 通过saslauthd验证用户,-a选项指示saslauthd的具体机制,-n指示saslauthd的线程数;
Courier-IMAP - 通过Courier-IMAP的authdaemond检查口令,类似于saslauthd;
pwcheck - 使用独立辅助服务进程来验证
write your own - 自己写一个验证方式。

共享密码机制

CRAM-MD5和DIGEST-MD5使用这种机制,注意,这些方式不能使用saslauthd。如果不想用这些方式,可从插件目录移走这些插件,或者用mech_list禁用它们。

为了简单起见,SASL库把口令的明文形式保存在/etc/sasldb2中。

Kerberos mechanisms

The Cyrus SASL library also comes with two mechanisms that make use of Kerberos: KERBEROS_V4, which should be able to use any Kerberos v4 implementation, and GSSAPI (tested against MIT Kerberos 5, Heimdal Kerberos 5 and CyberSafe Kerberos 5). These mechanisms make use of the kerberos infrastructure and thus have no password database.
Applications that wish to use a kerberos mechanism will need access to a service key, stored either in a "srvtab" file (Kerberos 4) or a "keytab" file (Kerberos 5). Currently, the keytab file location is not configurable and defaults to the system default (probably /etc/krb5.keytab).

The Kerberos 4 srvtab file location is configurable; by default it is /etc/srvtab, but this is modifiable by the "srvtab" option. Different SASL applications can use different srvtab files.

A SASL application must be able to read its srvtab or keytab file.

OTP机制和基于OPIE的OTP

The Cyrus SASL library also supports the One-Time-Password (OTP) mechanism. This mechanism is similar to CRAM-MD5 and DIGEST-MD5 in that is uses a shared secret and a challenge/response exchange. However, OTP is more secure than the other shared secret mechanisms in that the secret is used to generate a sequence of one-time (single use) passwords which prevents reply attacks, and that secret need not be stored on the system. These one-time passwords are stored in the /etc/sasldb2 database. See the Shared secrets mechanisms section for a discussion of the /etc/sasldb2 database.

For sites with an existing OTP infrastructure using OPIE, Cyrus SASL can be configured to use OPIE v2.4 instead of using its own database and server-side routines. OPIE should be configured with the --disable-user-locking option if the SASL server application will not be running as "root".
OPIE uses its own "opiekeys" database for storing the data necessary for generating the server challenges. The location of the opiekeys file is configurable in SASL; by default it is /etc/opiekeys, but this is modifiable by the "opiekeys" option.

A SASL server application must be able to read and write the opiekeys file.

(5) 如何配置选项

缺省配置文件保存在/usr/lib/sasl2/App.conf里,这里App.conf为应用层名字,比如Sendmail为/usr/lib/sasl2/Sendmail.conf

标准的Cyrus SASL配置文件类似于:

srvtab: /var/app/srvtag
pwcheck_method: saslauthd

应用层可重新定义SASL库的选项,这因应用层而异,比如Cyrus imapd保存配置文件为/etc/imapd.conf。

(6) Cyrus SASL 测试

Cyrus SASL库带了两个测试程序:sasl2-sample-server和sasl2-samle-client,分别对应着服务程序和客户程序,可对SASL的配置进行测试。两个程序都带了三个参数:

-p TCP监听或者连接的端口号,缺省为12345
-s 服务名称,缺省为rcmd
-m 认证的机制

此外sasl2-sample-client还要求有一个服务程序主机名称或者IP地址的参数。

首先我们给测试服务程序提供一个配置文件,sample.conf,保存在/usr/lib/sasl2目录下,内容如下:

pwcheck_method: auxprop
auxprop_plugin: sasldb
mech_list: plain login ntlm cram-md5 digest-md5

然后我们给sasl2db(在/etc/sasldb2)添加测试帐号,比如marchday:

[[email protected] sasl2]# saslpasswd2 -c marchday
Password: 
Again (for verification): 

然后我们启动服务程序:

$ sasl2-sample-server -p 9000

打开另一个终端窗口,进行测试:

$ sasl2-sample-client -p 9000 -m PLAIN localhost

如果没别的问题,应该可以看到successful authentication。^_^

你还可以测试别的Mechanisms,这里就不再举例了。

参考资料:
http://www.sendmail.org/~ca/email/cyrus/sysadmin.html

http://asg.web.cmu.edu/sasl/
Cyrus SASL Library Documatation

以Sendmail为例:

应用程序------>SASL 为客户服务的配置/usr/lib/sasl2/Sendmail.conf
       pwcheck_method:pam
       pam---->/etc/pam.d/smtp.sendmail
                     ---->
                      #%PAM-1.0
           auth       required     pam_stack.so service=system-auth
           account    required     pam_stack.so service=system-auth
为APP提供选择具体的认证方法的机会,认证中介、认证代理....
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/yuanyuan_186/article/details/8743639

智能推荐

flyway遇到的问题Caused by: java.lang.ClassNotFoundException: org.flywaydb.core.api.callback.FlywayCallbac_jalen_zh的博客-程序员ITS304

问题环境是springboot2.1.8+flyway6.0.4,尝试编译出错,异常堆栈的信息是找不到flywaycallback类解决过程1、flywaycallback找不到,导致org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration$FlywayConfiguration这个bean创建失败...

使用lua语言做高并发限流_shecanwin的博客-程序员ITS304

lua语言介绍       Lua[1]  是一个小巧的脚本语言。是巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de Janeiro)里的一个研究小组,由Roberto Ierusalimschy、Waldemar Celes 和 Luiz Henrique de Figueiredo所组成并于1993年开发。 其设计目的是为了嵌入

简述微信砍价小程序运营新玩法_muyuxiaochengxun的博客-程序员ITS304

  砍价小程序日渐火爆,被越来越多的商家所利用以此来获得更多的用户和产品的盈利。如此好的优质的营销工具,要如何去经营呢?接下来就给大家介绍一下关于微信砍价小程序运营新玩法?感兴趣的可以和木鱼小铺(https://www.muyu007.cn)一起来看看。    1.内容营销预热,推广店铺    微信公众号是小程序推广引流的方式之一,主要是内容营销。所以商家可以结合微信公众号的文章内容来为小程序商城砍价活动进行预热,让用户可以通过内容来了解到线下店铺的环境、商品以及购买的优惠力度,吸引客户进入

matplotlib折线图及柱状图绘制_if shining的博客-程序员ITS304

python-matplotlib折线图及柱状图绘制一、折线图绘制二、柱状图绘制一、折线图绘制# 折线图: matplotlib.plot(横坐标,纵坐标,颜色,lw=线条宽度)# 1.导入numpy,matplotlib模块import numpy as npimport matplotlib.pyplot as plt# 2.定义各个点的横纵坐标x = np.array([1,2,3,4,5,6,7,8])y = np.array([3,5,9,2,7,6,3,8])# 3.将参数传入

SQL server 学习记录(一)_Damon_Code的博客-程序员ITS304

1、创建表create table(id int,name char(10))2、删除表中数据:delete tablename;  直接删除 数据库 数据、结构、日志  drop database;  删除表 drop tablename3、把表数据插入到另一个表    3.1:如果要插入目标表不存在: select * into 目标表 from 表 where …    3....

FPGA的学习:PLL-IP核的调用_石小舟的博客-程序员ITS304

锁相环是最常用的IP核之一,其性能强大,可以对输入到FPGA的时钟信号进行任意分频、倍频、相位调整、占空比调整,从而输出一个期望时钟。其基本原理如下:

随便推点

根据经纬度计算两点之间的距离_csdn_ss1991的博客-程序员ITS304_根据经纬度计算两点距离

package com.bandweaver.tunnel.common.platform.util;import java.math.BigDecimal;import javafx.geometry.Point2D;public class GPSUtil { private static final double EARTH_RADIUS = 6378137;// 赤道半...

基于python的大数据分析基础及实战 百度云_《基于PYTHON的大数据分析基础及实战》余本国著【摘要 书评 在线阅读】-苏宁易购图书..._weixin_39805195的博客-程序员ITS304

部分基础篇章Python语言基础/21.0引子/21.1工欲善其事,必先利其器(安装Python)/31.2学跑得先学走(语法基础)/91.3程序结构/111.3.1HelloWorld!/111.3.2运算符介绍/121.3.3顺序结构/141.3.4判断结构/171.3.5循环结构/181.3.6异常/201.4函数/241.4.1基本函数结构/241.4.2参数结构/251.4.3回调函数/...

深圳大学计算机与软件学院哪个校区,2021年深圳大学有几个校区,大一新生在哪个校区..._清溪-南柯的博客-程序员ITS304

很多深圳大学新生报到之前都有很多疑问,其中一个疑问就是深圳大学有几个校区,大一新生在哪个校区。本文主要为大家介绍关于2020年深圳大学的介绍,深圳大学招生各个专业目录、深圳大学新生在哪个校区的知识。一、深圳大学校区介绍深圳大学现有粤海、沧海、丽湖、罗湖四个校区,校园总面积2.72平方公里。学校教学资源丰富,科研设施齐备。校园总建筑面积146.9万平方米,教学、科研仪器设备总值28亿元。图书馆馆舍5...

python 如果没有该key值置为空,SECRET_KEY设置不能为空||可在Settings.py中找到_研究所的鹏鹏博士的博客-程序员ITS304

I tried to find this bug, but don't know how to solve it.I kept getting error message "The SECRET_KEY setting must not be empty." when executing populate_rango.pyI have checked on settings.py and the ...

Linux命令详解:md5sum 命令_morgan363的博客-程序员ITS304_md5命令

md5sum命令采用MD5报文摘要算法(128位)计算和检查文件的校验和。MD5算法常常被用来验证网络文件传输的完整性,防止文件被人篡改。MD5全称是报文摘要算法(Message-Digest Algorithm 5),此算法对任意长度的信息逐位进行计算,产生一个二进制长度为128位(十六进制长度就是32位)的“指纹”(或称“报文摘要”),不同的文件产生相 同的报文摘要的可能性是非常非常之小的。

关于h5中的fetch方法解读(小结)_mengzhengjie的博客-程序员ITS304

https://www.jb51.net/html5/586989.htmlhttps://segmentfault.com/a/1190000011973904Fetch概念fetch身为H5中的一个新对象,他的诞生,是为了取代ajax的存在而出现,主要目的仅仅只是为了结合ServiceWorkers,来达到以下优化:优化离线体验 保持可扩展性当然如果ServiceWorke...

推荐文章

热门文章

相关标签