Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

Ответ 3

В любое время, когда вы должны хранить пароль, он небезопасен. Период. Невозможно безопасно хранить незашифрованный пароль. Теперь какая из переменных окружения и файлов конфигурации более "безопасна", возможно, спорна. IMHO, если ваша система скомпрометирована, на самом деле не имеет значения, где она хранится, прилежный хакер может отслеживать ее.

Ответ 4

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