1. 程式人生 > >redis安裝與安全設定 centos下redis安全相關

redis安裝與安全設定 centos下redis安全相關

redis

Redis 是一個開源(BSD許可)的,記憶體中的資料結構儲存系統,它可以用作資料庫、快取和訊息中介軟體

yum安裝redis

1.yum安裝

 
#前提得配置好阿里雲yum源,epel源
#檢視是否有redis包
yum list redis
#安裝redis
yum install redis -y
#安裝好,啟動redis
systemctl start redis
 

2.檢測redis是否工作

redis-cli    #redis 客戶端工具
#進入互動式環境後,執行ping,返回pong表示安裝成功
127.0.0.1:6379> ping
PONG

原始碼安裝redis,編譯安裝

大家用過yum,是相當省事好用吧,為什麼還要學習原始碼安裝?

有人說編譯安裝效能好?錯

編譯安裝的優勢是:

  • 編譯安裝時可以指定擴充套件的module(模組),php、apache、nginx都是一樣有很多第三方擴充套件模組,如mysql,編譯安裝時候,如果需要就定製儲存引擎(innodb,還是MyIASM)
  • 編譯安裝可以統一安裝路徑,linux軟體約定安裝目錄在/opt/下面
  • 軟體倉庫版本一般比較低,編譯原始碼安裝可以根據需求,安裝最新的版本
 
1.下載redis原始碼
wget http://download.redis.io/releases/redis-4.0.10.tar.gz
2.解壓縮
tar -zxf redis-4.0.10.tar.gz
3.切換redis原始碼目錄
cd redis-4.0.10.tar.gz
4.編譯原始檔
make
5.編譯好後,src/目錄下有編譯好的redis指令
6.make install 安裝到指定目錄,預設在/usr/local/bin
 

redis可執行檔案

 
./redis-benchmark //用於進行redis效能測試的工具
./redis-check-dump //用於修復出問題的dump.rdb檔案
./redis-cli //redis的客戶端
./redis-server //redis的服務端
./redis-check-aof //用於修復出問題的AOF檔案
./redis-sentinel //用於叢集管理
 

啟動redis服務端

啟動redis非常簡單,直接./redis-server就可以啟動服務端了,還可以用下面的方法指定要載入的配置檔案:
./redis-server ../redis.conf
預設情況下,redis-server會以非daemon的方式來執行,且預設服務埠為6379。
將redis.conf中的daemonize 改為yes,就可以後臺執行

使用redis客戶端

 
#執行客戶端命令即可進入
./redis-cli  
#測試是否連線上redis
127.0.0.1:6379 > ping
返回pong代表連線上了

//用set來設定key、value
127.0.0.1:6379 > set name "chaoge"
OK
//get獲取name的值
127.0.0.1:6379 > get name
"chaoge"
 

redis資料結構

 
redis是一種高階的key:value儲存系統,其中value支援五種資料型別
字串(strings)
雜湊(hashes)
列表(lists)
集合(sets)
有序集合(sorted sets)
 

資料結構示例

1.strings型別
 
set name "chaoge66" //設定name
get name    //讀取name

strings型別支援數值操作
set age "17" //設定key age
get age        //讀取age
incr age      //數值+1,遇見數值操作時,redis會將字串型別轉成數值
get age        //此時age是18,value仍然是字串
type age    //檢視鍵的型別
 
2.list型別
 
redis的另外一個數據結構叫做lists,中文叫列表
lists常用操作包括
LPUSH   在lists左側插入一個新元素 
RPUSH   在lists右側插入一個新元素
LRANGE  在lists指定範圍提取元素
LPOP 左側刪除
RPOP  右側刪除

示例:

lpush mylist "1" //新建一個mylist,在頭部插入元素"1"
(integer) 1    //返回mylist元素個數

rpush mylist "2"  //在mylist右側插入元素"2"

(INTEGER) 2    //返回mylist元素個數

127.0.0.1:6379> lpush mylist "0"  //在mylist左側插入元素"0"

(integer) 3    //返回mylist元素個數

//列出mylist中從編號0到編號1的元素

127.0.0.1:6379> lrange mylist 0 -1 
1) "0"
2) "1"
3) "2"

lists型別常用在,訊息佇列、實現分頁功能、儲存文章評論

 

3.sets集合型別

redis的集合,是一種無序的集合,集合中的元素沒有先後順序。

集合相關的操作也很豐富,如新增新元素、刪除已有元素、取交集、取並集、取差集等。我們來看例子:

 
//向集合myset中加入一個新元素"one"
127.0.0.1:6379> sadd myset "one" 
(integer) 1
127.0.0.1:6379> sadd myset "two"
(integer) 1
//列出集合myset中的所有元素
127.0.0.1:6379> smembers myset 
1) "one"
2) "two"
//判斷元素1是否在集合myset中,返回1表示存在
127.0.0.1:6379> sismember myset "one" 
(integer) 1
//判斷元素3是否在集合myset中,返回0表示不存在
127.0.0.1:6379> sismember myset "three" 
(integer) 0
//新建一個新的集合yourset
127.0.0.1:6379> sadd yourset "1" 
(integer) 1
127.0.0.1:6379> sadd yourset "2"
(integer) 1
127.0.0.1:6379> smembers yourset
1) "1"
2) "2"
//對兩個集合求並集
127.0.0.1:6379> sunion myset yourset 
1) "1"
2) "one"
3) "2"
4) "two"

集合的使用比如QQ社交功能中的“好友標籤”,朋友給你的好友標籤“sb”,“dsb”等等,就可以吧每一個使用者的標籤儲存在集合裡
 

4.sorted sets有序集合

redis不但提供了無需集合(sets),還很體貼的提供了有序集合(sorted sets)。有序集合中的每個元素都關聯一個序號(score),這便是排序的依據。

很多時候,我們都將redis中的有序集合叫做zsets,這是因為在redis中,有序集合相關的操作指令都是以z開頭的,比如zrange、zadd、zrevrange、zrangebyscore等等

 
127.0.0.1:6379> zadd myzset 1 baidu.com 
(integer) 1
//向myzset中新增一個元素360.com,賦予它的序號是3
127.0.0.1:6379> zadd myzset 3 360.com 
(integer) 1
//向myzset中新增一個元素google.com,賦予它的序號是2
127.0.0.1:6379> zadd myzset 2 google.com 
(integer) 1
//列出myzset的所有元素,同時列出其序號,可以看出myzset已經是有序的了。
127.0.0.1:6379> zrange myzset 0 -1 withscores 
1) "baidu.com"
2) "1"
3) "google.com"
4) "2"
5) "360.com"
6) "3"
//只列出myzset的元素
127.0.0.1:6379> zrange myzset 0 -1 
1) "baidu.com"
2) "google.com"
3) "360.com"
 

5.雜湊資料結構

hashes即雜湊。雜湊是從redis-2.0.0版本之後才有的資料結構。

hashes存的是字串和字串值之間的對映,比如一個使用者要儲存其全名、姓氏、年齡等等,就很適合使用雜湊。

 
//建立雜湊,並賦值
127.0.0.1:6379> HMSET user:001 username antirez password P1pp0 age 34 
OK
//列出雜湊的內容
127.0.0.1:6379> HGETALL user:001 
1) "username"
2) "antirez"
3) "password"
4) "P1pp0"
5) "age"
6) "34"
//更改雜湊中的某一個值
127.0.0.1:6379> HSET user:001 password 12345 
(integer) 0
//再次列出雜湊的內容
127.0.0.1:6379> HGETALL user:001 
1) "username"
2) "antirez"
3) "password"
4) "12345"
5) "age"
6) "34"
 

redis安全

 

 redis-sentinel實戰

redis主從同步

1.安裝好master、slave兩個節點的redis

2.檢查master配置檔案

#檢視配置檔案有用資訊行
egrep -v '#|^$' /etc/redis.conf
#主要修改的幾行
bind 192.168.119.10 #填寫本機ip地址
daemonize yes #設定後臺程序方式執行

3.檢查設定slave配置檔案

bind 192.168.119.11 
daemonize yes
slaveof 192.168.119.10 6379 #填寫master的ip埠

4.在master、slave皆啟動redis服務,指定配置檔案

redis-server /etc/redis.conf

5.在master上設定key,去slave上檢查資料,完成簡單的主從複製配置

 

centos下redis安全相關

 

 

在使用雲伺服器時,安裝的redis3.0+版本都關閉了protected-mode,因而都遭遇了挖礦病毒的攻擊,使得伺服器99%的佔用率!!

因此我們在使用redis時候,最好更改預設埠,並且使用redis密碼登入。

redis.conf設定

protected-mode yes   #開啟保護模式
port 6380  #更改預設啟動埠
requirepass xxxxxx   #設定redis啟動密碼,xxxx是自定義的密碼

啟動redis服務端

redis-server /opt/redis-4.0.10/redis.conf &     #指定配置檔案啟動redis,且後臺啟動

使用密碼登入redis,使用6380埠

方法1,使用這個

[[email protected]_python ~ 09:48:41]#redis-cli -p 6380
127.0.0.1:6380> auth xxxx
OK

方法2,此方案不安全,容易暴露密碼

[[email protected]_python ~ 09:49:46]#redis-cli -p 6380 -a xxxx
Warning: Using a password with '-a' option on the command line interface may not be safe.
127.0.0.1:6380> ping
PONG

 

補充

檢查redis是否設定了密碼

127.0.0.1:6380> CONFIG get requirepass
1) "requirepass"
2) "xxxxxx"

如果沒有,也可以給redis設定密碼(命令方式)

CONFIG set requirepass "xxxxxx"

 

因此你的redis就不容易被黑客入侵了。

 

在使用雲伺服器時,安裝的redis3.0+版本都關閉了protected-mode,因而都遭遇了挖礦病毒的攻擊,使得伺服器99%的佔用率!!

因此我們在使用redis時候,最好更改預設埠,並且使用redis密碼登入。

redis.conf設定

protected-mode yes   #開啟保護模式
port 6380  #更改預設啟動埠
requirepass xxxxxx   #設定redis啟動密碼,xxxx是自定義的密碼

啟動redis服務端

redis-server /opt/redis-4.0.10/redis.conf &     #指定配置檔案啟動redis,且後臺啟動

使用密碼登入redis,使用6380埠

方法1,使用這個

[[email protected]_python ~ 09:48:41]#redis-cli -p 6380
127.0.0.1:6380> auth xxxx
OK

方法2,此方案不安全,容易暴露密碼

[[email protected]_python ~ 09:49:46]#redis-cli -p 6380 -a xxxx
Warning: Using a password with '-a' option on the command line interface may not be safe.
127.0.0.1:6380> ping
PONG

 

補充

檢查redis是否設定了密碼

127.0.0.1:6380> CONFIG get requirepass
1) "requirepass"
2) "xxxxxx"

如果沒有,也可以給redis設定密碼(命令方式)

CONFIG set requirepass "xxxxxx"

 

因此你的redis就不容易被黑客入侵了。