• Redis ACL 规则说明


    make great efforts

    前情回顾

    上一篇文章 我们整体性的介绍了 RedisACL,我们来回顾下 ACL 的两种配置方式。

    redis 使用 acl 有两种方式可以配置,分别是 configaclfile 模式。在 config 配置文件中配置的 ACL 权限,需要执行 ACL LOAD 或者 重启 Redis 服务 才能生效,事实上我们可以直接在命令行下配置 ACL,在命令行模式下配置的权限无需重启服务即可生效。

    我们也可以在命令行模式下配置 ACL 并将其持久化到 aclfile 或者 config 文件中(这取决于配置文件中选择的是 config模式 还是 外部 aclfile 模式),一旦将 user 权限持久化到 aclfileconfig 文件中,下次重启就会自动加载该权限,注意如果忘记持久化,一旦服务宕机或重启,该权限就会丢失。

    # 如果使用 config 模式,将 ACL 权限持久化到 redis.conf 文件中使用下面的命令:
    config rewrite
     
    # 如果使用 aclfile 模式,将 ACL 权限持久化到 users.acl 文件中使用下面的命令:
    acl save
    
    • 1
    • 2
    • 3
    • 4
    • 5

    说明:redis acl 是 redis v 6.0 扩展的 Auth 机制,因此要使用 acl 功能,redis 服务必须是 6.0 及其以上版本(redis version ≥ 6.0)。

    ACL 定义规范

    ACL 是使用 DSL(Domain specific language) 定义的,该 DSL 描述了用户能够执行的操作。该规则始终 从上到下,从左到右应用,因为规则的顺序对于理解用户的实际权限很重要。

    ACL 规则可以在 redis.conf 文件以及 users.acl 文件中配置 DSL,也可以在命令行中通过 ACL 命令配置

    接下来的我们细说 ACL 的规则以及命令描述。

    启用和禁用用户

    • on:启用用户:可以以该用户身份进行认证。
    • off:禁用用户:不再可以使用此用户进行身份验证,但是已经通过身份验证的连接仍然可以使用。

    允许和禁止调用命令

    • +:将命令添加到用户可以调用的命令列表中。
    • -:将命令从用户可以调用的命令列表中移除。
    • +@:允许用户调用 类别中的所有命令,有效类别为 @admin,- @set,@sortedset 等,可通过调用 ACL CAT 命令查看完整列表。特殊类别 @all 表示所有命令,包括当前和未来版本中存在的所有命令。
    • -@:禁止用户调用 类别中的所有命令。
    • +|subcommand:允许使用已禁用命令的特定子命令。
    • allcommands:+@all 的别名。包括当前存在的命令以及将来通过模块加载的所有命令。
    • nocommands:-@all 的别名,禁止调用所有命令。

    允许或禁止访问某些 Key

    • ~:添加可以在命令中提及的键模式。例如 ~**allkeys 允许所有键。
    • *resetkeys:使用当前模式覆盖所有允许的模式。如:~foo:* ~bar:* resetkeys ~objects:* ,客户端只能访问匹配 object:* 模式的 KEY

    为用户配置有效密码

    • >:将此密码添加到用户的有效密码列表中。例如,>mypass“mypass” 添加到有效密码(采用 sha256 加密保存)列表中。该命令会清除用户的 nopass 标记。每个用户可以有任意数量的有效密码。
    • <:从有效密码列表中删除此密码。若该用户的有效密码列表中没有此密码则会返回错误信息。
    • #:将此 SHA-256 哈希值添加到用户的有效密码列表中。该哈希值将与为 ACL 用户输入的密码的哈希值进行比较。允许用户将哈希存储在 users.acl 文件中,而不是存储明文密码。仅接受 SHA-256 哈希值,因为密码哈希必须为 64 个字符且小写的十六进制字符。
    • !:从有效密码列表中删除该哈希值。当不知道哈希值对应的明文是什么时很有用。
    • nopass:移除该用户已设置的所有密码,并将该用户标记为 nopass 无密码状态:任何密码都可以登录。resetpass 命令可以清除 nopass 这种状态。
    • resetpass:情况该用户的所有密码列表。而且移除 nopass 状态。resetpass 之后用户没有关联的密码同时也无法使用无密码登录,因此 resetpass 之后必须添加密码或改为nopass 状态才能正常登录。
    • reset:重置用户状态为初始状态。执行以下操作 resetpass,resetkeys,off,-@all

    ACL 命令说明

    • ACL HELP,查看 ACL 帮助信息:
    alc help
    
    • 1

    在这里插入图片描述

    • ACL CAT,查看命令类别,用于授权:
    # 显示所有的命令类别。
    ACL CAT
    # 显示所有指定类别下的所有命令。 
    ACL CAT <category>
    
    • 1
    • 2
    • 3
    • 4
    • ACL DELUSER,删除指定的用户:
    # 删除指定的用户
    acl deluser <username>
    
    • 1
    • 2
    • ACL DRYRUN,返回用户是否可以在不执行给定命令的情况下执行该命令:
    acl dryrun <username> command
    
    • 1
    • ACL GETUSER,使用下面的命令查看用户的 ACL 权限:
    # 查看用户的 ACL 权限
    acl getuser <username>
    
    • 1
    • 2
    • ACL GENPASS,生成一个安全的 256 位用户密码。可选的“位”参数可用于指定不同的大小:
    # 删除指定的用户
    acl genpass <username>
    
    • 1
    • 2
    • ACL LIST,我们可以使用 ACL LIST 命令来查看当前活动的 ACL,默认情况下,有一个 “default” 用户:
    127.0.0.1:6379> acl list
    1) "user default on nopass ~* +@all"
    
    • 1
    • 2

    其中 user 为关键词,default 为用户名,后面的内容为 ACL规则 描述,on 表示活跃的,nopass 表示无密码, ~* 表示所有key,+@all 表示所有命令。

    所以上面的命令表示活跃用户 default 无密码且可以访问所有命令以及所有数据。

    • ACL SETUSER,使用下面的命令创建或修改用户属性,username 区分大小写:
    #username区分大小写
    #若用户不存在则按默认规则创建用户,若存在则修改用户属性
    SETUSER <username> [attribs ...]
     
    #若用户不存在,则按默认规则创建用户。若用户存在则该命令不做任何操作。
    ACL SETUSER <username> 
     
    #若用户不存在,则按默认规则创建用户,并为其增加。若用户存在则在已有规则上增加 
    ACL SETUSER <username> <rules> 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • ACL USERS,返回所有用户名:
    acl users
    
    • 1
    • ACL WHOAMI,返回当前用户名:
    acl whoami
    
    • 1
    • ACL LOAD,我们也可以直接在 aclfile 中修改或新增 ACL 权限,修改之后不会立刻生效,我们可以在 redis 命令行中执行 acl load 将该 aclfile 中的权限加载至 redis 服务中:
    # 将 aclfile 中的权限加载至 redis 服务中,是配置生效
    acl load
    
    • 1
    • 2
    • ACL LOG,查看 ACL 安全日志:
    acl log
    
    • 1
    • ACL SAVE,前面提到过,我们可以使用 acl save 命令将当前服务器中的 ACL 权限持久化到 aclfile 中,如果没持久化就关闭 redis 服务,那些 ACL 权限就会丢失,因此我们每次授权之后一定要记得 ACL SAVEACL 权限持久化到 aclfile 中:
    # 将 acl 权限持久化到磁盘的 aclfile 中
    acl save
    
    # 如果使用 redis.conf 配置 ACL,则使用 config rewrite 命令将 ACL 持久化到 redis.conf 中
    config rewrite
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • AUTH,使用 auth 命令切换用户:
    AUTH <username> <password>
    
    • 1

    以上就是关于 Redis ACL 命令的详细说明,你 “学废” 了么?

    “只有每天不断学习,才能成长为更好的自己。” – 巨石强森(Dwayne Johnson)

  • 相关阅读:
    ansible学习笔记【14】lvg模块、lvol模块
    Java面试宝典.exe程序成功运行,经典 Java 万字笔记,查漏补缺,备战跳槽面试
    你不知道的互联网公司招聘黑话大全
    大数据冷热分离方案
    十大网站助力人工智能学习之路
    前端HTML面试题:meta 元素都有什么
    Python—argparse模块
    用树莓派PICO做一个桌面时钟超详细教程!
    【笔记】【信息论与编码】第三章 离散信源
    2023 年如何学习编程
  • 原文地址:https://blog.csdn.net/ChaITSimpleLove/article/details/134508854