Назад | Перейти на главную страницу

Как избежать / процитировать знак доллара `$` в env var в пуле php-fpm?

Поскольку symfony4 использует dotenv и переменные окружения для конфигурации, они также необходимы на сервере.

для передачи переменных в конфигурацию пула можно добавить следующее:

example-pool.conf:

env[APP_ENV] = 'prod'

Проблема заключается в следующем:

Все переменные $ VARIABLE берутся из текущего "окружения".

поскольку почти каждая строка зашифрованного / хешированного пароля содержит $, я столкнулся с проблемой, что переменные среды, содержащие $ пусты.

php bin/console security:encode-password
...snip...
------------------ ---------------------------------------------------------------
  Key                Value
 ------------------ ---------------------------------------------------------------
  Encoder used       Symfony\Component\Security\Core\Encoder\BCryptPasswordEncoder
  Encoded password   $2y$12$RbCl.SsH6yFDHtTq1Bc1xeK3cdkWbtZEmzyVTnMzlOEuVyC5EySg.
 ------------------ ---------------------------------------------------------------
...snip...

конечно, я могу использовать nginx для передачи моих переменных окружения в php-fpm

nginx-vhost.conf:

fastcgi_param APP_ENV "prod";

но в этом случае мне придется реорганизовать рецепт марионетки, поэтому я ищу альтернативный способ установить это в php-fpm

Я попытался использовать одинарные, двойные кавычки и избежать $

example-pool.conf:

...snip...
env[PASSWORD1] = $2y$12$RbCl.SsH6yFDHtTq1Bc1xeK3cdkWbtZEmzyVTnMzlOEuVyC5EySg.
env[PASSWORD2] = "$2y$12$RbCl.SsH6yFDHtTq1Bc1xeK3cdkWbtZEmzyVTnMzlOEuVyC5EySg."
env[PASSWORD3] = '$2y$12$RbCl.SsH6yFDHtTq1Bc1xeK3cdkWbtZEmzyVTnMzlOEuVyC5EySg.'
env[PASSWORD4] = "'$2y$12$RbCl.SsH6yFDHtTq1Bc1xeK3cdkWbtZEmzyVTnMzlOEuVyC5EySg.'"
env[PASSWORD5] = '"$2y$12$RbCl.SsH6yFDHtTq1Bc1xeK3cdkWbtZEmzyVTnMzlOEuVyC5EySg."'
env[PASSWORD6] = "\$2y\$12\$RbCl.SsH6yFDHtTq1Bc1xeK3cdkWbtZEmzyVTnMzlOEuVyC5EySg."
env[PASSWORD7] = '\$2y\$12\$RbCl.SsH6yFDHtTq1Bc1xeK3cdkWbtZEmzyVTnMzlOEuVyC5EySg.'
env[PASSWORD8] = \$2y\$12\$RbCl.SsH6yFDHtTq1Bc1xeK3cdkWbtZEmzyVTnMzlOEuVyC5EySg.
env[PASSWORD9] = $$2y$$12$RbCl.SsH6yFDHtTq1Bc1xeK3cdkWbtZEmzyVTnMzlOEuVyC5EySg.
env[PASSWORD10] = '$$2y$$12$RbCl.SsH6yFDHtTq1Bc1xeK3cdkWbtZEmzyVTnMzlOEuVyC5EySg.'
...snip...

приводит к следующему выводу в php test.php содержащий простой:

вывод:

  "PASSWORD10" => ""
  "PASSWORD9" => ""
  "PASSWORD8" => "\$2y\$12\$RbCl.SsH6yFDHtTq1Bc1xeK3cdkWbtZEmzyVTnMzlOEuVyC5EySg."
  "PASSWORD7" => "\$2y\$12\$RbCl.SsH6yFDHtTq1Bc1xeK3cdkWbtZEmzyVTnMzlOEuVyC5EySg."
  "PASSWORD6" => ""
  "PASSWORD5" => ""$2y$12$RbCl.SsH6yFDHtTq1Bc1xeK3cdkWbtZEmzyVTnMzlOEuVyC5EySg.""
  "PASSWORD4" => "'$2y$12$RbCl.SsH6yFDHtTq1Bc1xeK3cdkWbtZEmzyVTnMzlOEuVyC5EySg.'"
  "PASSWORD3" => ""
  "PASSWORD2" => ""
  "PASSWORD1" => ""

отметил, что это связано с безопасностью, потому что это приводит к использованию слабых (буквенных) текстовых паролей.

связанные, но не такие, как

побочный вопрос, поскольку процесс php-fpm запускается как пользователь, определенный в userкакие файлы среды загружаются? проверено .bashrc и .profile так как это места, где php-cli читает переменные env, я был бы рад объявить их только в одном месте и использовать их из cli и fpm. этот вопрос уже косвенно задается здесь Передача переменных среды в PHP CLI и FPM

подумайте о создании отчета об ошибке на php, поскольку обходной путь к этому приводит к прямому использованию файлов dotenv:

Переменные среды для приложений PHP