日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

Redis 6.0权限控制命令ACLs详解

發布時間:2024/8/5 综合教程 23 生活家
生活随笔 收集整理的這篇文章主要介紹了 Redis 6.0权限控制命令ACLs详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 前言

在使用 Redis 6.0 之前的版本時,通常會遇到如下問題:

●執行 FLUSHALL命令,整個 Redis 數據庫就清空了

●執行 DEBUG SEGFAULT命令,導致 Redis 崩潰

●執行 KEYS命令,引起 Redis 的阻塞甚至宕機

......

針對以上問題,我們解決的辦法可能是使用 Redis 的 rename-command 將這些危險命令禁用或者重命名。也就是說,我們是有辦法防止上述情況發生的。

但是,對于另外一種情況:多個項目公用一套 Redis 集群,多項目的 KEY 實際上是共享的,這樣便存在安全風險。

我們如何解決多項目之間互相操作對方 KEY 的問題呢?

Redis 6.0 提供了一種新的特性 ACL,可以方便的解決上述的各類問題。

Redis Flushall 命令用于清空整個 Redis 服務器的數據(刪除所有數據庫的所有 key )。

Debug Segfault 命令執行一個非法的內存訪問從而讓 Redis 崩潰,僅在開發時用于 BUG 調試。

Keys 命令用于查找所有符合給定模式 pattern 的 key

redis.conf 中加入如下內容,禁用相應的命令

rename-command KEYS ""

rename-command FLUSHALL ""

rename-command DEBUG ""

2. 什么是 ACL

Redis ACL 是 Access Control List(訪問控制列表)的縮寫,該功能允許對訪問 Redis 的連接做一些可執行命令和可訪問的 KEY 的限制。

它的工作方式是,在連接之后,要求客戶端進行身份驗證,以提供用戶名和有效密碼:如果身份驗證成功,該客戶端連接與給定用戶綁定,并具有該用戶的訪問權限。

為了保證 Redis 向下兼容,Redis 6.0 中定義了一個默認的 “default” 用戶,該用戶擁有操作 Redis 的所有權限。也就是說,每個連接都能夠調用每個命令并訪問每個 KEY。同樣,使用 requirepass 設置訪問密碼的方式與舊版本也保持一致,只不過 Redis 6.0 的這個密碼僅對用戶 “default” 有效。

Redis AUTH 命令也在 Redis 6.0 中進行了擴展,現在支持兩個參數的訪問

AUTO <username> <password>

當按照舊版本的方式訪問時(在不輸入用戶名時,默認使用 default 用戶,做到向下兼容)

AUTO<password> 等價于 AUTOdefault <password>

2.1 什么時候使用 ACLs

在使用 ACL 前,我們應該考慮一下,使用 ACL 我們想要達到什么目的。

主要有下面兩種目的,我們可以通過使用 ACLs 來達成 :

1.希望通過限制對命令和 KEY 的訪問來提高安全性。以便不受信任的客戶端無法訪問,而受信任的客戶端僅具有滿足要求的最低操作權限。如:某些客戶端可能僅能執行只讀命令。

2.想提高操作安全性,以防止由于軟件或人為錯誤而導致非授權情況的操作,導致數據或配置的損壞。例如,不應該讓所有客戶端都能夠調用 FLUSHALL 命令。

3. ACL 規則

ACLS 是使用 DSL(Domain specific language,領域專用語言)來定義的。

可以通過兩種方式配置 ACL

在命令行通過 ACL 命令配置

開啟 Redis 配置文件中開啟 aclfile配置項,通過配置文件的方式加載

redis.conf 默認配置中, 使用外部 aclfile 是不開啟的

我們通過配置來啟用:aclfile /usr/local/redis6/users.acl

/usr/local/redis6/users.acl 即 acl 的配置文件

啟動或禁用用戶

●on啟用。可以使用該用戶進行身份認證

●off禁用。不能使用該用戶進行身份認證,但已通過身份認證的連接仍然可以使用。

啟用或禁用命令

●+<command>將 <command> 命令添加到用戶可調用的命令列表中

●-<command>從可調用的命令列表中移除 <command> 命令

●+@<category>允許用戶調用 <category> 分類中的所有命令(可通過 ACL CAT 命令查看完成分類列表)

●-@<category>禁止用戶調用 <category> 分類中的所有命令

●+<command>|subcommand允許使用原本禁用的特定類別下的特定子命令

●+@all允許調用所有命令,與使用 allcommands效果相同。包括當前存在的命令以及將來通過模塊加載的命令

●-@all禁止調用所有命令

允許或禁止訪問某些 KEY

●~<pattern> 添加符合條件的模式。如: ~* 允許所有 KEY,使用 ~* 與 allkeys效果相同

●resetkeys使用當前模式覆蓋所有允許的模式。如: ~foo:* ~bar:* resetkeys ~objects:* ,最終客戶端只允許訪問匹配 ~object:* 模式的 KEY

為用戶配置有效密碼

●><password>將密碼添加到用戶有效密碼列表中。例如:>password將會把 password添加到用戶的密碼列表中。該操作會清除用戶的 nopass 標記。每個用戶可由擁有多個有效密碼

●<<password>將密碼從用戶有效密碼列表中移除。列表中不存在改密碼時,會報錯。

●#<hash>將此 SHA-256 哈希值添加到用戶的有效密碼列表中。該哈希值將與 ACL 用戶輸入的密碼的哈希值進行比較。這將允許用戶將此哈希值存儲在 acl 配置文件中,而不是存儲明文密碼。僅接受 SHA-256 哈希值,因為密碼的哈希必須由 64 個字符長度的小寫的十六進制字符組成。

●!<hash>從有效密碼列表中刪除該哈希值。(適用于不知道哈希值指定的密碼但又想從用戶中刪除密碼的情況)

●nopass刪除用戶所有密碼,并將該用戶標記為不需要密碼。如果此指令引用于 default 用戶,則每個新的連接都將立即通過 default 用戶進行連接,而無需任何顯示的 AUTH 命令。

●resetpass清除用戶可用密碼列表的數據,并清除 nopass 狀態。之后該用戶將沒有任何關聯的有效密碼,將不允許登錄,直到為該用戶設置了有效密碼或將用戶設置成 nopass 狀態

reset重置用戶到初始狀態。該命令會執行以下操作:resetpass,resetkeys,off,-@ all。

未使用 nopass 標記且沒有有效密碼列表的用戶,實際上是無法使用的。因為無法以該用戶的身份登錄。

4. ACL 常用命令

ACL LIST

檢查當前活動的 ACL 列表

127.0.0.1:6379>ACL LIST

1) "user default on nopass ~* +@all"

首次安裝后只有一個默認的 default 用戶,其具有如下狀態:

●用戶名為 default

●用戶處于啟用狀態

●訪問不需要密碼

●可以訪問所有 KEY

●可以執行所有命令

ACL SETUSER

ACL SETUSER <username> 用戶不存在,則按默認規則創建用戶。用戶存在,則該命令不執行任何操作。

ACL SETUSER <username> <rules> 用戶不存在,則按默認規則創建用戶,并增加 <rules> 。用戶存在則在原有規則上增加 <rules>。

<username> 用戶名區分大小寫

// 創建一個名為 gcp的用戶

127.0.0.1:6379> ACL SETUSER gcp

OK

// 查詢所有活動的 ACL

127.0.0.1:6379> ACL LIST

1) "user default on nopass ~* +@all"

2) "user gcpoff -@all"

我們創建的 gcp用戶默認規則為:

●處于關閉狀態

●無法執行任何命令

●沒有匹配的訪問 KEY 的模式

●沒有有效的密碼

我們為其配置一些 ACL 規則

// 用戶狀態設置為啟用,密碼為 password,允許訪問以 cached: 開頭的 KEY,允許執行 get 命令

127.0.0.1:6379> ACL SETUSER gcpon >password~cached:* +get

OK

127.0.0.1:6379> ACL LIST

1) "user default on nopass ~* +@all"

2) "user gcpon #89e01536ac207279409d4de1e5253e01f4a1769e696db0d6062ca9b8f56767c8 ~cached:* -@all +get"

// set 一個以 cached: 開頭的 KEY 用來測試

127.0.0.1:6379> set cached:test test

OK

使用 AUTH 命令切換到 gcp用戶下,進行測試

// 使用 AUTH 切換到 gcp用戶下

127.0.0.1:6379> AUTH gcppassword

OK

// 使用 set 命令設置不符合匹配規則的 KEY

127.0.0.1:6379> set a 1

(error) NOPERM this user has no permissions to run the 'set' command or its subcommand

// 使用 set 命令設置符合匹配規則的 KEY

127.0.0.1:6379> set cached:aaa 1

(error) NOPERM this user has no permissions to run the 'set' command or its subcommand

// 使用 get 命令獲取不符合匹配的 KEY 值

127.0.0.1:6379> get a

(error) NOPERM this user has no permissions to access one of the keys used as arguments

// 使用 get 命令獲取符合匹配規則的 KEY 值

127.0.0.1:6379> get cached:test

"test"

測試結果與我們配置的 ACL 規則相符。

ACL GETUSER <username>

同 ACL LIST 作用類似。ACL GETUSER 用來獲取指定用戶的 ACL 狀態信息

127.0.0.1:6379>ACL GETUSER default

1) "flags" // 標記數組(啟用、可操作所有 KEY、可執行所有命令、無密碼)

2) 1) "on"

2) "allkeys"

3) "allcommands"

4) "nopass"

3) "passwords" // 密碼

4) (empty array)

5) "commands" // 命令匹配規則

6) "+@all"

7) "keys" // KEY 的模式匹配規則

8) 1) "*"

127.0.0.1:6379> ACL GETUSER gcp

1) "flags"

2) 1) "on"

3) "passwords"

4) 1) "89e01536ac207279409d4de1e5253e01f4a1769e696db0d6062ca9b8f56767c8"

5) "commands"

6) "-@all +get"

7) "keys"

8) 1) "cached:*"

ACL DELUSER

刪除用戶 ACL DELUSER <username>

// 創建一個測試用戶

127.0.0.1:6379> ACL SETUSER testuser

OK

127.0.0.1:6379> ACL LIST

1) "user default on nopass ~* +@all"

2) "user gcpon +@all"

3) "user testuser off -@all"

// 刪除用戶

127.0.0.1:6379>ACL DELUSER testuser

(integer) 1

// 查看結果

127.0.0.1:6379> ACL LIST

1) "user default on nopass ~* +@all"

2) "user gcpon +@all"

ACL USERS

查看 ACL 的所有用戶

127.0.0.1:6379> ACL USERS

1) "default"

2) "gcp"

ACL WHOAMI

查看當前操作的用戶

127.0.0.1:6379> ACL WHOAMI

"default"

ACL CAT

ACL CAT 顯示所有的 ACL 類別

ACL CAT <類別> 顯示指定類別中所有的 Redis 命令

127.0.0.1:6379> ACL CAT

1) "keyspace"

2) "read"

3) "write"

4) "set"

5) "sortedset"

6) "list"

7) "hash"

8) "string"

9) "bitmap"

10) "hyperloglog"

11) "geo"

12) "stream"

13) "pubsub"

14) "admin"

15) "fast"

16) "slow"

17) "blocking"

18) "dangerous"

19) "connection"

20) "transaction"

21) "scripting"

以 dangerous 為例,查看該類別包含的所有命令:

127.0.0.1:6379>ACL CAT dangerous

1) "bgsave"

2) "module"

3) "replconf"

4) "info"

5) "role"

6) "debug"

7) "slaveof"

8) "keys"

9) "flushdb"

10) "bgrewriteaof"

11) "lastsave"

12) "acl"

13) "psync"

14) "client"

15) "latency"

16) "save"

17) "migrate"

18) "pfselftest"

19) "swapdb"

20) "restore-asking"

21) "sync"

22) "shutdown"

23) "monitor"

24) "slowlog"

25) "pfdebug"

26) "flushall"

27) "sort"

28) "config"

29) "replicaof"

30) "cluster"

31) "restore"

ACL SAVE

前提:redis 配置中啟用了 aclfile 選項

將當前所有的 ACL 存入 aclfile,覆蓋 aclfile 內容

ACL LOAD

前提:redis 配置中啟用了 aclfile 選項

從 acl 文件中加載定義的 acl 規則

該命令保證所有的規則都有效時才能執行成功:

●如果 aclfile 文件中每一行都有效,則將所有內容加載到內存替換內存中現有的 ACL 規則

●如果文件中有一行或多行無效,則不會加載任何內容,繼續使用現有內存中的規則

ACL GENPASS

可以使用該命令來生成 Redis 密碼

該命令默認創建一個 256 bit 的 32 字節的偽隨機字符串,并將其轉換為 64 字節的字母+數字的字符串。如有有參數,則使用指定的位數長度

127.0.0.1:6379> ACL GENPASS

"e2ceb52e866908c2706e521b7d145eb78ec4b5806ef1fd0bcb4482687d2c82f7"

127.0.0.1:6379>ACL GENPASS 32

"fbcc163c"

127.0.0.1:6379> ACL GENPASS 64

"3ab469e7c659c19a"

ACL LOG

查看安全事件日志

該命令記錄如下 ACL 安全事件

●無法通過 AUTH 身份驗證的

●違背當前 ACL 規則,執行命令被拒絕

●訪問當前 ACL 規則中不允許的鍵,被拒絕訪問

127.0.0.1:6379> ACL LOG

1) 1) "count"

2) (integer) 1

3) "reason"

4) "auth"

5) "context"

6) "toplevel"

7) "object"

8) "AUTH"

9) "username"

10) "gcp"

11) "age-seconds"

12) "3076.3829999999998"

13) "client-info"

14) "id=4 addr=127.0.0.1:53462 fd=7 name= age=12138 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=40 qbuf-free=32728 obl=0 oll=0 omem=0 events=r cmd=auth user=default"

使用 RESET 命令清空 LOG

127.0.0.1:6379>ACL LOG RESET

OK

127.0.0.1:6379> ACL LOG

(empty array)

ACL HELP

ACL 命令幫助

127.0.0.1:6379> ACL HELP

1) ACL <subcommand> arg arg ... arg. Subcommands are:

2) LOAD -- Reload users from the ACL file.

3) SAVE -- Save the current config to the ACL file.

4) LIST -- Show user details in config file format.

5) USERS -- List all the registered usernames.

6) SETUSER <username> [attribs ...] -- Create or modify a user.

7) GETUSER <username> -- Get the user details.

8) DELUSER <username> [...] -- Delete a list of users.

9) CAT -- List available categories.

10) CAT <category> -- List commands inside category.

11) GENPASS [<bits>] -- Generate a secure user password.

12) WHOAMI -- Return the current connection username.

13) LOG [<count> | RESET] -- Show the ACL log entries.

總結

以上是生活随笔為你收集整理的Redis 6.0权限控制命令ACLs详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美日韩一区二 | 91成人网页 | 亚洲成人精品av | 国产精品一区麻豆 | 亚洲在线免费观看 | 国产熟妇搡bbbb搡bbbb | 成人在线免费观看网站 | 性色av一区二区三区在线观看 | www国产精品内射熟女 | 成人一区二区av | 亚洲精品丝袜 | 少妇久久久久久被弄高潮 | 亚洲日本中文字幕 | 四川丰满妇女毛片四川话 | 91黄免费| 亚洲一区二区中文 | 风流还珠之乱淫h文 | 热久久中文字幕 | 爱福利视频一区二区 | 成人在线观看免费高清 | 亚洲国产剧情 | 日韩日韩日韩日韩日韩 | 欧美性欧美zzzzzzzzz | 精品少妇无码av无码专区 | 男女性高潮免费网站 | 亚洲激情婷婷 | 国产成人aaa| 亚洲午夜久久久久久久久久久 | 90岁老太婆乱淫 | 亚洲精品www久久久久久 | 韩产日产国产欧产 | 五十路中出 | 国产日韩一区二区在线 | 欧美日韩激情在线一区二区三区 | 另类视频一区 | 无码人妻丰满熟妇精品 | 日日操天天操 | 国产日韩高清在线 | 色天天干 | 午夜xxxxx| 91片黄在线观看喷潮 | 依依激情网 | 免费的黄色av | 亚洲老老头同性老头交j | 国产麻豆午夜三级精品 | 91精品国产手机 | 在线成人免费视频 | 免费黄色小网站 | 国产精品免费久久久 | 91最新国产 | 欧美日本一区 | 欧美日韩一区二区视频在线观看 | 欧美日韩免费 | 顶级毛片 | 欧美一级淫片免费视频黄 | 欧美黄色高清视频 | 波多在线观看 | 国产精品性爱在线 | av观看网站 | 人人爽在线 | 日韩精品卡通动漫网站 | 69免费视频 | 伊人中文字幕在线观看 | 国内视频精品 | 日韩一区二区高清视频 | www.色图| 午夜精品在线免费观看 | 欧美岛国国产 | 开心激情av | 国产无遮挡又黄又爽又色 | 免费久久久久久 | 久久久国产成人一区二区三区 | 日本韩国欧美一区 | 在线青草 | 在线免费观看日韩视频 | 黄色片在线免费看 | 蜜桃av在线看 | 日本视频一区二区三区 | 激情午夜影院 | 国产一区二区在线观看视频 | 黄色网页网站 | 国产第二页| av女大全列表 | 对白刺激theporn | wwxx日本 | 成年人黄色录像 | 亚日韩欧美 | 黄色一级视屏 | 超碰97人人干 | 欧美大胆a视频 | 一区不卡在线观看 | 韩国91视频| 伊人夜色 | 欧美激情黑白配 | 99国产精品一区二区 | 中文字幕在线观看一区二区 | 欧美日韩国产成人精品 | 免费av在线播放 | 国产美女福利 |