Você pode testar sua teoria ( www-data
não pode executar o comando) executando:
sudo -iu www-data /usr/bin/pg_dump ...
Esse provável é o problema e há diversas soluções diferentes com ramificações de segurança diferentes.
-
Crie um script que execute o seu dump, de propriedade do usuário, com o setuid aplicado (
chmod 4755 <filename>
). Quem quer que execute isso irá executá-lo como o proprietário do arquivo. Existem ramificações de segurança óbvias se o seu script é editável pelo PHP também, ou o seu script é de alguma forma explorável. -
Use um intermediário. Você pode gravar em um arquivo do PHP e lê-lo em um cron-job (rodando como o usuário certo). Se o arquivo existir, ele executa o despejo e exclui o arquivo. Isso é bastante seguro, mas é obviamente tão instantâneo quanto seu intervalo cron. As alternativas incluem coisas como Aipo , que é um pouco mais industrial para agrupar ou adiar tarefas, opcionalmente para outros usuários.
-
Bata o Postgres em permitir que
www-data
acesse os dados. Sugiro fazer isso por meio de uma senha, mas isso ainda permitirá um acessowww-data
hackeado a qualquer coisa que você der a ele.
O comando pg_dump
também pode ter algumas peculiaridades. Existem alguns tópicos em torno do SE que podem ajudá-lo especificamente: