Безопасно ли хранить пароли в качестве переменных среды (а не в виде обычного текста) в файлах конфигурации?


Я работаю над несколькими приложениями в rails, django (и немного php), и одна из вещей, которые я начал делать в некоторых из них, - это хранение базы данных и других паролей в качестве переменных среды, а не обычного текста в определенных файлах конфигурации (или в settings.py, для приложений django).

Итак, я хотел бы знать-это безопасная практика? Является ли более безопасным хранить пароли в виде обычного текста в этих файлах (убедившись, конечно, не оставлять эти файлы в публичных репозиториях или что-то еще)?

5 65

5 ответов:

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

  • нет безопасности. Обычный текст. Кто что знает, где искать, может получить доступ к данным.
  • защита от запутывания. Вы храните данные (открытый текст) где-то сложно, как переменная среды, или в файле, который должен выглядеть как файл конфигурации. Злоумышленник в конечном итоге выяснит, что происходит, или споткнется через нее.
  • безопасность обеспечивается шифрованием, которое тривиально сломать, (подумайте, шифр Цезаря!).
  • безопасность обеспечивается шифрованием, которое может быть нарушено с некоторым усилием.
  • безопасность обеспечивается шифрованием, которое непрактично для взлома данного текущего оборудования.
  • самая безопасная система-это та, которую никто не может использовать! :)

переменные среды больше безопасный, чем текстовые файлы, потому что они летучие / одноразовые, не сохраняются; т. е. если вы устанавливаете только локальную переменную среды, например "set pwd=whatever", а затем запускаете скрипт, с чем-то, что выходит из командной оболочки в конце сценария, переменная больше не существует. Ваше дело попадает в первые два, что я бы сказал, довольно небезопасно. Если бы вы собирались это сделать, я бы не рекомендовал развертывать вне вашей непосредственной интрасети/домашней сети, а затем только для целей тестирования.

Как упоминалось ранее, оба метода не обеспечивают никакого уровня дополнительной "безопасности" после того, как ваша система скомпрометирована. Я считаю, что одной из самых сильных причин в пользу переменных среды является контроль версий: Я видел слишком много конфигураций базы данных и т. д. будучи случайно сохранены в системе управления версиями, как GIT для каждого другого разработчика, чтобы увидеть (и упс! это случилось и со мной ...).

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

в любое время вы должны хранить пароль, это небезопасно. Период. Нет никакого способа, чтобы сохранить пароль ООН-надежно зашифрованы. Теперь, какие из переменных среды и конфигурационных файлов более "безопасны", возможно, спорны. ИМХО, Если ваша система скомпрометирована, На самом деле не имеет значения, где она хранится, усердный хакер может отследить ее.

Извините, у меня не было достаточно репутации для комментариев, но я также хотел добавить, что если вы не будете осторожны, ваша оболочка может захватить этот пароль в своей истории команд. Так что работает что-то вроде $ pwd=mypassword my_prog вручную не так эфемерно, как вы могли бы надеяться.

Это зависит от вашей модели угроз.

вы пытаетесь помешать вашим пользователям разбрызгивать пароли по всем своим файловым системам, где они, вероятно, будут забыты и неправильно обработаны? Если да, то да, потому что переменные среды менее постоянны, чем файлы.

вы пытаетесь защитить от чего-то вредоносного, что нацелена ваша программа? Если да, то нет, потому что переменные среды не имеют такого же уровня управления доступом, что файлы.

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