Redis的危险命令主要有:
flushdb,清空数据库
flushall,清空所有记录,数据库
config,客户端连接后可配置服务器
keys,客户端连接后可查看所有存在的键
作为服务端的redis-server,我们常常需要禁用以上命令来使服务器更加安全。
禁用的具体做法是,修改服务器的配置文件redis.conf,在SECURITY这一项中,来禁用远程修改 DB 文件地址。
我们新增以下命令:
rename-command FLUSHALL “”
rename-command FLUSHDB “”
rename-command CONFIG “”
rename-command KEYS “” —暂时未使用
而如果想要保留命令,但是不能轻易使用,可以重命名命令来设定:
rename-command FLUSHALL joYAPNXRPmcarcR4ZDgC81TbdkSmLAzRPmcarcR
rename-command FLUSHDB qf69aZbLAX3cf3ednHM3SOlbpH71yEXLAX3cf3e
rename-command CONFIG FRaqbC8wSA1XvpFVjCRGryWtIIZS2TRvpFVjCRG
rename-command KEYS eIiGXix4A2DreBBsQwY6YHkidcDjoYA2DreBBsQ —暂时未使用
需要注意的一点是,rename-command命名无法直接对线上集群生效。如果需要使用rename-command,必须重启集群。
如果被禁用了,怎么恢复呢
cat /home/xiazemin/redis/redis.conf
aof-rewrite-incremental-fsync yes
rename-command CONFIG “bd52974cbbee8d759f781bea059adde9”
$~/redis/bin/redis-cli
127.0.0.1:6379> bd52974cbbee8d759f781bea059adde9 get *
1) “dbfilename”
2) “dump.rdb”
(1)Redis被攻击的特点:
Redis所在的机器有外网IP。
Redis以默认端口6379为启动端口,并且是对外网开放的。
Redis是以root用户启动的。
Redis没有设置密码。
Redis的bind设置为0.0.0.0或者”“。
(2)Redis密码机制
这种密码机制能在一定程度上保护Redis的安全,但是在使用requirepass时候要注意一下几点:
密码要足够复杂(64个字节以上),因为Redis的性能很高,如果密码比较简单,完全是可以在一段时间内通过暴力破解来破译密码。
如果是主从结构的Redis,不要忘记在从节点的配置中加入masterauth(master的密码)配置,否则会造成主从节点同步失效。
auth是通过明文进行传输的,所以也不是100%可靠,如果被攻击者劫持也相当危险。
(3)伪装危险命令
Redis中包含了很多“危险”的命令,一旦错误使用或者误操作,后果不堪设想,例如如下命令:
keys:如果键值较多,存在阻塞Redis的可能性。
flushall/flushdb:数据全部被清除。
save:如果键值较多,存在阻塞Redis的可能性。
debug:例如debug reload会重启Redis。
config:config应该交给管理员使用。
shutdown:停止Redis。
Redis 禁用某些命令
(error) ERR unknown command ‘CONFIG’
rename-command config “”
rename-command config “lcconfig”
https://github.com/spring-projects/spring-session/issues/124
CONFIG GET 命令用于取得运行中的 Redis 服务器的配置参数(configuration parameters),在 Redis 2.4 版本中, 有部分参数没有办法用 CONFIG GET 访问,但是在最新的 Redis 2.6 版本中,所有配置参数都已经可以用 CONFIG GET 访问了。
CONFIG GET 接受单个参数 parameter 作为搜索关键字,查找所有匹配的配置参数,其中参数和值以“键-值对”(key-value pairs)的方式排列。
比如执行 CONFIG GET s* 命令,服务器就会返回所有以 s 开头的配置参数及参数的值: