簡介
Redis在6版本之前是沒有權限的概念的,所以所有連接的客戶端都可以對Redis里面的數(shù)據(jù)進行操作,也可以使用所有高危命令,這樣就可能存在Redis直接down掉或者數(shù)據(jù)被全部清空的情況。
- 當執(zhí)行
flushall或者flashdb的時候會清空掉數(shù)據(jù)庫里面的所有數(shù)據(jù)。 - 當執(zhí)行
DEBUG SEGFAULT的時候Redis進程會直接down掉。如下圖所示:202011221955.png
在Redis 5以及之前的版本為了避免這種情況的出現(xiàn),可以使用 rename-command將高危命令禁用掉。
rename-command KEYS ""
rename-command FLUSHALL ""
rename-command FLUSHDB ""
rename-command CONFIG ""
rename-command EVAL ""
rename-command SHUTDOWN ""
以上方法雖然可以解決掉高危命令帶來的問題,但是只是使用了簡單粗暴的方式,沒有做的比較細致。
ACL 權限
Redis ACL是Access Control List(訪問控制列表)的縮寫,該功能允許根據(jù)可以執(zhí)行的命令和可以訪問的鍵來限制某些連接。它的工作方式是,在連接之后,要求客戶端進行身份驗證,以提供用戶名和有效密碼:如果身份驗證階段成功,則連接與給定用戶關聯(lián),并且該用戶具有限制。可以對Redis進行配置,以使新連接已過“默認”用戶進行身份驗證(這是默認配置),因此,配置默認用戶具有的能力是,僅向連接提供特定功能子集的功能未明確認證。
為某個用戶設置權限可以使用下面命令:
ACL SETUSER test >passwd on allkey +set
setuser...on表示啟用此用戶,off則是只定義一個不可用(unaccessable)的用戶。
>passwd表示給當前用戶設置密碼,可以通過auth命令進行登錄acl控制的用戶。
auth test passwd

+set當前用戶擁有執(zhí)行set命令的權限,與之相反的是 -set表示取消指定用戶執(zhí)行set命令的權限。
切換用戶之后只對指定的命令擁有執(zhí)行權限。

acl 配置文件
一般情況下,我們使用命令行設置的acl權限只是保存在內存里面,當Redis進程重啟之后我們設置的權限就不見了。那我們應該怎么辦呢,對于這種情況,官方也想到了,提供了acl的配置文件。在Redis的配置文件(redis.conf)中可以配置acl文件的位置:
aclfile /etc/redis/users.acl
那么acl里面到底保存的是什么呢?其實acl里面保存的就是命令 acl list執(zhí)行的結果。其中密碼的經(jīng)過加密了的也比較安全。
下圖是acl配置文件的樣例,是通過執(zhí)行命令 acl save生成的。

下圖是命令 acl list執(zhí)行的結果。

注意
acl 權限不會自動寫入到配置文件里面,在生成ACL配置文件的時候一定要注意執(zhí)行夏明命令進行持久化(需要先配置 aclfile)
acl save
標 題:《Redis 6.0新特性——ACLs》
作 者:zeekling
提 示:轉載請注明文章轉載自個人博客:小令童鞋
