一個致命的 Redis 命令,導致公司損失 400 萬
阿新 • • 發佈:2018-12-13
原文地址 血的教訓啊~要引以為戒
危險命令有哪些???
Redis 的危險命令主要有以下幾個:
-
keys
客戶端可查詢出所有存在的鍵。對 Redis 稍微有點使用經驗的人都知道線上是不能執行 keys *
相關命令的,雖然其模糊匹配功能使用非常方便也很強大,在小資料量情況下使用沒什麼問題,資料量大會導致 Redis 鎖住及 CPU 飆升,在生產環境建議禁用或者重新命名!
-
flushdb
Delete all the keys of the currently selected DB. This command never fails.
刪除 Redis 中當前所在資料庫中的所有記錄,並且此命令從不會執行失敗。
-
flushall
Delete all the keys of all the existing databases, not just the currently selected one. This command never fails.
刪除 Redis 中所有資料庫中的所有記錄,不只是當前所在資料庫,並且此命令從不會執行失敗。
-
config
客戶端可修改 Redis 配置。
怎麼禁用或重新命名危險命令?
看下 redis.conf
預設配置檔案,找到 SECURITY
區域,如以下所示。
################################## SECURITY ################################### # Require clients to issue AUTH <PASSWORD> before processing any other # commands. This might be useful in environments in which you do not trust # others with access to the host running redis-server. # # This should stay commented out for backward compatibility and because most # people do not need auth (e.g. they run their own servers). # # Warning: since Redis is pretty fast an outside user can try up to # 150k passwords per second against a good box. This means that you should # use a very strong password otherwise it will be very easy to break. # # requirepass foobared # Command renaming. # # It is possible to change the name of dangerous commands in a shared # environment. For instance the CONFIG command may be renamed into something # hard to guess so that it will still be available for internal-use tools # but not available for general clients. # # Example: # # rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52 # # It is also possible to completely kill a command by renaming it into # an empty string: # # rename-command CONFIG "" # # Please note that changing the name of commands that are logged into the # AOF file or transmitted to slaves may cause problems.
看說明,新增 rename-command
配置即可達到安全目的。
1)禁用命令
rename-command KEYS ""
rename-command FLUSHALL ""
rename-command FLUSHDB ""
rename-command CONFIG ""
2)重新命名命令
rename-command KEYS "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" rename-command FLUSHALL "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" rename-command FLUSHDB "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" rename-command CONFIG "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
上面的 XX 可以定義新命令名稱,或者用隨機字元代替。
經過以上的設定之後,危險命令就不會被客戶端執行了。