пароль и безопасность


11

Я иногда делаю echo "secret" | mysql -u root -p .... Теперь я спорю о безопасности: может ли кто-нибудь перечислить все процессы, увидев пароль?

Для проверки я попытался, echo "test" | sleep 1000и команда echo с секретом не была видна в выводе "ps aux". Итак, я предполагаю, что это безопасно - но может ли эксперт по безопасности подтвердить это, пожалуйста? :)


Не может увидеть его в списке процессов при запуске бесконечного цикла. Хороший вопрос.
Тим

1
Кроме того, не забывайте, что все, что вы печатаете на большинстве оболочек, будет где-то храниться в файле истории (например .history).
Александр Берд

Ответы:


13

Ответ зависит от того, какую оболочку вы используете. Многие оболочки имеют echoкак встроена команда означает , что он не порождает отдельный процесс , и , следовательно , не будет отображаться в процессе листинга. Однако, если вы введете команду /bin/echoили, ./echoили вы отключите встроенные команды с помощью этой enable -n echoкоманды, оболочка не будет использовать свою встроенную команду и вместо этого будет использовать двоичную версию. Это будет отображаться в списке процессов.

Если вы используете двоичный файл, а не встроенную оболочку, команда echo будет отображаться столько времени, сколько потребуется для перемещения данных в буфер STDIN другого процесса. Этот буфер имеет конечный размер, поэтому, если в буфере больше данных, чем уместится, команде echo придется некоторое время зависать, пока другой процесс не сможет прочитать некоторые данные из буфера. В большинстве случаев (например, в двух приведенных выше примерах) этот период будет составлять микросекунды. Если вы вставляете дамп SQL размером 20 МБ в MySQL с помощью echo, это может занять больше времени. Независимо от того, насколько коротким является время, если вы используете двоичный файл вместо встроенной оболочки, и кто-то случайно выберет правильное время, он сможет увидеть процесс в списке процессов.

Вы можете избежать этого, поместив секретные данные в файл (с соответствующими разрешениями) и используя файл в качестве STDIN следующим образом:

mysql -u root -p < file_with_secret.sql

5
Имейте в виду, что при вводе пароля в командной строке он, скорее всего, будет сохранен в файле истории вашей оболочки, поэтому стоит проверить разрешение и содержимое файла истории.
aculich

3

Для случая mysql ~ / .my.cnf может использоваться для хранения секретов, т.е.

[client]
user = DBUSERNAME
password = DBPASSWORD
host = DBSERVER

[mysql]
database = DBNAME

1

Просто используйте

mysql -uroot -p

и нажмите ввод. Затем вам будет предложено ввести пароль, и он не будет виден ни в списке процессов, ни в файлах истории.


Данные, принятые в STDIN MySQL, - это команда (и), которую нужно выполнить после входа в систему. «Секрет» в вопросе - это не пароль.
Ладададада
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.