这几天使用在Postfix搭建一个Webmail的平台,用户认证这一块最终使用了PAM。想整理一下思路,让自己对PAM有个更加清晰的认识。

1.      PAM的简介

PAM全称是:Pluggable Authentication Modules。在当前的CentOS中都是用这个模块作各种认证通道。具体可以man 一下pam。

PAM的主要配置文件都集中在/etc/pam.d目录里面,里面有多个文件,每个文件表示了一种服务的认证方法,例如:sshd,login。

管理员可以根据自己的需要定义出自己的服务的认证配置,详细的配置信息可以man pam.d

2.      SASL的简介

在对PAM做测试之前,需要一个sasl的工具集。SASL是一个用于认证处理的协议,全称是Simple Authentication and Security Layer。这个协议在rfc4422中定义,具体作用大概如下:

SMTP    LDAP    XMPP   Other protocols ...

\       |    |      /

\      |    |     /

SASL abstraction layer

/      |    |     \

/       |    |      \

EXTERNAL   GSSAPI  PLAIN   Other mechanisms ...

从上面图可以看到,不同的应用通过SASL使用各种方法来进行用户认证。SASL的作用是为各种协议产生一个认证的抽象层,让用户登录的时候不用理会最终用户认证信息的出处。

一般情况下,当前的centos系统都会安装这套工具。在我的系统中,对应的版本是:

[root@kernel pam_mysql-0.7RC1]# rpm -ql cyrus-sasl-2.1.22-5.el5_4.3

/etc/rc.d/init.d/saslauthd

/etc/sysconfig/saslauthd

/usr/lib/sasl2

/usr/lib/sasl2/libsasldb.la

/usr/lib/sasl2/libsasldb.so

/usr/lib/sasl2/libsasldb.so.2

/usr/lib/sasl2/libsasldb.so.2.0.22

/usr/sbin/dbconverter-2

/usr/sbin/pluginviewer

/usr/sbin/saslauthd

/usr/sbin/sasldblistusers2

/usr/sbin/saslpasswd2

/usr/sbin/testsaslauthd

/usr/share/doc/cyrus-sasl-2.1.22

/usr/share/doc/cyrus-sasl-2.1.22/LDAP_SASLAUTHD

/usr/share/man/man8/pluginviewer.8.gz

/usr/share/man/man8/saslauthd.8.gz

/usr/share/man/man8/sasldblistusers2.8.gz

/usr/share/man/man8/saslpasswd2.8.gz

/var/run/saslauthd

下面是SASL的配置文件,这个配置文件说明,SASL使用PAM作为获取认证数据的机制。

[root@kernel pam_mysql-0.7RC1]# cat /etc/sysconfig/saslauthd

# Directory in which to place saslauthd's listening socket, pid file, and so

# on. This directory must already exist.

SOCKETDIR=/var/run/saslauthd

# Mechanism to use when checking passwords. Run "saslauthd -v" to get a list

# of which mechanism your installation was compiled with the ablity to use.

MECH=pam

# Additional flags to pass to saslauthd on the command line. See saslauthd(8)

# for the list of accepted flags.

FLAGS=

3.      使用SASL工具对PAM进行测试

我们可以用下面方法来对sasl和pam进行测试:

[root@kernel pam.d]# testsaslauthd -u root -p xxxx -s su

0: OK "Success."

[root@kernel pam.d]# testsaslauthd -u root -p xxxx -s sshd

0: OK "Success."

[root@kernel pam.d]# testsaslauthd

testsaslauthd: usage: testsaslauthd -u username -p password

[-r realm] [-s servicename]

[-f socket path] [-R repeatnum]

在上面例子中,xxxx要修改为真正的密码。

4.      使用MYSQL作为PAM的数据源

我们还可以用mysql作为PAM存储用户数据的数据库。

如果使用这种方法,我们需要安装pam_mysql。可以在下面链接中获得:

http://sourceforge.net/projects/pam-mysql/

具体的安装方法可以看INSTALL,具体的配置方法可以看里面的README。

安装很简单,就是configure一下,然后执行make,最后把生成的库拷贝到pam的库目录中:

[root@kernel pam_mysql-0.7RC1]# cp .libs/pam_mysql.so /lib/security/

下面是一个配置例子:

[root@kernel pam.d]# testsaslauthd -u cyrus -p test -s smtp

0: OK "Success."

[root@kernel pam.d]# cat smtp

auth sufficient pam_mysql.so user=root passwd=admin host=localhost db=postfix table=accountuser usercolumn=username passwdcolumn=password

auth sufficient pam_unix_auth.so

account required pam_mysql.so user=root passwd=admin host=localhost db=postfix table=accountuser usercolumn=username passwdcolumn=password

account sufficient pam_unix_acct.so

smtp中主要是定义了mysql的连接方式和对应的库表,字段。具体可以看READM文件和man pam.d。

根据上面的配置和测试,需要创建数据库postfix,登录帐号密码是root/admin,表是accountuser,列有:username,password。

创建用户信息:cyrus/test。插入数据SQL:INSERT INTO accountuser(username, password) VALUE('cyrus','test')

5.      小结

在这里面对pam和sasl做了入门介绍,希望对大家有帮助。如果有什么问题可以给我发邮件:bljb@qq.com

下面是相关的资料:

l  http://cyrusimap.org/docs/cyrus-sasl/2.1.25/

l  http://sourceforge.net/projects/pam-mysql/files/?source=navbar

pam和sasl的更多相关文章

  1. Linux中Postfix邮件认证配置(五)

    Postfix+Dovecot+Sasl工作原理 1.A用户使用MUA客户端借助smtp协议登陆smtpd服务器,需要先进行用户和密码认证,而SMTPD服务器端支持sasl认证,例如有一个sasl客户 ...

  2. Cyrus SASL介绍(翻译)

    http://blog.sina.com.cn/s/blog_7695e9f40100pnpa.html Cyrus SASL介绍 1. 综述 这篇文档讲述的是系统管理员配置SASL的方法,其中详细的 ...

  3. Postfix+Sasl+Courier-authlib+Dovecot+MySQL+extmail 邮件系统部署

    # yum remove postfix ##删除系统自带postfix# userdel postfix# groupdel postdrop# groupadd -g 2525 postfix# ...

  4. Linux可插拔认证模块(PAM)的配置文件、工作原理与流程

    PAM的配置文件: 我们注意到,配置文件也放在了在应用接口层中,他与PAM API配合使用,从而达到了在应用中灵活插入所需鉴别模块的目的.他的作用主要是为应用选定具体的鉴别模块,模块间的组合以及规定模 ...

  5. XEP-0078:非SASL认证

    XEP-0078:非SASL认证 抽象: 这个文件规定了使用Jabber的Jabber的服务器和服务认证的协议:智商:AUTH命名空间.注意哦:本文规定的协议,取而代之的SASL认证的被取代,如RFC ...

  6. nis,nfs,pam小结

    最近一周总算把nis/nfs配置起来,中间各种被坑,这里简单记录一下: 主要参考两个大牛的文章,柏青哥,鸟哥 配置完之后的功能是可以连接任意一台主机,所有主机之间共享HOME目录,而且每人都有一定的限 ...

  7. linux pam 控制模式

    工作类别(type).流程栈(stack)和控制模式(control) Linux-PAM 工作的"类别"(type) PAM 的具体工作主要有以下四种类别(type):accou ...

  8. Arch Linux sudo: PAM authentication error: Module is unknown [Solved!]

    问题描述: 我的 Arch Linux 已经用了快半年多,由于 Arch Linux 的滚挂问题,我从没有直接升级过系统.软件版本以及库自然落后了一些. 就在我准备需要用到 NFS 时,挂载网络文件系 ...

  9. Linux UserSpace Back-Door、Rootkit SSH/PAM Backdoor Attack And Defensive Tchnology

    catalog . 引言 . Pam后门 . SSH后门 . Hijacking SSH . Hijacking SSH By Setup A Tunnel Which Allows Multiple ...

随机推荐

  1. IE8下submit表单没反应

    当在IE8浏览器下,例如以下代码<input type="submit" value="sub" />点击没反应.通常是因为表单里面嵌套了表单造成的 ...

  2. Loadrunner对https协议(单双向SSL)的web端性能测试

    1.项目背景 1.1 单双向SSL的含义及部署 单向SSL即我们说到的https协议. 特点是,浏览器需要请求验证服务器证书: 基本含义是:一个安全通信通道,它基于HTTP开发,用于在客户计算机和服务 ...

  3. 【python】logging

    https://docs.python.org/3/howto/logging.html import logging # create logger logger = logging.getLogg ...

  4. 对事件委托绑定click的事件的解绑

    大家都知道解绑事件的jquery写法,很简单: $("xxx").unbind("click"); 然后对于事件委托式的事件绑定,亲测,这种解绑方法是无效的, ...

  5. python 使用循环生成list

    #-*- coding:UTF-8 -*- squares=[] for x in range(10): squares.append(x**2) print squares #[0, 1, 4, 9 ...

  6. 关于float样式

    在认识float样式之前务必要认识position:absolute position:absolute 功能是:当前节点脱离文档流,对于其兄弟节点(即同一父节点下的节点)已经感觉不到他的存在(即他的 ...

  7. 禁用滚动视图ListView、ViewPager、ScrollView、HorizontalScrollView、WebView边界颜色渐变

    禁用滚动视图ListView.ViewPager.ScrollView.HorizontalScrollView.WebView边界颜色渐变 ListView.ViewPager.ScrollView ...

  8. C#------如何深度克隆一个对象

    普通版: public static object CloneObject( object obj ) { using ( MemoryStream memStream = new MemoryStr ...

  9. XMPP协议实现即时通讯底层书写 (一)--从RFC6121阅读開始

    Extensible Messaging and Presence Protocol (XMPP): Instant Messaging and Presence ok,额瑞巴蒂,说好的阅读RFC61 ...

  10. 【转】使程序在Linux下后台运行 (关掉终端继续让程序运行的方法)

    一.为什么要使程序在后台执行 我们计算的程序都是周期很长的,通常要几个小时甚至一个星期.我们用的环境是用putty远程连接到日本Linux服务器.所以使程序在后台跑有以下三个好处: 1:我们这边是否关 ...