Передача пароля в переменную среды так же безопасна, как если бы программа прочитала его из файла. Только процессы, выполняющиеся под одним и тем же пользователем, могут читать среду процесса, и этим процессам разрешено в любом случае читать одни и те же файлы.
Обратите внимание, что это отличается от передачи пароля в командной строке. Аргументы командной строки доступны для чтения всем процессам, работающим на одном компьютере (за исключением мер по усилению защиты), а не только процессам, выполняющимся от одного и того же пользователя.
Если вы передаете переменную через среду, будьте осторожны, если программа запускает другие программы. Эти другие программы наследуют среду своих родителей. Так что не делайте этого, если вы боитесь, что другие программы могут случайно утечь содержимое своего окружения.
Недостаток в вашем сценарии - «создать подходящую переменную среды при настройке серверной системы». Переменная среды - это динамическое свойство процесса. Вы не можете создать его при настройке системы, если под настройкой вы подразумеваете что-то, что переживает перезагрузку. Возможно, вы имеете в виду, что администратор организовал присутствие этой переменной в среде при входе определенного пользователя. Это делается через файл конфигурации (обычно ~/.pam_environment
или ~/.profile
или файл, считанный из ~/.profile
). Таким образом, это решение, по сути, не перемещает пароль из файлов конфигурации.
Настройка параметров так, чтобы пароли находились в среде пользователя во время входа в систему, не очень хорошая идея. Это означает, что каждый процесс, запущенный от имени этого пользователя, будет иметь секрет, поэтому он уязвим для утечки в любом месте.
Пароль должен быть помещен в файл, кроме файлов конфигурации, которые находятся под контролем версий, и от обычных механизмов развертывания. Можно в любой момент ввести пароль в среду, если это удобно, но это следует делать для как можно меньшего набора программ.