You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何限制Redis的redis-cli用户仅可执行指定命令

可行解决方案

Redis不同版本对应不同的实现方案,你可以根据自己环境的实际版本选择:

方案1:Redis 6.0及以上版本使用原生ACL(最推荐)

Redis 6.0开始内置了ACL权限控制能力,完全满足命令级权限隔离需求,操作步骤如下:

  • 登录Redis高权限账号,执行命令创建仅监控权限的专用用户,示例规则如下:
    ACL SETUSER monitor_ops on >自定义安全密码 +info +cluster nodes +cluster info -@all
    规则说明:先通过-@all禁用所有命令权限,再单独给用户放开允许执行的监控类命令即可,也可以通过-@write直接批量禁用所有写类命令、-@dangerous批量禁用所有高危管理类命令,减少规则配置量。
  • 权限配置持久化:先在redis.conf中配置ACL规则存储路径aclfile /etc/redis/users.acl,重启Redis后执行ACL SAVE即可将当前配置的用户规则永久保存,避免重启后规则丢失。
  • 受限用户登录时使用如下命令即可,仅能执行被允许的命令:
    redis-cli -u redis://monitor_ops:自定义安全密码@127.0.0.1:6379

方案2:Redis 6.0以下版本适配方案

RHEL7默认软件源提供的Redis版本为3.x,无原生ACL功能,如果暂时无法升级Redis版本,可采用以下两种方式实现需求:

方式1:全局命令禁用/重命名

如果不需要区分多用户权限,仅需限制所有redis-cli访问用户的权限,可以直接修改redis.conf配置,禁用所有禁止执行的读写类命令:

rename-command SET ""
rename-command GET ""
rename-command DEL ""
rename-command HSET ""
# 其余读写类命令按上述格式依次配置即可,保留允许的监控类命令不变

修改配置后重启Redis生效,所有用户执行被禁用的命令时都会返回报错。

方式2:Linux系统层封装redis-cli wrapper

如果需要区分高权限管理用户和低权限监控用户,可以在系统层做权限隔离:

  • 新建专门的监控系统用户,例如redis_monitor
  • 编写shell wrapper脚本,存放在/usr/local/bin/redis-monitor-cli,内容示例:
#!/bin/bash
ALLOWED_CMDS=("cluster nodes" "info" "cluster info")
read -p "输入要执行的Redis命令: " input_cmd
# 匹配允许的命令
match=0
for cmd in "${ALLOWED_CMDS[@]}"; do
  if [[ "$input_cmd" == "$cmd"* ]]; then
    match=1
    break
  fi
done
if [[ $match -eq 1 ]]; then
  redis-cli $input_cmd
else
  echo "权限不足,仅允许执行以下命令:${ALLOWED_CMDS[*]}"
  exit 1
fi
  • 给脚本设置执行权限,同时修改原生redis-cli的权限,仅允许root和指定高权限用户可执行:
    chmod 750 /usr/bin/redis-cli && chown root:redis_admin /usr/bin/redis-cli
  • 将redis_monitor用户的默认shell设置为该wrapper脚本,该用户登录后只能执行允许的监控命令,无法调用原生redis-cli执行其他操作。

内容的提问来源于stack exchange,提问作者Ashish Shukla

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 02:48:02