Linux——redis理论、安全模型

2 篇文章 0 订阅

一、redis 主要的data type

  1. redis 的原生客户端
  2. redis 支持通过python php golang 等语言连接
  3. redis 主要适用场景

二、redis如何进行数据存储

  1. 非关系数据库    不使用二维表   redis 使用键值对完成数据的存储
  2. redis一共有16个库 ,不同的库使用编号   0-15
  3. redis 在存储每一个键值对的时候,为键分配对应的slot
  4. redis优先在内存中完成数据的读取 写入 修改等操作   // redis 数据操作速度很快
  5.  redis的服务端进程在运行期间向操作系统申请内存,保存数据,一旦服务端进程停止,操作系统给进程分配的内存等系统资源都会回收,重新启动redis 服务端之后,进程再次向操作系统申请内存,操作系统将给进程 分配新的内存页,如果redis只在内存中保存数据那么就很容易发生数据丢失。内存属于易失性存储。
  6. 基于5的问题,redis 提出了数据持久化的策略
    • rdb   redis database 对数据进行快照,并保存到指定文件,再重启后从指定的快照文件恢复数据    
      1. rdb 持久化在大部分情况下都是默认启用
      2. save 时间:以秒为单位  次数:数据变更操作的次数     //在规定时间间隔中,数据变更的次数达到指定次数,则对redis进行快照.快照由bgsave 指令完成
      3. rdb文件名称  rdbfilename
      4. 文件的保存位置 dir
      5. 在每一次redis 服务端进程停止的时候,自动执行一个bgsave 更新rdb数据快照
    • aof   append only file 持续追踪redis数据变更,并将数据变更的指令写入aof文件中,所以aof 文件实际是记录redis数据操作的日志文件
      1. aof持久化在更新aof文件,有三种策略   appendfsync
        1. no      使用操作系统默认时间设置更新AOF文件,一般在linux操作系统中为半个小时       更新需要的时间更久,也比较容易发生数据丢失的情况
        2. everysec 每一秒更新AOF文件     文件更新速率更加频繁,数据不容易丢失
        3. always  追踪每一个数据变更操作,一旦发生就更新到AOF文件中  最不可能发生数据丢失,但是需要频繁更新AOF文件
      2. aof 策略默认不启用,需要手动启用
        1. appendonly   值为yes 代表启用,值为no代表不启用
      3. aof 因为是一个只增文件,所以文件大小会不断增加,所以在文件大小超过一定大小后,需要对文件进行重写,以压缩AOF文件大小
        1. aof的重写策略
          1. 文件大小
          2. 和文件相较于上一次重写时的大小
        2. AOF文件的重写 是通过 bgrewriteaof 指令实现
      4. 在aof 和 rdb 同时启用情况下,redis 优先从aof文件进行数据恢复,rdb文件就会被忽略
      5. 在同时启用的情况下,一定要保证在启用aof前通过,先创建AOF文件,否则可能发生数据丢失的情况

三、redis 的安全模型

  1. redis 默认情况下,所有的数据操作由一个叫default的用户完成,这个用户没有使用任何的密码保护,并且所有的redis实例都有default
  2. redis 默认情况下 仅监听环回口 lo逻辑端口 redis 还支持通过socket 套接字文件进行访问 以上的链接服务端的设置,都限制redis的客户端必须和redis服务端在同一个节点
  3. 如果redis 被配置为监听非LOOPBACK地址后,需要开启保护模式,在保护模式下,所有用户的访问必须要验证密码,仅允许在127.0.0.1 上登录redis的用户不需要验证口令

修改redis监听系统中所有的可用地址

vim  /etc/redis/redis.conf

 4. requirepass

可以直接配置一个访问redis实例的密码 所有客户端对于redis服务端的访问都使用同一个密码,同时密码以明文传输 所以安全性不够,redis更推荐使用专门的acl指令 另外配置用户 密码 和权限

redis 验证用户口令的命令  

auth  [用户名] 密码

[root@bogon ~]# systemctl restart redis
[root@bogon ~]# redis-cli  
127.0.0.1:6379> 
127.0.0.1:6379> keys *
(error) NOAUTH Authentication required.			// 提示需要密码
127.0.0.1:6379> auth redhat123
OK
127.0.0.1:6379> keys *
 1) "bike2"
 2) "counter"
 3) "set2"
 4) "bike:3"
 5) "newke"
 6) "bike"
 7) "queue2"
 8) "game_event"
 9) "bike:2"
10) "eee"
11) "site1"
12) "sset1"
13) "bike:1"
14) "set1"
15) "newqueue"
16) "bike1"
127.0.0.1:6379> exit
 

5.ACL 指令

确保用户在使用给定用户访问时,使用最小权限

acl list 列出redis中所有的用户 密码  权限

 

127.0.0.1:6379> acl list 
1)"user default on nopass ~* &* +@all"			// 默认用户default的基本信息 
用户default 账号启用,用户账号没有设定密码,允许用户控制所有的键值对和频道,用户有权运行任何redis指令
a.user 			// 用户账号
b.default		// 用户名 
c.on 			// 用户账号启用 即此用户可以访问redis数据库
d.nopass		// 当前用户无密码    用户密码
// >密码   设置密码 此处提交明文密码,由redis进行加密
// #加密后的字符串 此处直接使用加密后的字符串提交,无需redis	// 进行机密 提交的字符串必须使用sha256 进行加密
e.~*			// 允许访问的键名  ~ 允许访问的键名 键的名匹配模式  * 
// redis 7.0 以上的版本还可以详细区分读写权限 
// %RW~键名匹配模式      
f.&*			// redis 在作为消息队列使用时,可以进行消息队列的建立和发布
// 建立不同的消息队列时,会使用publish发布频道 和
// scribe 命令实现订阅频道
// & 限制对于频道的订阅
// &频道名称的匹配模式
// &* 开放所有的channel(频道)
g.+@all		// 授权命令,
// +命令1|子命令或者参数…… 授权用户可以使用
// -命令1|子命令 或者参数……  禁止用户使用的命令 
// @all 代表所有的指令

(6)创建用户以及设置用户权限 
acl setuser 
acl load 文件名
acl list    以acl文件格式列出用户信息
acl getuser 用户名  	已较有条理的方式列出用户的基本信息
acl deluser 用户名 	删除用户
acl whoami 查看当前登录用户
acl users   列出所有用户
acl save    将当前的用户配置保存到ACL文件

127.0.0.1:6379> ACL SETUSER alice 
OK
127.0.0.1:6379> acl list 
1) "user alice off &* -@all"

alice 用户账号未启用  没有授权任何键和命令的使用 但是可以访问所有的频道 redis不同版本用户的初始化设定不同

启用用户,并给用户设定对应的权限

127.0.0.1:6379> ACL SETUSER alice on 			// 启用用户
OK
127.0.0.1:6379> acl list 
1) "user alice on &* -@all"
2) "user default on nopass ~* &* +@all"
127.0.0.1:6379> ACL SETUSER alice >redhat			// 设置密码
OK
127.0.0.1:6379> ACL LIST
1) "user alice on #7d3b5c83009fadf734c06eeecd7fbe256c69f71c8ba0429e4d7ad5f54b2e4097 &* -@all"
2) "user default on nopass ~* &* +@all"
127.0.0.1:6379> ACL SETUSER alice -@all +set +get			//授权命令 
OK
127.0.0.1:6379> ACL GETUSER alice 
 1) "flags"
 2) 1) "on"
    2) "allkeys"
    3) "allchannels"
 3) "passwords"
 4) 1) "7d3b5c83009fadf734c06eeecd7fbe256c69f71c8ba0429e4d7ad5f54b2e4097"
 5) "commands"
 6) "-@all +get +set"
 7) "keys"
 8) 1) "*"
 9) "channels"
10) 1) "*"
127.0.0.1:6379> auth alice redhat
OK
127.0.0.1:6379> get eee
"5555"
127.0.0.1:6379> set alice newuser
OK
127.0.0.1:6379> get alice 
"newuser"
127.0.0.1:6379> del alice 		// 这里删除键 缺少权限
(error) NOPERM this user has no permissions to run the 'del' command or its subcommand
127.0.0.1:6379> ACL SETUSER alice +@string 
OK
127.0.0.1:6379> ACL SETUSER default >redhat
OK
127.0.0.1:6379> acl list 
1) "user alice on #7d3b5c83009fadf734c06eeecd7fbe256c69f71c8ba0429e4d7ad5f54b2e4097 ~* &* -@all +@string"
2) "user default on #7d3b5c83009fadf734c06eeecd7fbe256c69f71c8ba0429e4d7ad5f54b2e4097 ~* &* +@all"
127.0.0.1:6379> auth alice redhat
OK
127.0.0.1:6379> set a_kay asfsdfa
OK
127.0.0.1:6379> get a_key
(nil)
127.0.0.1:6379> mset b_ksy asdasfa c_key sdfdsfs
OK
127.0.0.1:6379> mget a_key b_key c_key
1) (nil)
2) (nil)
3) "sdfdsfs"
127.0.0.1:6379> mget a_kay b_ksy c_key
1) "asfsdfa"
2) "asdasfa"
3) "sdfdsfs"
127.0.0.1:6379> auth default redhat   //使用auth 可以直接在不同用户之间切换 
OK
127.0.0.1:6379> acl list 
1) "user alice on #7d3b5c83009fadf734c06eeecd7fbe256c69f71c8ba0429e4d7ad5f54b2e4097 ~* &* -@all +@string"
2) "user default on #7d3b5c83009fadf734c06eeecd7fbe256c69f71c8ba0429e4d7ad5f54b2e4097 ~* &* +@all"

在为用户设置密码后,登录redis库的操作方法:

[root@bogon ~]# redis-cli --user default --pass redhat		// 使用明文密码
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
127.0.0.1:6379> exit
[root@bogon ~]# redis-cli --user default --askpass		// 不显示明文密码
Please input password: ******
127.0.0.1:6379> exit

[root@bogon ~]# redis-cli 			// 连接redis服务器之后再登录
127.0.0.1:6379> auth default redhat
OK

  • 8
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值