日期:2014-05-16  浏览次数:20669 次

linux 下安装memcached并启用SASL功能

memcached是基于libevent的事件处理

libevent是一个事件触发的网络库,适用于windows、linux、bsd等多种平台,内部使用select、epoll、kqueue等系统调用管理事件机制。而且libevent在使用上可以做到跨平台,而且根据libevent官方网站上公布的数据统计,似乎也有着非凡的性能
欲了解更更多关于libevent:http://monkey.org/~provos/libevent/

启用SASL验证机制
SASL全称Simple Authentication and Security Layer,是一种用来扩充C/S模式验证能力的机制。
简单来说SASL是一个胶合(glue)库,通过这个库把应用层与形式多样的认证系统整合在一起。这有点类似于 PAM,但是后者是认证方式,决定什么人可以访问什么服务,而SASL是认证过程,侧重于信任建立过程,这个过程可以调用PAM来建立信任关系。在这里Memcached就是上面提到的应用层,具体的认证交给SASL库,SASL会根据相应的认证机制来完成验证功能。
默认情况下,Red Hat Enterprise Linux安装程序会自动安装Cyrus-SASL认证包。可使用下面的命令检查系统是否已经安装了Cyrus-SASL认证包或查看已经安装了何种版本。

rpm -qa | grep sasl

?

下列结果表示已经安装.

cyrus-sasl-plain-2.1.23-8.el6.i686
cyrus-sasl-devel-2.1.23-8.el6.i686
cyrus-sasl-2.1.23-8.el6.i686
cyrus-sasl-lib-2.1.23-8.el6.i686
cyrus-sasl-gssapi-2.1.23-8.el6.i686
cyrus-sasl-md5-2.1.23-8.el6.i686

?

查看密码验证机制,输入:

saslauthd -v

?

显示如下:

saslauthd 2.1.23
authentication mechanisms: getpwent kerberos5 pam rimap shadow ldap

?

当前可使用的密码验证方法有getwent、kerberos5、pam、rimap、shadow和ldap
为简单起见,这里准备采用shadow验证方法,也就是直接用/etc/shadow文件中的用户账户及密码进行验证。因此,在配置文件/etc/sysconfig/saslauthd中,应修改当前系统所采用的密码验证机制为shadow,即:

MECH=shadow

?

重启saslauthd进程

/etc/init.d/saslauthd restart

?

结果如下:

停止 saslauthd:[确定]
启动 saslauthd:[确定]

?

测试SASL验证功能,查看saslauthd进程是否运行

ps aux | grep saslauthd

?如果没有发现saslauthd进程,则可用下面的命令启动该进程并设置它开机自启动

/etc/init.d/saslauthd start
chkconfig saslauthd on

?

可用下面的命令测试saslauthd进程的认证功能

/usr/sbin/testsaslauthd –u portaluser –p portaluserpassword

?

其中,portaluser为Linux系统中的用户账户名,portaluserpassword为用户portaluser的密码。该命令执行后,如果出现如下所示的结果,则表示saslauthd的认证功能已起作用

0: OK "Success."

亦可以自己添加用户给指定的程序,使用如下命令:

/usr/sbin/saslpasswd2 -a memcached -c portaluser

要求输入密码:

Password: 
Again (for verification): 

?添加完用户可以使用上面测试命令验证一下是否成功,添加的用户必须是系统中的用户,上面命令的意思就是,给memcached服务添加可访问的用户,没有添加的系统用户仍然是不可以访问该服务的。

?

sasl搞定之后就可以安装memcached了。?

?

我安装memcached使用的普通用户,而启用memcached的SASL功能需要以root用户启动memcached服务才能校验成功,没尝试过其他方法,反正我的方法是可用的,也验证过。
普通用户下使用root权限,可以使用sudo 方式,普通用户使用sudo的前提是需要将该用户添加到/etc/sudoers文件中,以root编辑/etc/sudoers文件,在
root??? ALL=(ALL)?????? ALL下增加一行
xxx??? ALL=(ALL)?????? ALL xxx是需要使用超级权限的用户名
这种方式是给该用户root的执行所有命令的权限,亦可以给定指定命令的权限,简单起见,这里就给所有权限。

说了这么多,言归正传,以实际操作来说明如何配置及使用。

1.?给用户portaluser添加sudo权限。
以root用户编辑/etc/sudoers,在root??? ALL=(ALL)?????? ALL行之下增加一行:

portaluser    ALL=(ALL)       ALL

?

保存并退出,切换到普通用户portaluser。
2.?安装libevent。
下载libevent安装包,安装libevent时gcc版本不能太低,我的环境gcc版本是4.4.4。在http://www.monkey.org/~provos/libevent/ 下载libevent-2.0.12-stable.tar.gz,并上传到安装服务器,执行安装:
安装目录:/opt/system/portaluser/memcached/libevent

tar -zxvf libevent-2.0.12-stable.tar.gz
cd libevent-2.0.12-stable
./configure --prefix=/opt/system/portaluser/memcached/libevent
make
make install

?

3.?安装memcached。
在 http://memcached.org/ 下载memcached-1.4.6.tar.gz,并上传到安装服务器,启用SASL验证功能需要在编译时指定--enable-sasl参数,否则安装成功后,无法启用SASL,执行安装:

tar -zxvf memcached-1.4.6.tar.gz
cd memcached-1.4.6
./configure --enable-sasl --prefix=/opt/system/portaluser/memcached --with-libevent=/opt/system/portaluser/memcached/libevent
make
make install

?

完成安装。
4.?启动memcached服务器,启用SASL验证功能,在启动时需要加-S(大写S)参数。
编写启动脚本

cd /opt/syst