Redis 套接字权限被困在 /var/run 和 http 之间

Redis 套接字权限被困在 /var/run 和 http 之间

我希望我的 PHP Web 应用程序(以用户 身份运行apache)通过 UNIX 套接字连接到 redis。因此,我考虑以用户身份运行 redis,apache并且套接字权限可以是 0700 所有者apache。但我还想要 中的套接字/var/run,它由 拥有root且不可由 写入apache

因此,如果我以 身份运行 redis root,我的 PHP 应用程序将无法连接,除非我打开套接字权限,如果可以避免的话,我宁愿不这样做。

我该如何解决这个问题?(Redis 由 systemd 管理)

答案1

通常 IPC 套接字并不直接存在于守护进程中/run/,而是存在于守护进程拥有的子目录中 – 例如在 下/run/redis/

drwxr-xr-x 37 root  root  920 Jun  1 08:14 /run/
drwxr-xr-x  2 redis redis  40 Jun  1 08:14 /run/redis/
srw-rw-rw-  1 redis redis   0 Jun  1 08:14 /run/redis/socket=

该目录可以在启动时自动预先创建正确的权限(由临时文件配置在所有 systemd 版本中),或者在启动服务时(通过运行时目录=systemd ≥v211 中服务中的参数)。 您的发行版很可能已经这样做了。

请注意,在单独的 UID 下运行守护进程会更安全,但要使套接字团体- 可供其成员之一访问apache。这将允许 IPC 连接,但仍将阻止 Apache 与 Redis 守护程序本身发生冲突。

相关内容