После понимания проблемы с использованием пароля в командной строке мне нужно найти способ ввода программы с паролем, без проблем (без записи пароля где-либо).
У меня есть скрипт bash, который автоматически устанавливает весь сервер LAMP из источника: Apache, FastCGI, PHP и MySQL. Эти установки требуют пароль, особенно MySQL.
Как сделать скрипт полностью автоматизированным, не раскрывая пароль?
Редактировать (9 июня, 3:55 UTC):
я вызываю mysql с паролем в командной строке через root:
root@dor-desktop:/home/dor# PASS=`cat /home/dor/tmpf/pass`
root@dor-desktop:/home/dor# mysql -u root -p"$PASS"
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 6
(PASS = "p4ssw0rd" в нашем случае)
И я выполняю ps aux | grep mysql
через моего обычного пользователя (dor), который не показывает мне пароль !
(Некоторые из) ps
вывод:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 3562 0.0 0.0 34156 2864 pts/0 S+ 05:53 0:00 mysql -u root -px xxxxxx
Как это возможно?
Ответы:
Что касается вашего обновления:
Когда процесс запускается, он имеет выделенную область памяти, где хранятся аргументы, и int, который сообщает, сколько аргументов было передано.
MySQL проверяет, был ли пароль передан в командной строке
-p
, и если он был скопирован в новую переменную, которая не видна, то перезапишите эту область памяти с помощьюx
«es».Проще говоря, например:
Вы можете найти его, например, в
client/mysqladmin.cc
исходном коде:При
ps
запуске он читает область памяти аргументов (argv[N]
), и, таким образом, это такxxxx
.В течение очень короткого времени пароль виден, но только на несколько циклов ЦП.
Вы можете обновить пароль MySQL, используя специальную
--init-file
опцию и процедуру. C.5.4.1.2. Сброс пароля root: Unix SystemsРедактировать:
Как @Gilles сказать, что вы можете
echo
,printf
или использоватьhere
документ из сценария.Вы также можете добавить это в
.my.cnf
свой домашний каталог или во ( временный ) файл и использовать--defaults-extra-file
опцию. (Поверьте, вы должны добавить эту опцию на ранней стадии в командной строке.) При желании также можете включить пользователя. Также обратите внимание на дополнительные в имени опции, если вы не хотите использовать только этот файл в качестве конфигурации:При желании
[client]
группировка позволяетmysqld
пропустить настройку.Можно также использовать
MYSQL_PWD
переменную окружения, но это никогда не должно использоваться, поскольку вы можете перечислить окружение, во многихps
реализацияхps -e
, в/proc/<PID>/environ
файле в Linux и т. Д.Подробнее по теме здесь .
Возможно, вы также захотите взглянуть на MySQL Configuration Utility, которая позволяет хранить пароль в зашифрованном файле в вашем домашнем каталоге -
.mylogin.cnf
.источник
mysql-init
файле с паролем, который хранится в переменной bash? (не раскрываясь)echo 'password=p4ssw0rd' >>mysql.cnf
безопасно, потому чтоecho
является встроенным, поэтому пароль не появляется в командной строке любого процесса. Здесь документ также безопасен.Типичным решением является чтение пароля из файла или из стандартного ввода (или из другого файлового дескриптора, который должен быть передан в качестве параметра).
источник
Некоторые программы (например, командная строка
ftp
) считывают пароли из/dev/tty
специального файла для процесса, который представляет процесс, управляющий TTY. Это позволяет программе не выводить пароль обратно на экран и получить немного больше уверенности в том, откуда взялся пароль.источник