• 框架——缓存框架——redis——功能——安全(security)


    1、概念

    安全由外到内依次分为以下四个部分,

    第一部分,保护redis服务器不暴露在互联网,不随意访问,通常是由组织内部的防火墙等之类。略。

    第二部分,保护redis服务器不被非法访问,即被不安全的客户端访问。

    第三部分,保护redis在运行过程中不被攻击,例如不会被注入命令,不会被修改配置等。

    第四部分,保护redis的文件,redis的安装文件,运行中生成的文件不会被破坏。

    1.1    服务器安全

    不被非法访问的安全策略:

    第一种,开启安全模式,在服务端指定客户端IP白名单,只有白名单上的客户端才可以访问。

    // 开启安全模式
    protected-mode yes;
    // 设置白名单
    bind 127.0.0.1
    

      第二种,设置密码,在redis.config中设置。

    // 设置密码,password修改为自己的密码
    requirepass password
    

      不被运行中攻击的安全策略:

    禁用某个命令。格式为:rename-command command-name "",例如config,

    rename-command CONFIG ""
    

      不要在字符串中包含可执行命令或者是可执行脚本。

    1.2    文件安全

    Redis服务器通常都是部署在Linux系统中的,原著建议不使用root用户,为redis单独建立一个用户,这个用户只有redis文件相关的权限。

    2、ACL

     2.1   概念

    ACL全称为Access control list,访问控制。

    它的功能如下,引用原著:

      You want to improve security by restricting the access to commands and keys, so that untrusted clients have no access and trusted clients have just the minimum access level to the database in order to perform the work needed. For instance, certain clients may just be able to execute read only commands.

    限制客户端非法访问。访问成功的客户端,限制它们的权限(数据和命令)。

      You want to improve operational safety, so that processes or humans accessing Redis are not allowed to damage the data or the configuration due to software errors or manual mistakes. For instance, there is no reason for a worker that fetches delayed jobs from Redis to be able to call the FLUSHALL command.

    保护指令执行的安全性。禁止修改一些关键配置,或者破坏数据等。

    核心其实就两点。

    第一,管理用户,用户增,删,改,查,启用,禁用。

    第二,管理用户权限,数据权限,命令权限,其他功能权限。

    2.2    命令格式

    Acl命令的格式为:acl subcommand args,

    第一部分,acl,固定字符串。

    第二部分,subcommand,子命令,分为两类,用户管理,权限管理。

    第三部分,参数,由具体的子命令决定。有些子命令甚至没有参数。

    2.3    管理用户

    查看用户:

    acl list,查看所有用户。

    > ACL LIST
    1) "user default on nopass ~* &* +@all"
    

      第一部分,user default,表示用户名称为default

    第二部分,on或者off,启用,禁用状态。

    第三部分,nopass,表示没有密码,有密码则显示密码。

    第四部分,~*, 表示所有的key值权限。

    第五部分 &*,表示所有的channel权限。

    第六部分,+@all,表示所有的command权限。

    Acl getuser username,查看名称为userName的特定用户。

    新增 & 修改用户:

    用户不存在,则为新增用户,存在,则为修改用户

    acl setuser username args(密码,权限等等)
    

      修改密码:

    格式为:> password。第一部分,固定字符串大于号。第二部分,自定义密码字符串。

    acl setuser username >password
    

      启用:

    acl setuser userName on
    

      禁用:

    acl setuser userName off
    

    2.4    数据权限

    格式:

    (% R 或 W 或RW) ~ (pattern) (resetkeys)

    格式2:

    allkeys

    第一部分,指定读写权限,可选,默认为读写权限。

    第二部分,固定字符串~。

    第三部分,key值名称的表达式。

    第四部分,resetkeys,在此之前指定的数据权限无效,之后才有效。

    示例:

    为用户test添加以user:为前缀key值的读写权限

    acl setuser test %RW~user:*
    

      只有role:*数据权限有效,user:*无效

    acl setuser test %RW~user:* resetkeys ~role:*
    

    2.5    channel权限

    格式:

    (&) pattern

    格式2

    allchannels

    第一部分,固定字符串&。

    第二部分,channel名称的表达式。

    示例:

    所有频道

    acl setuser test allchannels
    

      以user为前缀的频道

    acl setuser test user*
    

    2.6    命令权限

    格式:

    (+ 或 -) (cmd 或 @cmd类别) (|subcmd 或参数)

    格式2(allcommands 或 nocommands)

    第一部分,加号或者减号,表示添加权限还是删除权限。

    第二部分,指定命令,三种格式,第一种,某个命令的名称,例如get, set。 第二种,某个命令类别,例如@all, @hash。第三种,allcommands所有命令,nocommands无命令。

    第三部分,指定子命令,或者是命令的参数。

    示例:

    单个命令带子命令,acl setuser命令权限,acl其他命令无权限,例如acl list

    +acl|setuser
    

      命令类别,有哪些类别,可以参考官网

    +@hash
    

      allcommands与nocommands

    allcommands
    

    2.7   配置文件

    在配置文件中管理用户或配置权限时 ,格式与acl list单条输出内容一致。

    示例:

    user test allkeys allchannels allcommands
    

      也可以将权限的信息都单独写在一份以.acl为后缀的文件中。再在配置文件中指定acl的位置。

    aclfile /etc/redis/users.acl
  • 相关阅读:
    一个母亲一生撒的八个谎言(含泪推荐)!
    穷人必须做的四件大事
    八种人不太可能驰骋职场,有你吗?
    是谁让我如此忧伤?
    拒绝平淡:我用十年的时间名满天下
    高性能利器!华为云MRS ClickHouse重磅推出!
    MySQL 连接为什么挂死了?
    解读登录双因子认证(MFA)特性背后的TOTP原理
    云图说|初识数据仓库服务:云时代的数据分析助手
    号外!5G+X联创营华为云官网上线,5G 创业春天来了!
  • 原文地址:https://www.cnblogs.com/rain144576/p/16792912.html
Copyright © 2020-2023  润新知