Безопасно ли экспортировать переменную, содержащую пароль, а затем сбросить ее?

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

read -s PASSPHRASE export PASSPHRASE program some_option program some_other_option program yet_another_option PASSPHRASE="" 

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

Правильно ли я, или я делаю это неправильно?

Меня беспокоят другие пользователи в системе (исключая root ) и другие программы, запущенные в моей учетной записи пользователя.

Определите "безопасный"

  1. Корень всегда может читать все, поэтому ничто не защищено от корня
  2. Env vars для пользователя U безопасны для других пользователей
  3. Env vars для пользователя U и программы P не защищены от запуска программы Q пользователем U

Таким образом, root может читать этот env var в течение короткого периода времени, а другие программы, выполняемые одним и тем же пользователем, могут читать этот env var в течение короткого периода времени

Решения:

  1. Собственный корень или доверительный корень
  2. Не запускайте другие программы с одним и тем же пользователем
  3. Запуск этих программ в качестве их собственного пользователя

Если вы не хотите экспортировать env var, вы можете вызвать свои команды следующим образом:

 $PASSPHRASE command-name -option 

Можете сделать вещи немного более безопасными, но другие программы, запускаемые одним и тем же пользователем, все еще могут видеть их с небольшим обманом (ktrace / strace, debugging)