日期:2014-05-16 浏览次数:20707 次
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