У меня есть веб-приложение, предназначенное для развертывания на выделенном хосте для каждого из моих клиентов. Чтобы безопасно управлять секретными ключами, учетными данными клиента и т. Д., Я обратился к переменным среды.
Где я должен определять переменные среды в производственной среде?
Я знаю несколько возможностей: /etc/profile
, ~/.bashrc
, и подобные файлы загружаются при запуске терминального сеанса; Я не использовал их, потому что не знаю, считается ли это лучшей практикой. Я пробовал хранить их в systemd
config для моего приложения, но это делает их доступными только для основного процесса, поэтому миграция баз данных при развертывании изменений кода работает не так хорошо. Я знаю несколько инструментов, которые, кажется, «волшебным образом» обрабатывают переменные окружения за вас, но давайте предположим, что я не использую один из них; Я хочу обрабатывать их вручную в моих собственных сценариях установки и развертывания. Я также заинтересован в сохранении секретов в секрете, поэтому безопасность того, где хранятся переменные среды, также является для меня проблемой.
Я предлагаю поместить переменные среды в или несколько файлов в /etc/profile.d/*.sh. Например, /etc/profile.d/app.sh. Легче вытолкнуть, когда вы контролируете весь файл и автоматически загружаются оболочками входа в Debian и Red Hat.
Принадлежащие root, группа www-data и запрет на чтение другими ограничивают доступ для чтения к файлам. Знайте, что в Linux переменные среды видны через / proc // environment, но только для владельца процесса и root.
Возможно, вы захотите дополнительно ограничить дополнительные файлы профиля для паролей или других конфиденциальных данных. Возможно, назовите его /etc/profile.d/appsecret.sh.