You need to enable JavaScript to run this app. Redis 6.0.9执行ACL保存、CONFIG REWRITE时日志报Permission denied怎么办
优惠活动
大模型
产品
解决方案
定价
更多

Redis 6.0.9执行ACL保存、CONFIG REWRITE时日志报Permission denied怎么办

问题根因
  • 核心权限报错来自systemd服务沙箱的可写路径白名单约束。你的redis.service配置中仅通过ReadWriteDirectories给/var/lib/redis目录开放了读写权限,其余所有路径(包括你配置的ACL文件所在目录、/etc/redis下的redis.conf配置文件目录)都被沙箱限制为只读、无写入权限。
  • 这类沙箱权限的优先级高于Linux系统本身的文件属主/权限配置,哪怕你提前给目标目录配置了redis用户的读写权限,只要没加入可写白名单,写入操作依然会被拦截。
  • 对应日志中的两类权限报错:
    • 执行ACL SAVE时,Redis需要在你配置的ACL文件同目录下创建临时文件,写完后通过原子替换的方式更新正式ACL文件,这个临时文件的写入路径不在白名单内,直接被拦截抛出Permission denied
    • 执行CONFIG REWRITE时,Redis需要在redis.conf所在目录创建临时配置文件,完成配置内容写入后替换原redis.conf,同样因为路径不在可写白名单内失败
  • 日志里的NOTIFY_SOCKET not found属于附带告警,不属于核心权限问题:你的Redis编译时默认开启了systemd通知支持,但service文件未配置对应的服务类型,导致Redis启动时找不到和systemd通信的socket通道,不影响核心功能运行。
解决方法
  • 先确认Redis配置中两个关键路径的绝对位置:
    • redis.conf中aclfile配置项指向的ACL文件存储路径
    • 服务启动参数指定的redis.conf文件本身的路径
  • 修改redis.service里的ReadWriteDirectories配置,把上述两个文件所在的目录加入可写白名单。比如ACL文件和redis.conf都存放在/etc/redis/目录下,就把原配置行调整为:
    ReadWriteDirectories=-/var/lib/redis -/etc/redis
    注:每个路径前的-是systemd语法,代表路径不存在时不触发服务启动报错,不是权限标识。
  • 完成配置修改后,依次执行命令让配置生效:
    执行systemctl daemon-reload 重载systemd的服务配置缓存
    执行systemctl restart redis 重启Redis服务
  • 效果验证:重启后在redis-cli中重新执行ACL SAVE和CONFIG REWRITE操作,确认无权限报错即可。如果需要消除NOTIFY_SOCKET的启动告警,可在redis.service的[Service]段新增一行配置Type=notify,重启服务后告警会自动消失。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.14 11:54:10