Я хочу бежать
mysqldump -u aUser -p P4SSw0rd --all-databases > backup.sql
в постоянной работе. Как я могу сделать это безопасно?
Я знаю, что могу поставить команду прямо там, но любой, у кого есть доступ к машине, сразу увидит ее через crontab. Есть ли лучший способ сделать это?
Ответы:
Как указано в
man mysqldump
: см. 6.1.2.1. Руководство для конечного пользователя по безопасности паролей в справочном руководстве MySQL.Файл опций является самой безопасной ставкой, не в последнюю очередь в соответствии с приведенной выше ссылкой. Предоставлять его в виде открытого текста в crontab нехорошо, не в последнюю очередь, поскольку командная строка процесса по умолчанию видна
ps
другим пользователям. То же самое на самом деле относится к переменным среды, как описано в ссылке.Соответствующая часть справочного руководства по MySQL:
Также см. Https://stackoverflow.com/q/10725209 .
источник
Запустите cronjob от имени определенного пользователя и используйте простую логику Bash, чтобы извлечь пароль из открытого текста, хранящегося где-то в системе, с разрешениями, которые позволяют только пользователю (или, возможно, группе) получить к нему доступ.
Таким образом, если cronjob запускается от имени пользователя «example», владельцем файла должен быть «example: example» с разрешением 0400.
Вы также можете достичь аналогичной функции, используя пользовательский уровень .my.cnf .
источник
read PASS < /path/to/pwdfile
идиоматически чище, чтобы делать то же самое (возможно, я думаю; superuser.com/q/323060/49184 применимо).ARGMAX
, он использует дополнительный процесс вместо использования встроенной оболочки, он может соблазнить такие конструкции, как, например,for i in `cat file`; do ...
с собственным набором проблем и т. Д. Но, конечно, как с большинством вещей: если кто-то знает, что происходит, он свободен делать по своему усмотрению. Я здесь не в крестовом походе, независимо от того, как это может выглядеть.Любой, у кого есть доступ к машине, имеет такой же уровень доступа,
/var/spool/cron/crontabs/
какой/var/lib/mysql
вы им разрешаете. Итак, установите правильные разрешения на каталоги и все готово. Любой, имеющий root-доступ, имеет прямой доступ к файлам базы данных напрямую. Тот, кому вы не доверяете, чтобы иметь доступ к машине, вообще не должен иметь доступа к машине.Обычно люди видят только своих cronjobs через
crontab -l
.источник
В целях резервного копирования рассмотрите возможность иметь пользователя только для чтения в MySQL, например, так
mysqldump требует только
SELECT
иLOCK TABLES
привилегий, чтобы делать свою работу.источник