返回介绍

7.3 安全

发布于 2024-01-20 13:59:06 字数 1645 浏览 0 评论 0 收藏 0

Redis的作者Salvatore Sanfilippo曾经发表过Redis宣言,其中提到Redis以简洁为美。同样在安全层面Redis也没有做太多的工作。

注释:①见http://oldblog.antirez.com/post/redis-manifesto.html。

7.3.1 可信的环境

Redis的安全设计是在“Redis运行在可信环境”这个前提下做出的,在生产环境运行时不能允许外界直接连接到Redis服务器上,而应该通过应用程序进行中转,运行在可信的环境中是保证Redis安全的最重要方法。

Redis的默认配置会接受来自任何地址发送来的请求,即在任何一个拥有公网IP的服务器上启动Redis服务器,都可以被外界直接访问到。要更改这一设置,在配置文件中修改bind参数,如只允许本机应用连接Redis,可以将bind参数改成:

bind 127.0.0.1

bind参数只能绑定一个地址,如果想更自由地设置访问规则需要通过防火墙来完成。

注释:②Redis可能会在2.8版本中支持绑定多个地址,参见https://github.com/antirez/redis/issues/274。

7.3.2 数据库密码

除此之外,还可以通过配置文件中的requirepass参数为Redis设置一个密码。例如:

requirepass TAFK(@~!ji^XALQ(sYh5xIwTn5D$s7JF

客户端每次连接到Redis时都需要发送密码,否则Redis会拒绝执行客户端发来的命令。例如:

redis>GET foo

(error) ERR operation not permitted

发送密码需要使用AUTH命令,就像这样:

redis>AUTH TAFK(@~!ji^XALQ(sYh5xIwTn5D$s7JF

OK

之后就可以执行任何命令了:

redis>GET foo

" 1"

由于Redis的性能极高,并且输入错误密码后Redis并不会进行主动延迟(考虑到Redis的单线程模型),所以攻击者可以通过穷举法破解Redis的密码(1秒内能够尝试十几万个密码),因此在设置时一定要选择复杂的密码。

提示 配置Redis复制的时候如果主数据库设置了密码,需要在从数据库的配置文件中通过masterauth参数设置主数据库的密码,以使从数据库连接主数据库时自动使用AUTH命令认证。

7.3.3 命名命令

Redis支持在配置文件中将命令重命名,比如将FLUSHALL命令重命名成一个比较复杂的名字,以保证只有自己的应用可以使用该命令。就像这样:

rename-command FLUSHALL oyfekmjvmwxq5a9c8usofuo369x0it2k

如果希望直接禁用某个命令可以将命令重命名成空字符串:

rename-command FLUSHALL ""

注意 无论设置密码还是重命名命令,都需要保证配置文件的安全性,否则就没有任何意义了。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文