Запуск mysql дампа в роботі cron без викриття паролів


11

Я хочу бігти

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

в роботі з крон. Як я можу це зробити надійно?

Я знаю, що я міг би поставити команду прямо там, але кожен, хто має доступ до машини, побачив би це відразу через crontab. Чи є кращий спосіб це зробити?


1
Ваш приклад невірний, він повинен бути -pP4SSw0rd без місця.
Саймон Вудсайд

Відповіді:


14

Як зазначено в 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, «Використання опціональних файлів», більш детально розглядає файли опцій.

Також дивіться /programming//q/10725209 .


Здається, що команда ps придушує пароль одним x: ps: mysqldump -uroot -px xx mydb. Я не кажу, що це хороший захист (якщо ви вводите завдання, то пароль розкривається у простому тексті).
лин

4

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

PASS=`cat /path/to/pwdfile`

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

Отже, якщо cronjob працює як "example" користувача, право власності на файл має бути "example: example" та дозволено 0400.

Ви також можете досягти подібної функції, використовуючи .my.cnf на рівні користувача .


1
read PASS < /path/to/pwdfileце ідіоматичний прибиральник, що робить те саме (можливо, мабуть; застосовується superuser.com/q/323060/49184 ).
Даніель Андерссон

* "- це ідіоматично чистіший спосіб" ... Загублений в редагуванні.
Даніель Андерссон

Хтось із навіть найосновнішим розумінням Баша повинен мати можливість бачити, що відбувається з цією кішкою. :)
Гаррет

1
Щоправда, я б навіть сказав, що це найпоширеніший спосіб зробити це, але це все ще трохи зору :-). Якщо хтось робить UUOC звичкою, він кусається, коли файл більше, ніж ARGMAXпотрібен додатковий процес замість використання вбудованої оболонки, він може спокусити такі конструкції, як for i in `cat file`; do ...власний масив проблем тощо. Але, звичайно, з більшості речей: якщо хтось знає, що відбувається, то вільний робити, як обирає. Я тут не на хрестовому поході, незалежно від того, як це може виглядати :-D.
Даніель Андерссон

0

Кожен, хто має доступ до машини, має той самий рівень доступу /var/spool/cron/crontabs/, що і /var/lib/mysqlви дозволяєте їм мати. Отже, встановіть належні дозволи для каталогів і зробіть. Усі, хто має root-доступ, мають прямий доступ до файлів бази даних безпосередньо. Той, кому ви не довіряєте мати доступ до машини, не повинен взагалі мати доступ до машини.

Зазвичай люди бачать лише власні кронштейни через 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привілеїв, щоб виконувати свою роботу.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.