在上一篇文章《Redis 部署》中介紹了Redis的基礎安裝,其中簡單介紹了Redis配置文件redis.conf里面的參數,Redis在市場上應用越來越普及這樣有好處也里弊端,例如好處有:大量的使用會使用Redis越來越穩定(BUG快速解決)、解決方案越來越多也越來越穩定、相關資料也越來越多等等好處,然后問題也越來越明顯,例如:Redis的安全問題日益提升,安全包括兩個方面:①外部的安全,包含:攻擊、入侵、掛毒(例如:Redis的挖礦病毒已經不在是個例)等,②內部的安全:離職人員的惡意刪除數據或者無意誤刪等操作。
來自外部的安全風險,我們可以通過兩個方面來解決:首先通過防火牆來指定IP訪問Redis(Redis一般都是被服務直接調用,而不是客戶直接調用,那么服務基本都是固定IP,因此這是一個可行的方案),然后修改默認的Redis端口(強行推薦,由於對Redis進行Telnet操作不會有任何提示符,所以黑客如果通過nmap掃描+Telnet試探等都很難准確定位該端口具體運行的服務)。如果這兩個手段基本可以防御80%以上的惡意攻擊或者掃描。
最后來自內部(也有可能是外部)的安全風險就是:直接連接Redis就登錄,可以進行刪除數據操作(一個flushall命令,干掉半年的辛苦)。該解決方案是給Redis配置訪問密碼。Redis配置訪問密碼有兩種方式:①、修改Redis的配置文件redis.conf。②、在Redis中直接運行配置密碼命令。下面將詳細講解這兩種方法。
通過Redis命令進行設置密碼(注意:該方法在重啟Redis后密碼將失效):
首先觀察設置密碼前,只要使用客戶端連接Redis就可以進行所有操作。如下:
#連接Redis命令 /usr/local/redis/bin/redis-cli -h 127.0.0.1 -p 6379 127.0.0.1:6379> KEYS * (empty list or set) 127.0.0.1:6379> set user ray OK 127.0.0.1:6379> KEYS * 1) "user" 127.0.0.1:6379>
然后,通過命令進行設置密碼。如下:
#首先連接Redis,然后執行CONFIG SET requirepass userpassword /usr/local/redis/bin/redis-cli -h 127.0.0.1 -p 6379 127.0.0.1:6379> KEYS * 1) "user" 127.0.0.1:6379> CONFIG SET requirepass 123.com OK 127.0.0.1:6379> KEYS * (error) NOAUTH Authentication required. 127.0.0.1:6379> quit #從上面可以看到密碼設置成功,同時一旦密碼設置成功,剛剛建立的連接將不能進行任何權限操作 #使用-a userpassword 登錄Redis /usr/local/redis/bin/redis-cli -h 127.0.0.1 -p 6379 -a 123.com 127.0.0.1:6379> KEYS * 1) "user" 127.0.0.1:6379> set job it OK 127.0.0.1:6379> KEYS * 1) "job" 2) "user" 127.0.0.1:6379> #通過Redis登錄后可以看到可以進行任何操作
通過Redis配置文件redis.conf進行設置密碼(注意:該方法設置密碼后需要重啟Redis才生效):
首先,編輯redis.conf文件,找到下來內容:
# requirepass foobared
然后,把注釋(#)去掉,並把foobared修改為直接的密碼字段。如下:
requirepass ray.com
最后,重啟Redis,登錄連接。如下:
#重啟Redis服務 service redis restart Stoping redis-server ...... Starting redis-server ..... #不使用認證連接,發現什么有權限的命令都操作不了,提示權限認證問題 /usr/local/redis/bin/redis-cli -h 127.0.0.1 -p 6379 127.0.0.1:6379> KEYS * (error) NOAUTH Authentication required. 127.0.0.1:6379> quit #使用-a userpassword 認證登錄,然后可以正常操作所有命令 /usr/local/redis/bin/redis-cli -h 127.0.0.1 -p 6379 -a ray.com 127.0.0.1:6379> KEYS * 1) "user" 2) "job" 127.0.0.1:6379>
至此,Redis密碼配置已完成,但是需要特別注意的是:使用命令配置密碼,在Redis重啟以后將會失效。而使用配置文件設置密碼,將需要重啟Redis(在生產環境中一般不允許重啟服務)。所以最好的方法是兩者結合,修改Redis配置文件設置密碼,同時使用命令配置相同的密碼,這樣既可以立即生效也不用重啟Redis。