Разрешения для сокетов Redis перехвачены между / var / run и http

424
Johannes Ernst

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

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

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

1

1 ответ на вопрос

1
grawity

Обычно сокеты IPC живут не /run/напрямую, а в подкаталоге, принадлежащем демону, например в under /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.

Похожие вопросы