- 问题描述
Redis 默认情况下,会绑定在 0.0.0.0:6379,这样将会将 Redis 服务暴露到公网上,如果在没有开启认证的情况下,可以导致任意用户在可以访问目标服务器的情况下未授权访问 Redis 以及读取 Redis的数据。未授权用户可直接覆盖/root/.ssh/authorized_keys 上传公钥直接用root账号登陆ssh服务器。
- 入侵特征:
- Redis 可能执行过 FLUSHALL 方法,整个 Redis 数据库被清空
- 在 Redis 数据库中新建了一个名为 crackit(网上流传的命令指令) 的键值对,内容为一个 SSH 公钥。
- 在 /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不重启,密码就是新改的。
1 条评论
优秀如斯OωO