11

Я хочу бежать

mysqldump -u aUser -p P4SSw0rd --all-databases > backup.sql

в постоянной работе. Как я могу сделать это безопасно?

Я знаю, что могу поставить команду прямо там, но любой, кто имеет доступ к машине, сразу увидит ее через crontab. Есть ли лучший способ сделать это?

4 ответа4

15

Как указано в man mysqldump: см. 6.1.2.1.Руководство для конечного пользователя по безопасности паролей в справочном руководстве MySQL.

Файл опций является самой безопасной ставкой, не в последнюю очередь в соответствии с приведенной выше ссылкой. Предоставлять его в виде открытого текста в crontab нехорошо, не в последнюю очередь, поскольку командная строка процесса по умолчанию видна через ps для других пользователей. То же самое на самом деле относится к переменным среды, как описано в ссылке.

Соответствующая часть справочного руководства по MySQL:

Сохраните ваш пароль в файле опций. Например, в Unix вы можете указать свой пароль в разделе [client] файла .my.cnf в вашем домашнем каталоге:

[client]
password=your_pass

Чтобы сохранить пароль в безопасности, файл не должен быть доступен никому, кроме вас самих. Чтобы обеспечить это, установите режим доступа к файлу на 400 или 600 . Например:

shell> chmod 600 .my.cnf

Чтобы присвоить в командной строке конкретный файл параметров, содержащий пароль, используйте параметр --defaults-file=file_name , где file_name - это полный путь к файлу. Например:

shell> mysql --defaults-file=/home/francis/mysql-opts

Раздел 4.2.3.3, «Использование файлов опций» , обсуждает файлы опций более подробно.

Также см. Https://stackoverflow.com/q/10725209.

4

Запустите cronjob от имени определенного пользователя и используйте простую логику Bash, чтобы извлечь пароль из открытого текста, хранящегося где-то в системе, с разрешениями, которые позволяют только пользователю (или, возможно, группе) получить к нему доступ.

PASS=`cat /path/to/pwdfile`

 mysqldump -u aUser -p $PASS--all-databases > backup.sql

Таким образом, если cronjob запускается от имени пользователя «example», владельцем файла должен быть «example:example» с разрешением 0400.

Вы также можете добиться аналогичной функции, используя пользовательский уровень .my.cnf.

0

Любой, имеющий доступ к машине, имеет тот же уровень доступа к /var/spool/cron/crontabs/ что и /var/lib/mysql вы им разрешаете. Итак, установите правильные разрешения на каталоги и все готово. Любой, имеющий root-доступ, имеет прямой доступ к файлам базы данных напрямую. Тот, кому вы не доверяете, чтобы иметь доступ к машине, вообще не должен иметь доступа к машине.

Обычно люди видят только свои собственные cronjobs через crontab -l .

0

В целях резервного копирования рассмотрите возможность иметь пользователя только для чтения в MySQL, например, так

CREATE USER bUser IDENTIFIED BY 'p4ss';

GRANT SELECT ON *.* TO bUser@localhost;
GRANT LOCK TABLES ON *.* TO bUser@localhost;

Для работы mysqldump требуются только привилегии SELECT и LOCK TABLES .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .