作为服务运行时 Redis 无法启动 - 无法 chdir:权限被拒绝

Jac*_*ckW 4 redis

我已经运行了几个月从源代码构建的 redis,但今天我转而使用包管理器(在 Debian 上运行)。它运行良好,直到我将工作目录更改为/home/redis/server. 现在,当使用 将其作为服务启动时sudo service redis-server start,出现错误,并将以下内容添加到 redis 日志中:

Can't chdir to '/home/redis/server': Permission denied
Run Code Online (Sandbox Code Playgroud)

getfacl在 redis 目录上递归运行返回

# file: .
# owner: redis
# group: redis
user::rwx
group::rwx
other::rwx

# file: server
# owner: redis
# group: redis
user::rwx
group::rwx
other::rwx

# file: server/dump.rdb
# owner: redis
# group: redis
user::rwx
group::rwx
other::rwx
Run Code Online (Sandbox Code Playgroud)

如果我su要 redis 并手动运行它,使用/usr/bin/redis-server /etc/redis/redis.conf,它可以正常工作,所以它只会在尝试使用包含的 init.d 脚本时发生。

Jac*_*ckW 7

事实证明,Redis 中包含的 init 脚本实际上并未使用,而是使用/etc/systemd/system/redis.service. 此文件中有许多安全限制,包括ProtectHome=yes和限制可以写入的目录。我已修改此文件以注释掉ProtectHome=yes并添加一行ReadWriteDirectories=-/home/redis/server,现在它可以正常工作了。