Как небезопасно использование пароля MySQL из командной строки?

12

У меня есть несколько инструментов BASH, которые используют эту mysql -e "{command}"функцию. Ввод пароля каждый раз, когда я использую эти инструменты, будет проблематичен, поэтому, чтобы избежать записи пароля в текстовом файле с кодом, я сохраняю его в памяти (используя read -s) и читаю BASH при каждом запуске команд.

Mysql по-прежнему считает, что пароль передается через командную строку (потому что, так сказать, это так), и по-прежнему выдает ошибку «Использование пароля в интерфейсе командной строки может быть небезопасным».

Для моих целей мне не нужно подавлять это сообщение. Что мне нужно знать, так это то, что может сделать его небезопасным? Пароль никогда не виден физически, поэтому серфинг по плечу не может этого сделать, и даже тот, кто угадал мой пароль SSH, не сможет этого сделать, поскольку он хранится в памяти, а не в самих скриптах. Возможна ли атака «человек посередине» или нечто подобное?

Андрей
источник
8
Поместите его в ~/.my.cnf пример. Вы можете указать для каждого хоста, [client<hostname>]например, [clientlocalhost]инструменты MySQL будут использовать его автоматически, так что это будет проще и безопаснее
AmazingDreams
Как вы bashпрочитали это, когда запускаете команду? Если вы это сделаете, mysql -p"$pass"то любой может увидеть это в ps.
Бармар

Ответы:

26

Любой, кто может видеть переменные вашей среды (включая программы, которые вы запускаете), может видеть пароль. И любой, кто может просматривать ваши процессы, может видеть командную строку, используемую для их запуска, включая параметры.

Так что для ящика, в который вы входите только, риск, вероятно, незначителен. Но для целенаправленной атаки на вас лично это тривиальный вектор атаки в общей схеме вещей.

длинная шея
источник
22
А также кто-то просматривает ваши ~/.historyи т. Д.
ivanivan
Не говоря уже о HTOP и подобных топовых утилитах до того, как они были замаскированы. Многие сценарии также не использовали переменные среды $ PASS и т. Д. На том основании, что пользователь был только для чтения или не имел прав доступа. Для отдельного пользователя это может не иметь значения.
Маккензм
1
Где вопрос говорит что-нибудь о переменных среды? Переменные оболочки не помещаются в среду, если вы не экспортируете их.
Бармар