本文測試驗證的操作系統為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