• 问题描述
Redis 默认情况下,会绑定在 0.0.0.0:6379,这样将会将 Redis 服务暴露到公网上,如果在没有开启认证的情况下,可以导致任意用户在可以访问目标服务器的情况下未授权访问 Redis 以及读取 Redis的数据。未授权用户可直接覆盖/root/.ssh/authorized_keys 上传公钥直接用root账号登陆ssh服务器。
  • 入侵特征:
  1. Redis 可能执行过 FLUSHALL 方法,整个 Redis 数据库被清空
  2. 在 Redis 数据库中新建了一个名为 crackit(网上流传的命令指令) 的键值对,内容为一个 SSH 公钥。
  3. 在 /root/.ssh 文件夹下新建或者修改了 authorized_keys 文件,内容为 Redis 生成的 db 文件,包含上述公钥
  • 解决方式:

1. bind指定IP监听

修改redis绑定的IP 如果只在本机使用redis服务那么只要绑定127.0.0.1 如果其他主机需要访问redis服务那么只绑定客户主机所在网络的接口 最好不要绑定0.0.0.0 另外需要通过主机内置的防火墙如iptables,或者其他外置防火墙禁止非业务主机访问redis服务。

# vim /usr/local/redis/redis.conf
bind 127.0.0.1 

2.设置访问密码

在 redis.conf 中找到“requirepass”字段,取消注释并在后面填上你需要的密码。 注:修改redis的配置需要重启redis才能生效。

# vim /usr/local/redis/redis.conf
requirepass  yourpassword

3. 使用普通用户启动redis

使用普通用户启动redis,并且禁止该用户启动shell,禁止使用root用户启动redis
useradd redis -s /sbin/nologin -M
cp -a ./redis /usr/local/
cd /usr/local/redis

vim ./redis.conf  #编辑redis配置文件变更以下内容
#将`pidfile /var/run/redis.pid`修改为`pidfile /usr/local/redis/run/redis.pid`
#将`dir ./`修改为`dir vim ./redis.conf  #编辑redis配置文件变更以下内容
dir /usr/local/redis/dbredis
mkdir run
mkdir dbredis
chown -R redis. /usr/local/redis/
# cat /usr/lib/systemd/system/redis.service 
[Unit]
Description=Redis
After=network.target
[Service]
ExecStart=/usr/local/redis/src/redis-server /usr/local/redis/redis.conf  --daemonize no
ExecStop=/usr/local/redis/src/redis-cli -h 127.0.0.1 -p 6379 shutdown
PrivateTmp=true
User=redis
Group=redis
[Install]
WantedBy=multi-user.target

redis在线查看和修改配置

查看配置文件中的监听地址
127.0.0.1:6379> CONFIG GET bind
1) "bind"
2) "127.0.0.1 "

#查看dir
127.0.0.1:6379> CONFIG GET dir
1) "dir"
2) "/usr/local/redis/dbredis"

#查看所有配置
127.0.0.1:6379> CONFIG GET *

#修改配置,即时生效
127.0.0.1:6379> CONFIG SET requirepass 123
OK

#测试修改后连接
[root@db01 redis]# redis-cli -a 123
127.0.0.1:6379> set age 18
OK

查看redis.conf配置文件

可以看出,配置文件中是没有改变的,只要redis不重启,密码就是新改的。

最后修改:2020 年 04 月 27 日 11 : 07 AM
如果觉得我的文章对你有用,请随意赞赏