memcached+SASL:更安全地访问memcached

举报
BenForward 发表于 2017/09/12 21:08:28 2017/09/12
【摘要】 memcached 是一套被广泛使用的开源高性能的、分布式内存对象缓存系统,基于C/S架构。OpenStack的Nova等组件使用memcached作为缓存系统,由于memcached默认不开启认证机制,导致客户端无需认证即可读取、修改缓存内容。本文介绍如何给memcached增加认证机制。

memcached是什么

memcached 是一套被广泛使用的开源高性能的、分布式内存对象缓存系统。授权协议为BSD license,主要开发语言为C语言,数据以Key/Value方式存储在内存中。

详细介绍参见:http://www.memcached.org/

为什么要认证

memcached基于C/S架构,OpenStackNova等组件使用memcached作为缓存系统,由于memcached默认不开启认证机制,导致客户端无需认证即可读取、修改缓存内容。

安全问题详见:http://blog.nsfocus.net/memcache-unauthorized-access-exploit/

本文介绍如何给memcached增加认证机制。

memcached认证机制

memcached目前支持的认证方式为SASL,由于memcached1.4.3版本才加入对SASL的支持,所以要使用认证的话需要将memcached升级到>=1.4.3的版本。

目前华为公有云使用的memcached版本高于1.4.3,已实现SASL认证。

SASL是什么

SASL全称Simple Authentication and Security Layer(简单认证与安全层),是一种用来扩充C/S模式验证能力的机制,SASL只是认证过程,将应用层与系统认证机制整合起来,SASL本身不能进行认证。

SASL支持的认证方法为:getpwent kerberos5 pam rimap shadow ldap httpform

下面以shadow为例讲解,即使用系统/etc/shadow文件中的用户名密码认证方式。

前提条件

1.版本

  要使用认证的话需要将memcached升级到>=1.4.3的版本。

2.编译

  增加编译选项:--enable-sasl进行编译。

3.客户端支持

  如果要使用客户端,则客户端需要支持SASL,比如python-memcached目前不支持SASL,python-binary-memcached则支持SASL。

实现过程

1.配置SASL认证方式

  在配置文件/etc/sysconfig/saslauthd中配置认证方式:

  MECH=shadow

2.启动saslauthd进程

  /usr/sbin/saslauthd -m /run/saslauthd -a shadow

3.测试saslauthd的认证功能

  /usr/sbin/testsaslauthd -u os_user -p passwd_of_os_user

  其中,os_user为系统用户,passwd_of_os_user为系统用户对应密码,如果用户名密码正确会返回:

  0: OK "Success."

4.memcached添加认证用户

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

  输入用户对应密码:

  Password:   

  Again (for verification):

5.启动memcached服务,开启SASL认证

  memcached –S -d -m 1024 -l 172.1.1.2 -p 11211 -u run_user

  -S:开启SASL认证

  至此,memcached就可以通过shadow方式(系统用户名密码)进行认证。

6.客户端示例:使用python-binary-memcached访问memcached

  >>>import bmemcached

  >>>client = bmemcached.Client((‘172.28.8.6:11211’, ), ‘os_user', 'passwd_of_os_user')

  如果用户名密码错误会导致认证失败:

  >>>client.set('key', 'value')

  Traceback (most recent call last):

    File "<stdin>", line 1, in <module>

    File "build/bdist.linux-x86_64/egg/bmemcached/client.py", line 172, in set

    File "build/bdist.linux-x86_64/egg/bmemcached/protocol.py", line 543, in set

    File "build/bdist.linux-x86_64/egg/bmemcached/protocol.py", line 510, in _set_add_repla

    File "build/bdist.linux-x86_64/egg/bmemcached/protocol.py", line 218, in _send

    File "build/bdist.linux-x86_64/egg/bmemcached/protocol.py", line 130, in _open_connecti

    File "build/bdist.linux-x86_64/egg/bmemcached/protocol.py", line 293, in _send_authenti

  bmemcached.exceptions.memcachedException: Code: 32 Message: Auth failure.

总结

memcached打开SASL认证可以提高memcached的安全性,但是,memcached为高性能缓存系统,增加认证无疑会带来一定的性能损耗,所以在使用的时候要权衡利弊。一般情况下,memcached需要部署在信任的网络中,如果无法启用SASL,建议把memcached部署在防火墙后。

参考链接

1.memcached官网:http://www.memcached.org/

2.memcached未授权访问漏洞:http://blog.nsfocus.net/memcache-unauthorized-access-exploit/

3.SASLhttps://tools.ietf.org/html/rfc4422

4.SASLAuthProtocolhttps://github.com/memcached/memcached/wiki/SASLAuthProtocol

5.python-binary-memcachedhttps://github.com/jaysonsantos/python-binary-memcached


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。