問題描述
最近在自己的server上的redis命令行碰到set key錯誤的問題,返回結果如下:
set a 1
(error) MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled. Please check Redis logs for details about the error.
1
2
查看redis.log日志:
1161:M 24 Dec 10:46:32.108 # Background saving error
1161:M 24 Dec 10:46:38.017 * 10 changes in 300 seconds. Saving...
1161:M 24 Dec 10:46:38.017 * Background saving started by pid 3751
3751:C 24 Dec 10:46:38.017 # Failed opening the RDB file admin (in server root dir /etc/cron.d) for saving: Permission denied
1
2
3
4
自己明明是通過yum安裝的redis,redis-server的啟動用戶也是reids,之前也能正常使用,怎么一段時間之后會出現不能set key的問題呢?
而且,redis怎么會去訪問 /etc/cron.d 這個危險的目錄呢?
/etc/cron.d這個目錄下面是存放crontab執行的定時任務腳本.
問題原因
Background saving這個是Redis用來保存以RDB模式運行的當前快照的線程所寫入的日志.
redis的不安全訪問,導致配置被修改.
攻擊者想利用redis直接修改crontab配置,實現一些定時任務寫入,從而去執行一些"特殊"命令(比如,挖礦等),甚至掌控服務器.
解決方法
永久方法
修改配置文件.
requirepass foobared # foobared 換成你的密碼
1
下面部分不影響,但是是更安全的做法.redis3.2后可用.
bind 0.0.0.0 # 綁定到具體地址
protected-mode yes # 開啟保護模式,該模式將需配置bind ip或者設置訪問密碼
1
2
重啟redis-server
臨時方法
通過redis-cli進入redis客戶端,然后通過config設置密碼(直到重啟前有效).
config get requirepass # 查看當前密碼
1
1) "requirepass"
2) ""
1
2
如果結果如上,則表明當前沒有密碼.
(error) NOAUTH Authentication required.
1
如上則表示有密碼,而你是未授權訪問的.
設置新密碼:
config set requirepass <you password> # <you password> 替換成你的密碼
1
通過 config get檢查是否設置成功.設置成功后,通過下面命令認證:
auth <you password> # <you password> 替換成你的密碼
get a
1
2
如果能看到正常的返回值,就說明成功了.
這樣就能避免別人輕易訪問redis-server.
注意此處的密碼長度最好比較長,比如10位以上,因為redis的速度太快了,通過暴力破解的可能性高於通常的http方式.
不安全方法
bgsave快照操作出錯時停止寫數據到磁盤,這樣后面寫錯均會失敗,為了不影響后續寫操作,故需將該項值改為no.
修改stop-writes-on-bgsave-error配置為no
config set stop-writes-on-bgsave-error no
1
或者修改配置文件
stop-writes-on-bgsave-error # 把后面的yes設置為no即可
1
重啟redis.
隱藏危險命令
此外,還能通過修改redis的config命令,來不讓其他人修改redis的配置.
# 在redis-cli中
rename config 'ldconfig'
1
2
最好還是將redis配置為證書訪問,因為redis的速度太快了,短密碼被暴力破解的可能性不低.
當然還可以通過其他工具控制訪問來源,用戶等,比如firewall.
————————————————
版權聲明:本文為CSDN博主「咕咕咕zhou」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/weixin_46080554/article/details/103678056