pg_dump не пробежит PHP

Этот вопрос был рассмотрен в различных других сообщениях, но они, кажется, не выручают меня.

Моя проблема - то, что я запускаю следующий скрипт от терминала, pg_dump работы оператора:

$strBK = '/usr/bin/pg_dump --host localhost --port 5432 --username "postgres" --role "mizk" --no-password  --format plain --data-only --inserts --column-inserts --verbose --file "/home/khalid/tmp/esm/x1" --table "public.\"tblCustomerCategories\"" --table "public.\"tblSellers\"" "dbESM" 2>&1';
    //User has submitted form. Start making backup.
    echo "ok " . shell_exec($strBK);

Но от php, я получаю следующую ошибку:

 ok pg_dump: [archiver (db)] connection to database "dbESM" failed:
 fe_sendauth: no password supplied
 pg_dump: *** aborted because of error

Как показан, я не прошу пароль, но сценарий сообщает об ошибке об аутентификации.

Мое предположение - это выполнения PHP под www-data в то время как терминальный дамп работает как пользователь компьютера. Таким образом, как я устраняю эту проблему безопасным способом?

0
задан 10 July 2018 в 15:03

1 ответ

Можно протестировать теорию (www-data не может выполнить команду) путем выполнения:

sudo -iu www-data /usr/bin/pg_dump ...

Это, вероятно - проблема и существует много различных обходных решений с различными разветвлениями безопасности.

  • Создайте сценарий, который выполняет Ваш дамп, принадлежавший Вашему пользователю, с примененным setuid (chmod 4755 <filename>). Кто бы ни работает, это выполнит его как владельца файла. Существуют очевидные разветвления безопасности, если Ваш сценарий доступен для редактирования PHP также, или Ваш сценарий является так или иначе годным для использования.

  • Используйте посредника. Вы могли записать в файл от PHP и считать его из задания крона (работающий как правильный пользователь). Если файл существует, он выполняет Ваш дамп и удаляет файл. Это довольно безопасно, но это очевидно только столь же мгновенно как Ваш интервал крона. Альтернативы включают вещи как Сельдерей, который является более промышленным для пакетной обработки или задержки задач, дополнительно другим пользователям.

  • Пост-ГРЭС удара в разрешение www-data получите доступ к данным. Я предложил бы делать это через пароль, но это все еще собирается позволить взломанный www-data доступ к чему-либо Вы даете его.

pg_dump команда может также иметь некоторые особенности. Существует несколько потоков вокруг SE, который мог бы помочь с ним конкретно:

0
ответ дан 4 August 2019 в 12:31

Другие вопросы по тегам:

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