Я ищу (1) самый безопасный и (2) самый простой способ, чтобы пользователь вводил пароль в командной строке bash и чтобы этот пароль стал частью стандартного ввода программы.
Вот как должен выглядеть stdin: {"username":"myname","password":"<my-password>"}
где <my-password>
то, что было напечатано в приглашении оболочки. Если бы у меня был контроль над программой stdin, то я мог бы изменить ее, чтобы безопасно запросить пароль и поставить его на место, но последующий поток - это стандартная команда общего назначения.
Я рассмотрел и отклонил подходы, которые используют следующее:
- пользователь вводит пароль в командной строке: пароль будет отображаться на экране, а также будет виден всем пользователям через «ps»
- интерполяция переменной оболочки в аргумент внешней программы (например,
...$PASSWORD...
): пароль все равно будет виден всем пользователям через «ps» - переменные среды (если они оставлены в среде): пароль будет виден всем дочерним процессам; даже заслуживающие доверия процессы могут раскрыть пароль, если они сбрасывают ядро или переменные среды как часть диагностики
- пароль хранится в файле в течение длительного периода времени, даже в файле с жесткими разрешениями: пользователь может случайно раскрыть пароль, а пользователь root может случайно увидеть пароль
Я приведу свое текущее решение в качестве ответа ниже, но с радостью выберу лучший ответ, если кто-то придет к нему. Я думаю, что должно быть что-то более простое, или, возможно, кто-то видит проблему безопасности, которую я пропустил.