博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CentOS7.X安装Redis-4.0.8以及Redis集群搭建
阅读量:5746 次
发布时间:2019-06-18

本文共 5059 字,大约阅读时间需要 16 分钟。

安装redis

  1. 安装前的准备

    yum install \vim \wget \make \gcc \gcc-c++ \automake \autoconf \-y \
  2. 下载解压并安装

    cd /rootwget http://download.redis.io/releases/redis-4.0.8.tar.gztar -zxzf redis-4.0.8.tar.gzcd redis-4.0.8make PREFIX=/usr/local/redis/ install
  3. 创建配置中要求的数据文件存储位置

    mkdir /datamkdir /data/redismkdir /usr/local/redis/log
  4. 添加修改配置文件

    cp ./redis.conf /usr/local/redisvim /usr/local/redis/redis.conf# IP绑定bind 127.0.0.1 192.168.0.111# 保护模式(开启条件为各redis之间可以互相通信,做集群不可开启)protected-mode yes# 访问端口port 6379# 连接超时,单位S,0为不启用超时timeout 0# 以守护进程运行daemonize yes# 数据文件路径dir /data/redis# 进程ID文件的路径pidfile /usr/local/redis/log/redis.pid# 日志文件路径logfile /usr/local/redis/log/redis.log# 开启键过期删除通知notify-keyspace-events ExESC:wq# 以下安全配置选项仅作参考    # 禁用部分危险命令    rename-command FLUSHALL ""    rename-command CONFIG   ""    rename-command EVAL     ""    # 添加访问密码    requirepass ********    # IP绑定本机    bind 127.0.0.1
  5. 性能优化

    # 编辑/etc/rc.localvim /etc/rc.localecho never > /sys/kernel/mm/transparent_hugepage/enabledESC:wq# 添加/etc/rc.local执行权限chmod +x /etc/rc.d/rc.local# 编辑/etc/sysctl.confvim /etc/sysctl.confvm.overcommit_memory = 1net.core.somaxconn = 1024ESC:wq# 立即解决echo never > /sys/kernel/mm/transparent_hugepage/enabledecho 1024 > /proc/sys/net/core/somaxconnsysctl vm.overcommit_memory=1sysctl -p
  6. 修改目录归属

    useradd -s /sbin/nologin -M redischown -R redis:redis /data/redischown -R redis:redis /usr/local/redis
  7. 启动redis并设置开机启动

    # 进入单元文件目录cd /etc/systemd/system# 创建redis单元文件,格式为: [单元文件名].[单元文件类型]vim redis.service[Unit]Description=Start redis on boot.After=default.target network.target[Service]User=redisGroup=redisType=forkingPIDFile=/usr/local/redis/log/redis.pidExecStart=/usr/local/redis/bin/redis-server /usr/local/redis/redis.confExecReload=/bin/kill -s HUP $MAINPIDExecStop=/bin/kill -s QUIT $MAINPIDPrivateTmp=falseRestart=always[Install]WantedBy=multi-user.targetESC:wq# 修改文件权限为只有root用户可以编辑该文件chown -R root:root /etc/systemd/system/redis.servicechmod -R 644 /etc/systemd/system/redis.service# 更新systemdsystemctl daemon-reloadsystemctl enable redissystemctl start redis
  8. 存入数据

    /usr/local/redis/bin/redis-cli -h 127.0.0.1set num 123saveget numquit
  9. 批量删除匹配规则数据

    redis-cli keys [匹配规则]|xargs redis-cli del

Redis宕机 aof文件损坏 启动失败

  1. 拷贝aof文件
  2. 修复坏损的aof文件

    redis-check-aof --fix [aof文件名]
  3. 重新启动Redis

Redis漏洞webshell的利用

  1. Redis该漏洞用到的原理如下

    1. redis原生支持通过'redis-cli>config set'在不重启redis服务的情况
      下,动态修改配置dir、dbfilename;
    2. redis的配置中如果指定'dir /www/'和'dbfilename test.php',则当执
      行save命令时,会在/www/目录下生成一个数据存储文件test.php,虽然该文

    件是一个二进制文件,但其内容中包含保存的数据的值,如果/www/目录为web

    目录,则/www/test.php则会被人利用,成为入侵你服务器的入口;

  2. 漏洞举例(这是一个负面教材)

    1. redis以超级管理员用户root运行
    2. Nginx以超级管理员用户root启动,子进程也以root运行
    3. web服务器为nginx,并做如下配置:

      server {    listen       x;    server_name  xxx.xxx.com;    root         /www;    location / {        index    index.php index.html index.htm;    }    location ~ \.php$ {        fastcgi_index  index.php;        fastcgi_pass   127.0.0.1:9000;        fastcgi_param  SCRIPT_NAME      $fastcgi_script_name;        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;        include        fastcgi_params;    }}
    4. 通过redis-cli执行了以下命令

      config set dir /www/config set dbfilename test.phpset test "
      "save
    5. 这时候可怕的事情出现了

      1. 在/www/目录下,存在test.php文件,它可以通过访问到
      2. 如果现在访问那么xxx就会被以root用户执行(xxx为任意linux命令)

Redis漏洞webshell的防范

  1. 不要线上使用redis的web管理工具
  2. redis以低权限用户运行(如rediser等让人想不到的用户名)
  3. redis仅允许通过本机和内网访问(bind 127.0.0.1 192.168.0.12/24)
  4. redis禁用config命令(在配置文件中可以禁用rename-command CONFIG "")
  5. web服务子进程以低权限用户运行(因为webshell的运行用户为web服务的子进程)

redis集群(cluster方式)

  1. 集群前的配置(单机两服务测试6379,6380)

    # 内网IP:192.168.0.100
  2. 修改redis.conf

    vim /usr/local/redis/redis.conf# 启用clustercluster-enabled yes# 调用cluster配置文件cluster-config-file nodes-6379.conf# 集群超时cluster-node-timeout 15000# 关闭宕机全停cluster-require-full-coverage no# 集群从属元素个数cluster-slave-validity-factor 10# 从机数最低迁移值(master至少有两台slave,才能做slave迁移)cluster-migration-barrier 1ESC:wq
  3. 配置文件添加

    yum install rubygem install rediscp /usr/local/redis/redis.conf /usr/local/redis/redis.conf.backupcp /usr/local/redis/redis.conf /usr/local/redis/redis-6379.confcp /usr/local/redis/redis.conf /usr/local/redis/redis-6380.confmkdir /usr/local/redis/data/6379mkdir /usr/local/redis/data/6380
  4. 修改redis-6379.conf

    vim /usr/local/redis/redis-6379.confunixsocket /usr/local/redis/data/6379/redis.sockpidfile /usr/local/redis/log/redis_6379.pidlogfile /usr/local/redis/log/redis_6379.logdir /usr/local/redis/data/6379/bind 192.168.0.100port 6379ESC:wq
  5. 修改redis-6380.conf

    vim /usr/local/redis/redis-6380.confunixsocket /usr/local/redis/data/6380/redis.sockpidfile /usr/local/redis/log/redis_6380.pidlogfile "/usr/local/redis/log/redis_6380.log"dir /usr/local/redis/data/6380/bind 192.168.0.100port 6380ESC:wq
  6. 修改开机启动

    vim /etc/rc.local/usr/local/redis/bin/redis-server /usr/local/redis/redis-6379.conf/usr/local/redis/bin/redis-server /usr/local/redis/redis-6380.confESC:wq
  7. 创建cluster

    cd /root/redis/src/# 查看帮助./redis-trib.rb help# 添加绑定./redis-trib.rb create --replicas 1 192.168.0.100:6379 192.168.0.100:6380
  8. 集群测试

    /usr/local/redis/bin/redis-cli -h 192.168.0.100 -p 6379 -c
  9. 正常关闭(不要强制关闭)

    /usr/local/redis/bin/redis-cli -h 192.168.0.100 -p 6379 shutdown
  10. 领支付宝红包支持作者

    扫码领支付宝红包

转载地址:http://kqazx.baihongyu.com/

你可能感兴趣的文章
oracle 强行杀掉一个用户连接
查看>>
Git提交本地库代码到远程服务器的操作
查看>>
让你快速上手的Glide4.x教程
查看>>
浮动和清除(闭合)浮动
查看>>
LR录制脚本时IE打不开的原因
查看>>
Sublime Text 2.0.2,Build 2221注册码
查看>>
最长递增子序列 动态规划
查看>>
原生CSS设置网站主题色—CSS变量赋值
查看>>
webpack 4.0 中 clean-webpack-plugin 的使用
查看>>
POJ 2236 Wireless Network (并查集)
查看>>
python分类
查看>>
GitBlit (1)-- 在linux 安装 GitBlit 并运行
查看>>
程序是如何执行的(一)a=a+1
查看>>
BZOJ - 3578: GTY的人类基因组计划2
查看>>
【http】post和get请求的区别
查看>>
TFS强制撤销某个工作区的文件签出记录
查看>>
EL表达式无法显示Model中的数据
查看>>
ps6-工具的基础使用
查看>>
linux下使用过的命令总结(未整理完)
查看>>
时间助理 时之助
查看>>