Permissões de soquete Redis capturadas entre / var / run e http

1

Gostaria que meu aplicativo da Web PHP (executado como usuário apache ) se conectasse aos redis por meio de um soquete UNIX. Então, pensei em executar os redis como usuário apache e as permissões de soquete podem ser 0700 de apache . Mas também quero o soquete em /var/run , que pertence a root e não pode ser gravado por apache .

Portanto, se eu executar redis como root , meu aplicativo PHP não poderá se conectar, a menos que eu abra as permissões de soquete, o que prefiro não fazer se puder evitá-lo.

Como faço para quadrar esse círculo? (Redis é gerenciado pelo systemd)

    
por Johannes Ernst 01.06.2018 / 06:59

1 resposta

1

Normalmente, os soquetes IPC não vivem em /run/ diretamente, mas em um subdiretório de propriedade do daemon - como em /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=

O diretório pode ser automaticamente pré-criado com as permissões corretas na inicialização (por um tmpfiles .d em todas as versões do systemd), ou ao iniciar o serviço (pelo RuntimeDirectory = parâmetro no seu serviço no systemd ≥v211). É muito provável que sua distribuição já tenha feito isso.

Note que seria mais seguro executar os daemons sob UIDs separados, mas tornar o soquete grupo -acessível por um dos grupos dos quais apache é membro. Isso permitirá conexões IPC como pretendido, mas ainda impedirá o Apache de mexer com o próprio daemon do Redis.

    
por 01.06.2018 / 07:13