Сохранение паролей с использованием переменных среды ОС

03 августа 2023

Что нам делать со всеми секретными строками, такими как пароли или приватные ключи, которые есть в нашем коде?

Самый простой и неправильный способ обработки этих важных учетных данных — жестко закодировать их в нашем исходном коде. Когда вы отправляете код в репозиторий, вы делитесь своими секретами со всеми остальными участниками вашевашего проекта и не только. Даже если вы работаете в одиночку, это может вызвать проблемы, поскольку любой, кто увидит ваш код, также получит доступ к вашей секретной информации.

Храните приваные данные в переменных окружения

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

Линукс

Использование файла.bash_profile учетной записи

Чтобы сохранить пароль или приватный ключь в переменной среды в Linux Mac), вам необходимо изменить.bash_profile файл, который находится в вашем домашнем каталоге. Вам нужно открыть терминал и перейти в домашний каталог.

$ cd ~

Откройте.bash_profile файл для редактирования, например, выполнив команду:

$ nano .bash_profile

Впишите имена и значения приватных переменных в файл:

export USER="username"
export PASSWORD="password"

Примечание. С обеих сторон знака "=" не должно быть пробелов.

Сохраните файл nano, нажав ctrl + x и Y.
Примените изменения с помощью команды:

$ source .bash_profile

Использование отдельного .env файла

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

Решение состоит в том, чтобы хранить секреты в отдельном .env файле.
Файл .env содержит только текст, где в каждой строке указано одно значение переменной среды.
Создайте .env файл в своем проекте и добавьте свои секретные ключи или пароли:

USER=username
PASSWORD=password

Важно: Обязательно добадобавьте имя файла .env  в файл .gitignore.

Теперь вам нужно установить модуль python-dotenv. Python-dotenv — это модуль Python, который позволяет вашему приложению Python  считывать .env файл. Этот пакет будет искать .env и, если он его найдет, предоставит приложению содержащиеся в нем переменные.

$ pip install -U python-dotenv

Windows

Чтобы сохранить пароли и секретные ключи в переменных среды в Windows, вам нужно будет открыть Расширенные настройки системы.

 

Вы можете перейти к Панель управления -> Система и Безопасность -> Система -> Дополнительные параметры системы.

  

 

 

В дополнительных параметрах системы нажмите Переменные среды.

Здесь мы можем добавить новые переменные уровня пользоватля и уровня системы. Добавим переменную среды пользователя, щелкнув кнопку Создать... под пользовательскими переменными.

В новом окне добавьте Имя переменной и Значение переменной и нажмите ОК.

Теперь нажмите ОК в окне Переменные среды , чтобы сохранить изменения.

 

Доступ к переменным среды

Чтобы получить доступ к этим переменным в нашем скрипте Python, нам нужно импортировать модуль os.

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

Если вы используете модуль .python-dotenv, дополнительно нужно импортировать модель и загрузить переменные из файла.

from dotenv import load_dotenv
load_dotenv()

либо 

from pathlib import Path # python3 only
env_path = Path('.') / '.env'
load_dotenv(dotenv_path=env_path)

 

И далее считать значение переменных

import os
user_name = os.environ.get('USER')
password = os.environ.get('password')

 

В случае проекта Django вы должны добавить приведенный выше скрипт вверху wsgi.py и в manage.py файл.

# settings.py
import os
SECRET_KEY = os.getenv("EMAIL")
DATABASE_PASSWORD = os.getenv("DATABASE_PASSWORD