一、下载
官网地址:https://redis.io/
目前最新稳定版本是:redis-5.0.3
下载链接:http://download.redis.io/releases/redis-5.0.3.tar.gz
官方快速入门文档:https://redis.io/topics/quickstart
如果不想安装 redis,官网提供了个网页版体验模拟器:Web Redis
二、安装
步骤 1: 本文安装环境为:CentOS Linux release 7.4.1708 (Core)
1 | cat /etc/redhat-release |
步骤 2: 将 gz 安装包在/usr/
目录下进行解压:
1 | tar xvzf redis-stable.tar.gz |
步骤 3: 编译
进入 redis 安装文件夹,执行make
命令进行编译:
1 | make |
编译完成之后,出现下面的信息提示,就表示安装成功:
1 | CC redis-benchmark.o |
步骤4: 编译完成之后,会在当前目录下生成了一个src
文件,进入此目录进行安装操作:
1 | cd src/ |
提示下面信息,表示安装成功:
1 | CC Makefile.dep |
并且可以在src
目录下看到:redis-server
和redis-cli
等可执行文件。
另外,在/usr/local/bin/
文件目录下已经存在了下面这些可执行文件:
1 | redis-benchmark # Redis服务器端启动程序 |
注意:
1、make 安装过程如果报找不到 cc 命令错:
/bin/sh: cc: command not found
上面的错误提示表示系统没有 gcc 编译器,需要安装 gcc 编译器:yum install gcc
2、安装 gcc 编译工具之后,继续出现下面错误:
zmalloc.h:50:31: error: jemalloc/jemalloc.h: No such file or directory
则需要将make
命令改为make MALLOC=libc
再执行
或者使用make distclean
进行清理再执行make
命令
三、启动
在src
目录下必须先启动服务:
1 | redis-server |
系统提示了 redis 启动画面,即可表示启动成功:
1 | [root@bogon src]# ./redis-server |
注意:redis 服务默认端口是:6379
,此时进程一直停留在了 redis 服务界面,如果要停止就得ctrl + C
强行终止程序。
验证启动是否成功:
1、查看是否有redis服务 :ps -ef | grep redis
2、查看端口:netstat -tunpl | grep 6379
四、设置后台运行
回到 redis 安装目录,在此目录下,会存在一个redis.conf
配置文件,修改配置信息设置 redis 服务为后台启动,将daemonize
的属性由no
改为yes
:
1 | # By default Redis does not run as a daemon. Use 'yes' if you need it. |
注意:每次修改完
redis.conf
文件需要重启 redis 并读取最新的配置文件。
五、设置快捷启动
将 redis 安装文件目录中的redis.conf
文件复制一份到/etc/
目录:
1 | cp ./redis.conf /etc/ |
进入/usr/local/bin
目录,启动 redis 服务:
1 | cd /usr/local/bin |
如果启动成功,则提示下面信息:
1 | [root@bogon src]# cd /usr/local/bin/ |
六、查看 redis 服务启动情况
1 | ps -ef | grep redis |
看到下面信息也表示 redis 服务启动成功:
1 | [root@bogon bin]# ps -ef | grep redis |
七、开启防火墙端口
1 | 永久开启 6379 端口 |
八、使用 redis-cli 连接 redis 服务
在/usr/local/bin
目录下,存在 redis 的客户端可执行文件:redis-cli
redis-cli 执行命令:
redis-cli -h 主机IP -p 端口号 -a 密码
例: redis-cli -h 127.0.0.1 -p 6379 -a root123
使用redis-cli
连接 redis 服务,进行 ping-pong 测试及插入 key-value 进行进测试:
1 | [root@bogon bin]# redis-cli -h 127.0.0.1 -p 6379 |
注意:
redis-cli
连接 redis 服务成功之后,会进入服务 IP + 端口的命令控制台,
停止 redis 服务命令:shutdown
退出当前redis-cli
与 redis 服务连接命令:quit
九、设置 redis 服务开机自启动
让 redis 服务开机运行,可以将其添加到rc.local
文件,或者将其添加为系统的 service 服务。
1. 配置 rc.local 文件
本文使用rc.local
的方式,命令:
1 | echo "/usr/local/bin/redis-server /etc/redis.conf" >> /etc/rc.local |
2. 配置到 service 服务
配置到系统服务的基本原理:
系统开机启动时会去加载/etc/init.d/
文件目录下面的所有脚本文件,通常每个脚本文件会自定义实现程序的启动;若想将新的程序开机自启动,只需在该目录下添加一个自定义启动程序的脚本,然后设置相应启动规则即可。
如在这里我们在/etc/init.d/
文件目录下(和/etc/rc.d/init.d/
目录相同)创建一个redis
脚本,
比较方便的是:在 redis 安装目录下的utils
目录下存在一个:redis_init_script
可执行脚本,将其拷贝到 /etc/init.d
下,并修改名字为redis
:
1 | cp /usr/redis-5.0.3/utils/redis_init_script /etc/init.d/redis |
在脚本文件中增加启动注释信息(下方的最后两行):
1 | !/bin/sh |
说明:redis 服务必须在运行级 2,3,4,5 下被启动或关闭,启动的优先级是 90,关闭的优先级是 10。
修改该脚本中CONF
的配置文件路径为本地自定义的配置文件路径:
1 | CONF="/etc/redis.conf" |
配置脚本文件初始化及设置开机自启:
1 | chmod +x /etc/init.d/redis |
1 | chkconfig --list #列出所有的系统服务 |
测试脚本运行情况,启动:service redis start
,停止:service redis stop
1 | service redis start |
十、设置密码
1. 初始化 redis 密码
redis 没有实现访问控制这个功能,但是它提供了一个轻量级的认证方式,可以编辑redis.conf
配置来启用认证。在redis.conf
配置文件中找到requirepass
:
1 | # requirepass foobared |
将其注释符号去掉,并修改成自己的密码,如:requirepass root123
即可。
配置修改完毕之后,需要重新启动 redis 服务。
注意:
redis 查询速度极快,
auth
这种命令每秒能处理 10w 次以上,简单的 redis 的密码极容易被攻击者暴破,因此建议requirepass
至少长度 20 位以上,为方便可使用一个特殊串 sha256sum 命令生成64位的无特殊字符串。
1
2 echo "dfasdERQEWRQEW31341dfadsfadsf" | sha256sum
af970b3691a0774b2a5adae1375e14cd9e5db3591564f0eb789c2324cc02362f
2. 不重启 redis 设置密码
在配置文件中配置requirepass
的密码(当 redis 重启时密码依然有效)。
1 | redis 127.0.0.1:6379> config set requirepass ed4c39b015b0e46f074dbfd0a9a4ab278f63340a6d640999f25c68a932fef815 |
查询密码:
1 | redis 127.0.0.1:6379> config get requirepass |
密码验证:
1 | redis 127.0.0.1:6379> auth ed4c39b015b0e46f074dbfd0a9a4ab278f63340a6d640999f25c68a932fef815 |
再次查询:
1 | redis 127.0.0.1:6379> config get requirepass |
注意:如果配置文件中没添加密码,那么 redis 重启后,密码会失效。
3. 登陆带密码的 redis
在登录的时候的时候输入密码:
1 | redis-cli -h 127.0.0.1 -p 6379 -a ed4c39b015b0e46f074dbfd0a9a4ab278f63340a6d640999f25c68a932fef815 |
先登陆后验证:
1 | redis-cli -p 6379 |
AUTH
命令跟其他 redis 命令一样,是不加密的,因此不能完全阻止攻击者窃取密码。
认证层的目标是提供多一层的轻量级保护。如果防火墙或者用来保护 redis 的系统防御外部攻击失败的话,外部用户如果没有通过密码认证还是无法访问 redis 服务。
十一、禁用或重命名危险命令
攻击者常利用config / save
两个命令完成 redis 攻击 (因为 redis 无用户权限限制),因此建议对这两个危险的命令,使用rename
配置项进行禁用或重命名,这样外部不了解重命名规则攻击者,就不能执行这类命令。
在redis.conf
配置文件禁用FLUSHDB
、FLUSHALL
两个命令,或者重命名CONFIG
、SHUTDOWN
命令(添加一个特殊的后缀)。这样 redis 服务启动后,只能运行重命名之后的命令,不能执行原始的CONFIG
命令:
1 | It is also possible to completely kill a command by renaming it into |
注意:如果重命名命令之后,再启动 redis 服务报下面错误:
1 | DENIED Redis is running protected mode because protected mode is enabled, |
可以参见官方文档解释:http://redis.io/topics/persistence
1 | ############################## APPEND ONLY MODE ############################### |
把配置改了appendonly
的 yes 改为 no,重启 redis 服务即可。