Я пишу приложение python, которое использует служебную программу командной строки (пропозициональную, чтобы ее нельзя было изменить), чтобы выполнить часть своей работы. Проблема в том, что я должен передать пароль в качестве аргумента командной строки для инструмента, который легко будет видеть любой пользователь, выполняющий "ps ax". Как можно безопасно отправлять пароль в инструмент командной строки из python (или оболочки script)?
Отправка пароля в инструменты командной строки
Ответ 1
Если приложение имеет какой-либо интерактивный режим, вы можете использовать что-то вроде pyexpect.
Если он принимает только пароли в командной строке, приложение было DESIGNED уязвимым для "ps ax", как вы ожидаете преодолеть оригинальный плохой дизайн? Это проприетарный, жалобы должны идти к виновному ^ H ^ H ^ H ^ H ^ H ^ Hauthor.
Ответ 2
Если пароль принят только в командной строке, вам не повезло. Вы абсолютно уверены, что нет возможности отправить пароль по-другому? Если вы можете отправить его по процессу stdin
, вы можете поговорить с ним через трубку и безопасно отправить пароль таким образом.
Ответ 3
Возможно, вам удастся получить дополнительную защиту за счет зашифрованного пароля и передачи зашифрованного пароля, и программа может дешифровать его. По крайней мере, не будет плавающего текстового пароля. Я использовал этот метод при запуске процесса через другой процесс и передаче его аргументов. Однако это может быть неосуществимо в вашем случае.
Ответ 4
Запишите еще один python script, который будет принимать пароль из командной строки с помощью getpass.getpass()
и сохранить его в переменной. Затем вызовите команду из script с этой переменной с паролем в качестве параметра.
Ответ 5
Вы можете принудительно создать оболочку встроенной оболочки, как показано ниже.
somecommand --password=$(echo "Enter Password: " >&2;read -s PASSWORD;echo $PASSWORD)
Ввод пароля заполнит команду перед ее выполнением
Пароль не появится в истории вашей оболочки
Но он появится в вашем выводе "ps"
Ответ 6
Как насчет этого в Bash:
command_asking_for_password < <(command_that_prints_a_password; printf "\r")