Я иногда делаю echo "secret" | mysql -u root -p ...
. Теперь я беспокоюсь о безопасности: может ли кто-нибудь, кто перечисляет все процессы, увидеть пароль?
Чтобы проверить, я пробовал с echo "test" | sleep 1000
и команда echo с секретом была не видно в выводе "ps aux". Я предполагаю, что это безопасно, но может ли эксперт по безопасности подтвердить это, пожалуйста? :)
Ответ на этот вопрос зависит от того, какую оболочку вы используете. Многие снаряды имеют echo
как встроенный означает, что она не порождает отдельный процесс и, следовательно, не будет отображаться в списке процессов. Однако, если вы наберете /bin/echo
или ./echo
или если вы отключите встроенные функции с помощью enable -n echo
, то оболочка не будет использовать свою встроенную команду, а вместо этого будет использовать двоичную версию. Это отобразится в списке процессов.
Если вы используете двоичный файл, а не встроенную оболочку, команда echo будет отображаться столько, сколько потребуется для перемещения данных в буфер STDIN другого процесса. Этот буфер имеет конечный размер, поэтому, если данных больше, чем уместится в буфере, команде echo придется некоторое время зависать, пока другой процесс не сможет прочитать некоторые данные из буфера. В большинстве случаев (например, в двух приведенных выше примерах) этот период времени составляет микросекунды. Если вы вставляете дамп SQL 20 МБ в MySQL с помощью echo, это может быть дольше. Независимо от того, насколько коротко время, если вы используете двоичный файл вместо встроенной оболочки, и кто-то случайно уловил время, они смогут увидеть процесс в списке процессов.
Вы можете избежать этого, поместив секретные данные в файл (с соответствующими разрешениями) и используя файл как STDIN следующим образом:
mysql -u root -p < file_with_secret.sql
Для случая mysql ~ / .my.cnf может использоваться для хранения секретов, т.е.
[client]
user = DBUSERNAME
password = DBPASSWORD
host = DBSERVER
[mysql]
database = DBNAME
Просто используйте
mysql -uroot -p
и нажмите Enter. Затем вам будет предложено ввести пароль, и он не будет отображаться ни в списке процессов, ни в файлах истории.