http://blog.sina.com.cn/s/blog_7695e9f40100pnpa.html

Cyrus SASL介绍

1. 综述

这篇文档讲述的是系统管理员配置SASL的方法,其中详细的描述了系统管理员如何利Cyrus SASL库来安装一个服务。

2. SASL 概念

SASL的全称是the Simple Authentication and Security Layer。它的机制是对协议执行验证。如果有某种f服务(如SMTP或IMAP)使用了SASL,使用这种协议的应用程序之间将会共享代码。一些明显使用SASL的应用程序有sendmail( 8.10.0版本以后)和Cyrus imapd(1.6.0版本以后)。

使用SASL库的应用程序之间将会告诉彼此如何完成 SASL协议的改变,并且告诉改变后的结果。

SASL只是一个框架,特定SASL机制控制着准确地协议改变。如果有n个协议使用m种不同的认证方式,SASL试图只用n+m种说明写入SASL库,并不需要写入n*m种,而且只要第一次写入,应用程序就可以运用SASl来执行服务。

3. 认证和授权标志符

"authorization identifier","authentication identifer"是不同的概念,我们需要熟悉两者之间的不同。

userid (user id, authorization id)

userid是应用程序用来核对可用选项的标识符。如,在unix系统,用户“bovik”可以用来写入“/home/bovik” 和它的子目录,但是不允许写入”/etc”。

authid (authentication id)

“authentication”是用来被核对标志符。如,”bovik”的密码是“qqqq”,系统会验证任何知道“bovik”的密码为“qqqq”的登录者。这样一个用户担当另一个用户的角色是容易被验证的。示例:Harry正在度假,他让他的学生jane来帮他查看他的邮箱。他可以让jane担当他的角色,jane只需要他的id和密码验证即可,但是需要被“bovik”用户授权。这样jane通过“jane” id、jane的密码和“bovik”用户的授权就可以登录邮件系统。

应用程序能够设置它们拥有的代理权限;默认,SASL库允许相同的用户去代理其他的用户(这些用户是必须是userid,authid)。

4. 领域

Cyrus SASL库支持领域的定义。一个领域是指用户和在一个特定领域,特定机制的认证用户的抽象集。

以单个机器的单个服务的最简单的案例中,领域可以描述成服务的域名。如果应用程序没有具体制定SASL的领域,大部分机制默认采用这用方法。

如果一个站点希望在多台机器之间分享的密码,但可以选择认证的领域作为域名,如“CMU.EDU”。另一方面,为了防止当一台机器的不安全,使整个网站的安全受到连累,每台服务器可以有它自己的领域。某些机制迫使用户(客户端)手动配置他们所处什的领域,使得用户认证更加坚固。

一个单一的站点可能支持多个不同的领域,这可能会造成应用程序混乱,但应用程序并不希望如此。你需要确保应用程序支持被添加不同领域的用户到sasldb,并需要设置saslpasswd。

Kerberos机制是把SASL领域当成Kerberos领域。 因此,这个Kerberos的SASL领域默认为服务器上的Kerberos默认领域。他们支持跨域认证;检查你的应用程序如何处理这个SASL领域。

一些认证机制,如PLAIN和CRAM-MD5,并不支持领域的概念。

5. SASL工作原理及服务器和客户端是如何精确的选择、使用SASL来实现那些认证机制

PLAIN

PLAIN自身并没有安全认证的机制。它的作用是通过另外的标准加密连接。(比如,IMAP命令“STARTTLS”产生一个加密的连接,通过使用PLAIN。)PLAIN工作机制是通过传送一个userid,一个authentication id和一个密码给服务器。并且服务器就验证PLAIN传送的是否一个三元组。系统管理员首先关注的是怎么样认证和验证密码是否正确。Cyrus SASl库可以实现这个功能。

passwd

/etc/passwd 可以很好的被SASL库支持。简单的配置是把“pwcheck_method”设置成”passwd”。

Shadow

/etc/shadow 有点复杂。如果使用SASL库的服务使用root用户来执行,是没有问题的,只需要把“pwcheck_method”设置成”shadow”。然而为了安全,大部分守护进程并不是采用root用户,比如说Cyrus imapd。为了能够使这些服务能够检查密码,他们需要一个root执行的辅助程序,或者特别许可的权限来读取/etc/shadow。最简单的方式就是赋给服务程序权限来读取/etc/shadow。比如,添加用户组为“shadow”的cyrus 用户,这样cyrus用户就有权限读取/etc/shadow。

Kerberos_v4

Kerberos v4的建立是在编译的时候的进行配置的。通过把“pwcheck_method”设置成”Kerberos_v4”,可以对明文的密码进行检查。

pam

PAM在linux和solaris里默认采用的验证用户的方式。通过配置它可以采用不同的方式检查密码。如果你采用pam验证同时采用Cyrus SASL库,那么只需在编译的时候把"pwcheck_method" 设置成"PAM"。采用SASL机制的pam认证,只会对明文验证有作用。对其他的密码验证是没有效果的。

sasldb

Sasldb是存储SASL密码的暗文数据库。相同的数据库存储着暗文共享的方法。它的首先是共享密匙机制的密码的将会与明文机制的密码的同步。但是常规系统内置将不使用sasldb。如果你在sasldb里设置明文密码。你只需要配置“saslpasswd”即把pwcheck_method设置成sasldb。

write your own

最后,也是最重要的,PLAIN最灵活的验证方法是自己写自己需要验证的方式。一些应用程序条用"sasl_checkpass()"惯例或使用PLAIN将会调用自己写的验证代码。最简单修改验证惯例的方法是修改lib/server.c(详细略)。

6. 如何配置SASL

默认配置文件

一般,Cyrus SASL库从/usr/lib/sasl/app.conf读取配置文件。其中app是应用程序的命名。比如sendmail从/usr/lib/sasl/sendmail.conf读取配置文件。

应用程序的配置

应用程序可以重新定义SASl库寻找配置信息的方式。例如Cyrus imapd 的asl配置项是从它自己的配置文件/etc/imapd.conf内读取sasl_pwcheck_option”信息。

不幸的是,自从SASL变得高灵活性的情况下,管理员可以很轻松的升级或安装新认证插件,并不需要重新编译应用程序。但是他的灵活性也造成编译的繁琐。

05-11 19:40