Redis 6.0新特性——ACLs

簡介

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
202011222015.png

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

切換用戶之后只對指定的命令擁有執(zhí)行權限。

image.png

acl 配置文件

一般情況下,我們使用命令行設置的acl權限只是保存在內存里面,當Redis進程重啟之后我們設置的權限就不見了。那我們應該怎么辦呢,對于這種情況,官方也想到了,提供了acl的配置文件。在Redis的配置文件(redis.conf)中可以配置acl文件的位置:

aclfile /etc/redis/users.acl

那么acl里面到底保存的是什么呢?其實acl里面保存的就是命令 acl list執(zhí)行的結果。其中密碼的經(jīng)過加密了的也比較安全。

下圖是acl配置文件的樣例,是通過執(zhí)行命令 acl save生成的。

image.png

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

image.png

注意

acl 權限不會自動寫入到配置文件里面,在生成ACL配置文件的時候一定要注意執(zhí)行夏明命令進行持久化(需要先配置 aclfile)

acl save

標 題:《Redis 6.0新特性——ACLs
作 者:zeekling
提 示:轉載請注明文章轉載自個人博客:小令童鞋

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容