我希望我的 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 守护程序本身发生冲突。