Redis开发运维实践Shell提权问题

Redis安全问题

Redis是一个弱安全的组件,只有一个简单的明文密码,因此在保护上需要对其他多方面的措施,另外,很多所谓安全问题不是redis本身造成的,而是误用的结果。

9.1 Shell提权问题

问题报告:http://drops.wooyun.org/papers/3062

问题分析:Redis 安全模型的观念是: “请不要将Redis暴露在公开网络中, 因为让不受信任的客户接触到Redis是非常危险的” 。The Redis security model is: “it’s totally insecure to let untrusted clients access the system, please protect it from the outside world yourself”. 因此最近爆出的问题也非redis本身产品问题,属于不当配置。

问题规避:

  1. 使用redis单独用户和组进行安全部署,并且在OS层面禁止此用户ssh登陆,这就从根本上防止了root用户启停redis带来的风险。
  2. 修改默认端口,降低网络简单扫描危害。
  3. 修改绑定地址,如果是本地访问要求绑定本地回环。
  4. 要求设置密码,并对配置文件访问权限进行控制,因为密码在其中是明文。
  5. HA环境下主从均要求设置密码。 另外,我们建议在网络防火墙层面进行保护,杜绝任何部署在外网直接可以访问的redis的出现。


本文为《Redis开发运维实践指南》内容,该书作者为黄鹏程,已授权转载。

时间: 2024-09-20 23:15:51

Redis开发运维实践Shell提权问题的相关文章

Redis开发运维实践数据操作之集合操作

2.4.1 添加元素 sadd key member 成功返回1,如果元素以及在集合中返回0,key对应的set不存在返回错误 2.4.2 移除元素 srem key member 成功返回1,如果member在集合中不存在或者key不存在返回0,如果key对应的不是set类型的值返回错误 2.4.3 删除并返回元素 spop key 如果set是空或者key不存在返回nil 2.4.4 随机返回一个元素 srandmember key 同spop,随机取set中的一个元素,但是不删除元素 2.

Redis开发运维实践开发者设计规范之典型使用场景参考

4.6 典型使用场景参考 下面是Redis适用的一些场景: 1. 取最新 N 个数据的操作 比如典型的取你网站的最新文章,通过下面方式,我们可以将最新的 5000条评论的ID放在Redis的List集合中,并将超出集合部分从数据库获取. 使用LPUSH latest.comments命令,向 list集合中插入数据 插入完成后再用 LTRIM latest.comments 0 5000 命令使其永远只保存最近5000个 ID 然后我们在客户端获取某一页评论时可以用下面的逻辑 FUNCTION

Redis开发运维实践上线部署规划之内存规划

5.1 内存.CPU规划 一定要设置最大内存maxmemory参数,否则物理内存用爆了就会大量使用Swap,写RDB文件时的速度很慢.注意这个参数指的是info中的used_memory,在一些不利于jmalloc的时候,内存碎片会很大. 多留55%内存是最安全的.重写AOF文件和RDB文件的进程(即使不做持久化,复制到Slave的时候也要写RDB)会fork出一条新进程来,采用了操作系统的Copy-On-Write策略(子进程与父进程共享Page.如果父进程的Page-每页4K有修改,父进程自

Redis开发运维实践数据操作之列表操作

2.3.1 添加元素 lpush key string 在key对应list的头部添加字符串元素,返回1表示成功,0表示key存在且不是list类型.注意:江湖规矩一般从左端Push,右端Pop,即LPush/RPop. lpushx 也是将一个或者多个value插入到key列表的表头,但是如果key不存在,那么就什么都不在,返回一个false[rpushx也是同样] rpush key string 同上,在尾部添加 linsert 在key对应list的特定位置之前或之后添加字符串元素 ,

Redis开发运维实践指南数据操作之key操作

数据操作 熟悉每个数据操作前一定要明白每个操作都是代价,以时间复杂度和对应查询集或者结果集大小为衡量.时间复杂度收敛状况如下: 2.1.1 列出key keys *user* keys * 有3个通配符 *, ? ,[] *: 通配任意多个字符 ?: 通配单个字符 []: 通配括号内的某1个字符 注:生产已经禁止.更安全的做法是采用scan,原理和操作如下: 针对Keys的改进,支持分页查询Key.在迭代过程中,Keys有增删时不会要锁定写操作,数据集完整度不做任何保证,同一条key可能会被返回

Redis开发运维实践专题功能之排序

3.1 排序 redis支持对list,set和sorted set元素的排序.排序命令是sort 完整的命令格式如下: + SORT key [BY pattern] [LIMIT start count] [GET pattern] [ASC|DESC] [ALPHA] [STORE dstkey] 复杂度为O(N+M*log(M)).(N是集合大小,M 为返回元素的数量) 说明: [ASC|DESC] [ALPHA]: sort默认的排序方式(asc)是从小到大排的,当然也可以按照逆序或者

Redis开发运维实践数据操作之哈希操作

2.6.1 设置hash值 hset key field value 设置hash field为指定值,如果key不存在,则先创建. hsetnx 设置hash field为指定值,如果 key 不存在,则先创建.如果 field已经存在,返回0,nx是not exist的意思. 2.6.2 获取hash值 hget key field 获取指定的hash field hmget key filed1....fieldN 获取全部指定的hash filed hmset key filed1 va

Redis开发运维实践高可用和集群架构与实践(四)

11.1.4 高可用和异常测试 11.1.4.1 测试环境介绍 sentinel的消息可以通过sentinel日志(/redis/log/sentinel.log)以及sentinel:hello订阅此频道进行查看. 11.1.4.2 手动切换测试 集群情况,2.128为主 发起主动切换: 查看sentinel日志: 在2.129上看,集群已经切换过来: 11.1.4.3 主实例宕测试 接上,此时master为2.129,找出redis实例的pid,然后kill: 此时查看sentinel日志:

Redis开发运维实践高可用和集群架构与实践(三)

11.1.3 维护操作 11.1.3.1 完整启动 supervisord -c /redis/conf/redis-supervisord.conf 会自动拉起本机的redis和sentinel 11.1.3.2 启停redis supervisorctl -c /redis/conf/redis-supervisord.conf start redis supervisorctl -c /redis/conf/redis-supervisord.conf stop redis supervi