1

Мне бы хотелось, чтобы мое веб-приложение PHP (запускаемое от имени пользователя apache) подключалось к redis через сокет UNIX. Поэтому я подумал о том, чтобы запустить redis как пользователь apache и права доступа к сокету могут быть 0700, принадлежащими apache . Но я также хочу сокет в /var/run , который принадлежит root и не доступен для записи apache .

Поэтому, если я запускаю redis от имени root , мое PHP-приложение не сможет подключиться, пока я не открою разрешения сокета, чего я бы предпочел не делать, если смогу избежать этого.

Как мне выровнять этот круг? (Redis управляется systemd)

1 ответ1

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=

Каталог может быть автоматически предварительно создан с правильными разрешениями при загрузке (с помощью конфигурации tmpfiles.d во всех версиях systemd) или при запуске службы (с помощью параметра RuntimeDirectory = в вашей службе в systemd ≥v211). Очень вероятно, что ваш дистрибутив уже сделал это.

Обратите внимание , что это будет более безопасным для запуска демонов под отдельной UIDs, но сделать штуцера группы -достижима одной из групп, apache является членом. Это позволит IPC-соединениям по назначению, но все же не позволит Apache возиться с самим демоном Redis.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .