У меня есть пароль MySQL, сохраненный в файле foo.php
, например P455w0rd
, когда я пытаюсь его использовать:
$ cat foo.php | grep '$dbpwd=' | cut -d '"' -f 2 | mysql -U root -p mydb -h friendserver
Enter password: (holds)
$ echo P455w0rd | mysql -u root -p mydb -h friendserver
Enter password: (holds)
Оба варианта по-прежнему запрашивают пароль. Как правильно отправить пароль stdin
?
-p
паролем и паролем не должно быть пробелов ./proc
может тривиально прочитать их, пока работает программа . Это то, что~/.my.cnf
нужно, правильно chmod'ed до 0600Ответы:
Вы должны быть очень осторожны при передаче паролей в командные строки, так как, если вы не будете осторожны, вы в конечном итоге оставите его открытым для прослушивания с помощью таких инструментов, как
ps
.Самый безопасный способ сделать это было бы создать новый конфигурационный файл и передать его с
mysql
помощью либо--defaults-file=
или--defaults-extra-file=
опции командной строки.Разница между ними заключается в том, что последний читается в дополнение к файлам конфигурации по умолчанию, тогда как в первом используется только один файл, переданный в качестве аргумента.
Ваш дополнительный файл конфигурации должен содержать что-то похожее на:
Убедитесь, что вы защищаете этот файл.
Затем запустите:
источник
argv
чтобы перезаписать параметры, заданные для-p
флага. По крайней мере, это то, что заключено здесь, вместе с другой соответствующей информацией: unix.stackexchange.com/questions/78757/…--login-path
том, что он поддерживается. Это не намного лучше, чем это, но это немного менее простой текст (хотя барьер для преобразования содержимого в открытый текст низкий).export MYSQL_PWD=muhpassword
) и выполните вашу команду без-p
. См. Переменные программной среды MySQL . Несмотря на страшные предупреждения руководства , это довольно безопасно . Если вы не запустите странный варез в той же оболочке позже. Итак, мы бежим:MYSQL_PWD=$(cat foo.php etc) mysql -u foouser -h barhost
mysql
Утилита клиента может взять пароль в командной строке либо с-p
или--password=
опциями.Если вы используете
-p
, после буквы опции не должно быть пробелов:Я предпочитаю длинные опции в скриптах, так как они самодокументируются:
источник
/proc/$pid/cmdline
либо с помощьюps
команды. Это правда, что mysql перезаписывает пароль в argv во время запуска, но всегда есть временное окно, в котором другой пользователь может наблюдать пароль. Кроме того, в некоторых системах перезапись argv может не работать.Если вы хотите начать
mysql
с предоставленного пароля, сначала вам нужно получить пароль в переменной:Затем вы можете начать свою
mysql
команду с:источник
MYSQL_PWD
переменная окружения, которая читается,mysql
если вы не укажете-p
. А в Linux это безопасный метод, потому что окружение пользователя не может быть прочитано другими непривилегированными пользователями - в отличие от вектора аргумента.