linux12-redis->03acl安全策略发布与订阅(代码片段)

FikL-09-19 FikL-09-19     2022-12-09     311

关键词:

redis数据持久化

# 1、RDB:将数据通过二进制的方式保存下来,性能比较好 save m n
[root@docker ~]# vim /usr/local/redis/conf/redis.conf  #默认是开启的
save 900 1     #900秒内至少有1个key被改变则做一次快照
save 300 10    #300秒内至少有10key被改变做一次快照
save 60 10000  #60秒内至少有10000个key被改变则做一次快照
bgsave ==> dump.rdb 
save原理:  写入数据的时候可能会导致客户端阻塞的,同步
bgsave原理: 会有一个子进程,进行数据持久化(额外开销),异步
# RDB总结:
# 优点:
速度快,适合用作备份,主从复制也是基于RDB持久化功能实现的
# 致命性缺点:
会有数据丢失、导致服务停止几秒
# 2、AOF:将命令保存下来,恢复数据慢
类似于mysql binlog日志,重新会恢复到内存中
#  AFO优点: 不丢数据   aooendonly yes 开启AOF持久化
#  AOF 分别有三种备份策略,
[always:每个命令都记录],不丢数据,但是没错都要执行,IO比较高
[everysec:每秒记录一次],减少IO
[no:看机器的心情高兴了 就记录],全自动
# 3、混合模式:取两者方式优点集合

一、Redis新特性ACL安全策略

在Redis6之前的版本,我们只能使用requirepass参数给default用户配置登录密码,同一个Redis集群的所有开发都共享default用户,难免会出现误操作把别人的key删掉或者数据泄露的情况。

因此Redis6版本退出了ACL(Access Controller List)访问控制权限的功能,基于次功能,我们可以设置多个用户,并且给每一个用户单独设置命令权限和数据权限。为了保证向下兼容性,Redis6保留了default用户和使用requirepass 的方式给default用户设置密码,默认情况下default用户拥有Redis最大权限,我们使用的redis-cli链接时如果没有指定用户,默认也是default。

1.配置ACL

#1.查看当前所有用户
127.0.0.1:6379> acl list
user default on #a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3 ~* +@all
#2.配置ACL
127.0.0.1:6379> config rewrite
OK   #执行config rewrite重写配置后会自动在conf文件最下面新增一行记录配置default的密码和权限
[root@redis01 ~]# cd /usr/local/redis/conf
[root@redis01 ~]# egrep 'user default on' /usr/local/redis/conf/redis.conf 
user default on #a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3 ~* +@all

2.Redis设置密码

在Redis6之前,Redis只有一个default用户也是Redis中的超级管理员用户,如果要将其设置密码,需要修改Redis的配置文件
#设置密码
[root@redis01 ~]# vim /usr/local/redis/conf/redis.conf 
requirepass 123  #可将此内容注释即没有密码,或修改其他密码

#验证
[root@redis01 ~]# systemctl restart redis
[root@redis01 ~]# redis-cli 
127.0.0.1:6379> set a b
OK

3.使用ACL

我们可以直接在conf配置文件中使用上面default用户ACL这行DSL命令设置用户权限,或者我们也可以配置外部aclfile配置权限。配置aclfile需要先将conf中配置的DSL注释或者删除。
# 因为Redis不允许两种ACL管理方式同时使用,否则在启动Redis的时候会报错
#1.创建用户
127.0.0.1:6379> acl setuser test  #创建用户(不设置密码权限默认没有密码没有任何权限)
OK
127.0.0.1:6379> acl list  #查看用户
user default on #a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3 ~* +@all
user test on -@all

#2.启用用户
(用户默认情况下,是未激活状态)
127.0.0.1:6379> acl setuser test on  #激活用户
OK
127.0.0.1:6379> acl list
user default on #a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3 ~* +@all
user test on -@all

#3.给用户增加密码
127.0.0.1:6379> acl setuser test on >123
OK
127.0.0.1:6379> acl list
user default on #a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3 ~* +@all  
#+@all代表拥有所有权限
user test on #a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3 -@all  #-@all代表所有权限都没有

#4.查看当前用户
127.0.0.1:6379> acl whoami
"default"  #可以看做Redis的超级用户,拥有所有权限

#5.登录普通用户,是没有acl权限的
[root@redis01 ~]# redis-cli 
127.0.0.1:6379> auth test 123
OK
127.0.0.1:6379> acl list
(error) NOPERM this user has no permissions to run the 'acl' command or its subcommand

#6.认证
127.0.0.1:6379> auth default 123
OK
127.0.0.1:6379> acl whoami
"default"

#7.给用户设置权限
127.0.0.1:6379> acl setuser test on >123 ~name* +@all  #给test用户以name开头的key加上所有权限
127.0.0.1:6379> acl setuser test on >123 ~name* +set   #给test用户以name开头的key加上set权限
OK
127.0.0.1:6379> acl list
1) "user default on nopass ~* +@all"
2) "user test on #a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3 ~name* +@all"

127.0.0.1:6379> acl setuser dashuju  #创建大数据用户
OK
127.0.0.1:6379> acl setuser dashuju on >123 ~dashuju* +set +get  #给大数据用户的dashuju开头的key授set get权限
OK
127.0.0.1:6379> acl list
1) "user dashuju on #a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3 ~dashuju* -@all +set +get"
2) "user default on nopass ~* +@all"
3) "user test on #a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3 ~name* +@all"

#8.展示所有的用户
127.0.0.1:6379> acl list
user dashuji on #a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3 ~dashuju* -@all +get +set
user dashuju off -@all
user default on #a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3 ~* +@all
user test on #a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3 -@all

#9.展示所有用户名
127.0.0.1:6379> acl users
dashuji
dashuju
default
test

#10.展示当前用户
127.0.0.1:6379> acl whoami
"default"

#11.展示当前可授权限
127.0.0.1:6379> acl cat
 1) "keyspace"
 2) "read"
 3) "write"
 4) "set"
#12.查看一个用户所有的key
127.0.0.1:6379> acl getuser test
flags
on
passwords
a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3
commands
-@all
keys

#13.删除一个用户
127.0.0.1:6379> acl list
user dashuju off -@all
user default on #a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3 ~* +@all
127.0.0.1:6379> acl deluser dashuji   s#删除大数据用户
user dashuju off -@all
user default on #a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3 ~* +@all
user test on #a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3 -@all

4.保存ACL

我们可以使用 acl save 命令将当前服务器中的 ACL 权限持久化到 aclfile 中,如果没持久化就关闭 redis 服务, 那些 ACL 权限就会丢失,因此我们每次授权之后一定要记得 ACL SAVE 将 ACL 权限持久化到 aclfile中。
#1.首先在redis.conf配置文件中启用aclfile文件
[root@redis01 conf]# vim /usr/local/redis/conf/redis.conf
aclfile /usr/local/redis/conf/users.acl

#2.重启redis,如果没有user.acl文件可以手动创建一个
[root@redis01 ~]# systemctl restart redis
[root@redis01 conf]# ll
总用量 84
-rw-r--r-- 1 root root 85015 5月   1 20:29 redis.conf
[root@redis01 conf]# touch users.acl
[root@redis01 conf]# ll
总用量 84
-rw-r--r-- 1 root root 85015 5月   1 20:29 redis.conf
-rw-r--r-- 1 root root     0 5月   1 20:31 users.acl

#3.redis-cli连接到server
[root@redis01 ~]# redis-cli 
127.0.0.1:6379> acl list
1) "user default on nopass ~* +@all"
127.0.0.1:6379> acl setuser test on >123 ~name* +@all
OK
127.0.0.1:6379> acl list
1) "user default on nopass ~* +@all"
2) "user test on #a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3 ~name* +@all"
127.0.0.1:6379> acl save
OK
#4.查看文件是否存入内容
[root@redis01 conf]# ll  #没acl save之前
总用量 84
-rw-r--r-- 1 root root 84893 5月   1 20:33 redis.conf
-rw-r--r-- 1 root root     0 5月   1 20:31 user.acl
[root@redis01 conf]# ll  #acl save之前后
总用量 88
-rw-r--r-- 1 root root 84893 5月   1 20:33 redis.conf
-rw-r--r-- 1 root root   124 5月   7 05:41 users.acl  #可以看见文件已有大小,内容已存在

5.加载用户信息

我们也可以直接在 aclfile 中修改或新增 ACL 权限,修改之后不会立刻生效,我们可以在 redis 命令行中执行 acl load 将该 aclfile 中的权限加载至 redis 服务中
#1.修改users.acl文件内容
[root@redis01 conf]# vim users.acl   #添加一行tests用户信息
user default on nopass ~* +@all
user test on #a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3 ~name* +@all
user tests on #a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3 ~name* +@all

#2.使用命令重新加载用户信息会生成一个文件中指定的新用户tests
127.0.0.1:6379> acl load
OK
127.0.0.1:6379> acl list
1) "user default on nopass ~* +@all"
2) "user test on #a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3 ~name* +@all"
3) "user tests on #a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3 ~name* +@all"

二、Redis发布与订阅

Redis 通过 PUBLISH 、 SUBSCRIBE 等命令实现了订阅与发布模式, 这个功能提供两种信息机制, 分别是 订阅/发布到频道和订阅/发布到模式, 下文先讨论订阅/发布到频道的实现, 再讨论订阅/发布到模式的实现

1.角色(发布者、消费者、频道)

# 1、发布者
发布者最主要的工作就是将信息发布到频道中
# 2、消费者
消费者最主要的功能就是接收消费频道中的信息
# 3、频道
频道最主要的功能是存储发布者的信息,然后分别发给每一个消费者

2.模型

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rA8JNLSk-1621299654587)(C:\\Users\\17155\\Desktop\\下载图片\\1621223484813.png)]

3.发布订阅队列

1、publish 发布 subscribe 订阅
#1.发布一个test管道内容是123
127.0.0.1:6379> publish test 123
(integer) 1
127.0.0.1:6379> PUBLISH test 123
0
127.0.0.1:6379> PUBLISH test 123
1
127.0.0.1:6379> PUBLISH test abcd
1

#2.订阅(实时监控test管道的内容) #复制一下会话窗口 监听第一个发布的频道
127.0.0.1:6379> subscribe test
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "test"
3) (integer) 1
1) "message"
2) "test"
3) "123"

cisco基础:配置标准acl配置扩展acl配置标准命名acl配置扩展命名acl

...法访问。企业网络既要解决连连通的问题,还要解决网络安全的问题。配置标准ACL实现拒绝PC1(IP地址为192.168.1.1)对外问网络192.168.2.1的访问方案: 访问控制是网络安全防范和保护的主要策略,它的主要任务是保证网络资源... 查看详情

acl

...信都是企业网络中必不可少的业务需求,为了保证内网的安全性,需要通过安全策略来保障非授权用户只能访问特定的网络资源,从而达到对访问进行控制的目的。简而言之,ACL可以过滤网络中的流量,是控制访问的一种网络技... 查看详情

新手小白想学习渗透和网络安全,从哪里入手?

新手小白,中学毕业,前途迷茫,想学习渗透和网络安全相关的知识,要怎么入手,需要哪些基础,求大神指点,感激不尽。基础到入门的学习路线一、网络安全网络基础网络概述(行业背景+就业方向+课程体系结构)VmwareIP地... 查看详情

acl访问控制列表

ACL访问控制列表原理说明:ACL是网络设备常用的安全技术,通过手动配置可以部署网络安全策略,acl规则是检查流量通信特征。一般从rule5开始建立(留给后续添加优先使用),匹配即停止,默认permitany。每接口。每协议,每方... 查看详情

acl

...信都是企业网络中必不可少的业务需求,为了保证内网的安全性,需要通过安全策略来保障非授权用户只能访问特定的网络资源,从而达到对访问进行控制的目的。简而言之,ACL可以过滤网络中的流量,是控制访 查看详情

tungstenfabricsdn—基于tags的安全访问控制策略

目录文章目录目录传统的安全访问控制策略基于Tags(标签)的安全访问控制策略ApplicationTag传统的安全访问控制策略传统的的防火墙策略是针对单一IP地址,或Subnet进行配置的。在任何规模的数据中心中,都会导致防火墙规则的... 查看详情

tungstenfabricsdn—基于tags的安全访问控制策略

目录文章目录目录传统的安全访问控制策略基于Tags(标签)的安全访问控制策略ApplicationTag传统的安全访问控制策略传统的的防火墙策略是针对单一IP地址,或Subnet进行配置的。在任何规模的数据中心中,都会导致防火墙规则的... 查看详情

linux企业运维——kubernetes(十四)psp安全策略(代码片段)

Linux企业运维——Kubernetes(十四)PSP安全策略文章目录Linux企业运维——Kubernetes(十四)PSP安全策略1、PSP安全策略简介2、PSP安全策略配置1、PSP安全策略简介PodSecurityPolicy(简称PSP)是Kubernetes中Pod部署时重... 查看详情

教程篇(5.0)03.安全策略❀fortiedr❀fortinet网络安全专家nse5

  在本课中,你将学习在FortiEDR部署中的安全策略。  在这节课中,你将学习上图显示的主题。  通过展示FortiEDR策略的能力,你将了解策略的不同类型和模式。  FortiEDR有三种策略,它们共同维护系统的安全性... 查看详情

基本acl与高级acl

...是企业网络中必不可少的业务需求,但是为了保证内网的安全性,需要通过安全策略来保障非授权用户只能访问特定的网络资源,从而达到对访问进行控制的目的。简而言之,ACL可以过滤网络中的流量,控制访问的一种网络技术... 查看详情

acl访问控制列表

...信都是企业网络中必不可少的业务需求,为了保证内网的安全性,需要通过安全策略来保障非授权用户只能访问特定的网络资源,从而达到对访问进行控制的目的。简而言之,ACL可以过滤网络中的流量,是控制访 查看详情

linux_09------linux上系统扫描和安全策略

先谢慕课网/***linux系统扫描技术**主机扫描、路由扫描、批量服务扫描、系统安全策略(防SYN和ddos攻击)*//***主机扫描*pingfpinghping**fping*fping安装*下载:*(mkdir/Services&&cd/Services)*wggethttp://www.fping.org/dist/fping-3.13.tar.gz*解压:*tar-zx 查看详情

acl访问控制列表的一些基础知识

...于防止包成环,将数据包丢弃而ACL是访问控制列表是网络安全防范和保护的主要策略,它的主要任务是保证网络资源不被非法使用和访问。它是保证网络安全最重要的核心策略之一。访问控制涉及的技术也比较广,包括入网访问... 查看详情

ar系列路由器域间防火墙实施acl

...高级别访问低级别会记录状态)AR系列可以设置16种区域安全级别0-15,15保留给Loca区域使用位于两个不同级别的安全区域,低级别的默认不能主动访问高级别区域如果高级别区域主动访问低级别的区域,防火墙会记录一个状态,... 查看详情

ovn系列8--acl&安全组

参考技术A同大部分使用OVS实现安全组功能的方案一样,OVN通过流表实现进出VM流量的有状态的ACL控制。状态还是通过linuxconntrack维护,OVS2.5版本起开始支持conntrack,在此之间需要通过LinuxBridge来使用ct,不可避免的对性能照成一定... 查看详情

网络安全学习--acl(代码片段)

ACLACL(AccessControlList)访问控制列表ACL是一种包过滤技术ACL基于IP包头的IP地址、四层TCP/UDP头部的端口号,基于三、四层过滤ACL在路由器上配置,也可在防火墙上配置(一般称为策略)ACL分类标准ACL扩展ACL标准ACL表号:1-99特... 查看详情

网络空间安全解析a模块解析(代码片段)

目录前言登录安全加固密码策略登入策略Web安全加固流量完整性保护中间件安全加固SSHVSFTPDHTTPD防火墙策略IP协议安全配置数据库加固前言博主来整活了。博主立下flag,这篇文章点赞量超出50,博主就发自己跳极乐净土的... 查看详情

系统安全保护以及防火墙策略管理

系统安全保护SELinux概述?Security-EnhancedLinux–美国NSA国家安全局主导开发,一套增强Linux系统安全的强制访问控制体系–集成到Linux内核(2.6及以上)中运行–RHEL7基于SELinux体系针对用户、进程、目录和文件提供了预设的保护策略,以及... 查看详情