本文测试验证的操作系统为CentOS Linux release 7.8.2003 (Core), Redis版本为redis-6.0.8。 敬请注意,如有不同,请以实际情况为准。
下载编译Redis
# wget http://download.redis.io/releases/redis-6.0.8.tar.gz
# tar -xzvf redis-6.0.8.tar.gz
# cd redis-6.0.8
# make
# cd src && make install #可选命令,如果你想将redis安装到/usr/local/bin下,可以执行该命令。一般不用此命令
注意:redis执行了make install后,redis的可执行文件都会自动复制到 /usr/local/bin 目录下
make编译时,如果提示"It’s a good idea to run 'make test' "则代表编译安装成功。
创建普通用户
# groupadd redis
# useradd redis -g redis -s /sbin/nologin
创建目录存放redis命令和配置文件
我们将redis主目录放在/usr/local下面,当然,你可以将其放置在其他目录下,例如/home/redis下
# mkdir -p /usr/local/redis/bin
# mkdir -p /usr/local/redis/etc
移动文件
#pwd
/tmp/redis-6.0.8
# mv redis.conf /usr/local/redis/etc/
# cd src/
# mv mkreleasehdr.sh redis-benchmark redis-check-aof redis-check-rdb redis-cli redis-server redis-sentinel redis-trib.rb /usr/local/redis/bin
# cd /usr/local/redis/bin
# ls -lrt
total 57184
-rwxrwxr-x. 1 root root 3600 Sep 10 2020 redis-trib.rb
-rwxrwxr-x. 1 root root 735 Sep 10 2020 mkreleasehdr.sh
-rwxr-xr-x. 1 root root 11351968 Jul 27 14:46 redis-server
-rwxr-xr-x. 1 root root 11351968 Jul 27 14:46 redis-sentinel
-rwxr-xr-x. 1 root root 6727200 Jul 27 14:47 redis-cli
-rwxr-xr-x. 1 root root 6399120 Jul 27 14:47 redis-benchmark
-rwxr-xr-x. 1 root root 11351968 Jul 27 14:47 redis-check-rdb
-rwxr-xr-x. 1 root root 11351968 Jul 27 14:47 redis-check-aof
redis-server redis服务器
redis-cli redis命令行客户端
redis-benchmark redis性能测试工具
redis-check-aof aof文件修复工具,日志文件检测工(比如断电造成日志损坏,可以检测并修复)
redis-check-dump rdb文件检查工具
redis-check-rdb 快照文件检测工具
redis-sentinel Redis哨兵启动文件
redis-trib.rb 官方提供的Redis Cluster的管理工具,无需额外下载,默认位于源码包的src目录下,但因该工具是用ruby开发的,所以需要准备相关的依赖环境
修改目录的Owner
# chown -R redis:redis /usr/local/redis/
# ls -lrt /usr/local/redis/
total 0
drwx------. 2 redis redis 194 Aug 11 14:21 bin
drwx------. 2 redis redis 40 Aug 11 14:27 etc
Redis安全&配置
1:在redis.conf配置文件文件中绑定本机IP
bind 127.0.0.1 192.168.xxx.xxx
如果服务器有多个IP,可限定Redis Server监听的IP;也可以通过Redis配置项bind,可同时绑定多个IP。如上所示。
默认情况下,如果没有指定“bind”配置指令,Redis 会监听来自服务器上所有可用网络接口的连接。所以一般应该限定本机访问或特定IP访问。
2:指定日志记录级别
默认情况下,日志记录级别为 notice ,这个是生产环境的默认配置。可以根据具体需要调整日志记录级别。
3:配置log文件的地址
log文件位置,默认值为stdout,使用“标准输出”,默认后台模式会输出到/dev/null
# mkdir /var/log/redis
# chown -R redis:redis /var/log/redis/
logfile "/var/log/redis/redis.log"
注意:如果你设置了redis日志的路径,必须确保该路径已经存在。例如,当前案例,不存在这样的目录,那么我们先创建该目录,并将其owner修改为redis用户
# mkdir /var/log/redis
# chown -R redis:redis /var/log/redis
4:后台启动的话需要修改redis.conf文件,daemonize no ---- >daemonize yes。
5:修改默认端口
Redis服务端默认链接端口是6379,可以修改端口号,避免使用熟知端口,降低被初级扫描的风险。
port xxxxx
这个简单测试,使用端口6676
port 6676
6:默认情况下,Redis是无需密码登录的。这意味着你无需通过密码验证就可以直接连接到Redis服务,这样其实是非常不安全的,所以建议设置密码验证。
注意:Redis因查询效率高,auth 这种命令每秒能处理 10w 次以上,简单的 Redis 密码极容易为攻击者暴破。所以建议设置一个超长(24位以上)的密码。
requirepass 75612a867ceeb452924c98778caa959c37120bfff6582aaad48298acbf320b28
7:尽量将Redis限制在内网使用,避免公网访问,另外设置 iptables 策略,仅允许指定的 IP 访问 Redis 服务。
$ iptables -A INPUT -s x.x.x.x -p tcp --dport xxxx -j ACCEPT
如果防火墙是firewalld,可以参考下面命令
#firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="xxx.xxx.xxx.xxx" port protocol="tcp" port="6676" accept"
#systemctl restart firewalld.service
8: 限制redis文件目录访问权限
设置redis的主目录权限为700;
# chmod -R 700 /usr/local/redis/
如果redis配置文件独立于redis主目录,权限修改为600,因为Redis密码明文存储在配置文件中。
# chmod 600 /usr/local/redis/etc/redis.conf
此处案例中,我们将redis的日志放置在/var/log/redis目录下,所以也一并修改redis日志目录的访问权限
# chmod -R 700 /var/log/redis/
启动redis服务
禁止使用root用户启动redis,使用普通用户启动redis
如果以root用户启动的话,可以使用下面脚本,但是出于安全考虑,一般不建议使用root用户启动redis。
#/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf
我们使用redis用户启动Redis服务
#sudo -u redis /usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf
注意:如果以redis用户启动,有时候会遇到“Can't chdir to './': Permission denied”这类错误
出现这个错误是因为我们没有修改参数dir的值(默认为./),而没有换到redis有权限访问的目录,然后执行上面shell命令。遇到权限问题。
验证Redis服务启动情况
# ps -ef | grep redis-server
redis 25258 1 0 14:49 ? 00:00:00 /usr/local/redis/bin/redis-server 127.0.0.1:6676
root 25282 25207 0 14:50 pts/0 00:00:00 grep --color=auto redis-server
#/usr/local/redis/bin/redis-cli -p 6676
127.0.0.1:6676> auth 75612a867ceeb452924c98778caa959c37120bfff6582aaad48298acbf320b28
OK
127.0.0.1:6676> ping
PONG