Uruchamianie zrzutu mysql w zadaniu cron bez ujawniania haseł


11

chcę biec

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

w pracy crona. Jak mogę to zrobić bezpiecznie?

Wiem, że mógłbym umieścić polecenie tutaj, ale każdy, kto ma dostęp do maszyny, zobaczy go od razu za pośrednictwem crontab. Czy jest na to lepszy sposób?


1
Twój przykład jest niepoprawny, powinien być -pP4SSw0rd bez spacji.
Simon Woodside,

Odpowiedzi:


14

Jak stwierdzono w man mysqldump: patrz 6.1.2.1. Wytyczne dla użytkowników końcowych dotyczące bezpieczeństwa haseł w podręczniku MySQL.

Plik opcji jest najbezpieczniejszym zakładem, zwłaszcza zgodnie z powyższym odniesieniem. Podanie go jako zwykłego tekstu w crontab nie jest dobre, zwłaszcza że domyślnie wiersz poleceń procesu jest widoczny psdla innych użytkowników. To samo dotyczy zmiennych środowiskowych, jak wyjaśniono w odnośniku.

Odpowiednia część podręcznika MySQL:

Przechowuj hasło w pliku opcji. Na przykład w systemie Unix możesz podać swoje hasło w [client]sekcji .my.cnfpliku w katalogu domowym:

[client]
password=your_pass

Aby zachować hasło, plik nie powinien być dostępny dla nikogo oprócz ciebie. Aby to zapewnić, ustaw tryb dostępu do pliku na 400lub 600. Na przykład:

shell> chmod 600 .my.cnf

Aby nazwać z wiersza polecenia konkretny plik opcji zawierający hasło, użyj --defaults-file=file_nameopcji, gdzie file_namejest pełna nazwa ścieżki do pliku. Na przykład:

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

Sekcja 4.2.3.3, „Korzystanie z plików opcji” , omawia pliki opcji bardziej szczegółowo.

Zobacz także /programming//q/10725209 .


Wydaje się, że polecenie ps zaciemnia hasło za pomocą jednego x: ps: mysqldump -uroot -px xx mydb. Nie twierdzę jednak, że jest to dobra ochrona (jeśli wpiszesz zadania, hasło zostanie ujawnione zwykłym tekstem).
ling

4

Uruchom cronjob jako konkretnego użytkownika i użyj prostej logiki Bash, aby wyodrębnić hasło z pliku tekstowego przechowywanego gdzieś w systemie z uprawnieniami, które pozwalają tylko użytkownikowi (lub grupie) na dostęp.

PASS=`cat /path/to/pwdfile`

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

Jeśli więc cronjob działa jako „przykład” użytkownika, właścicielem pliku powinna być „przykład: przykład” i mieć uprawnienie 0400.

Możesz także osiągnąć podobną funkcję, używając pliku .my.cnf na poziomie użytkownika .


1
read PASS < /path/to/pwdfilejest idiomatycznie czystszy, aby zrobić to samo (chyba, jak sądzę; zastosowanie ma superuser.com/q/323060/49184 ).
Daniel Andersson

* „jest idiomatycznie czystszym sposobem” ... Zagubiony w edycji.
Daniel Andersson

Ktoś, kto ma nawet podstawowe zrozumienie Bash, powinien wiedzieć, co się dzieje z tym kotem. :)
Garrett

1
To prawda, powiedziałbym nawet, że jest to najczęstszy sposób na zrobienie tego, ale nadal jest to trochę mdłości :-). Jeśli ktoś sprawi, że UUOC stanie się nawykiem, będzie gryźć, gdy plik jest większy niż ARGMAX, wymaga to dodatkowego procesu zamiast korzystania z wbudowanej powłoki, może kusić konstrukcje takie jak for i in `cat file`; do ...własna tablica problemów itp. Ale oczywiście, ponieważ z większością rzeczy: jeśli ktoś wie, co się dzieje, może robić to, co chce. Nie biorę tu udziału w krucjacie, niezależnie od tego, jak mogłoby się to wydawać :-D.
Daniel Andersson

0

Każdy, kto ma dostęp do urządzenia, ma taki sam poziom dostępu, /var/spool/cron/crontabs/na /var/lib/mysqljaki pozwalasz. Ustaw odpowiednie uprawnienia do katalogów i gotowe. Każda osoba z dostępem roota ma bezpośredni dostęp do plików bazy danych bezpośrednio. Każdy, komu nie ufasz, że ma dostęp do komputera, nie powinien mieć do niego dostępu.

Zwykle ludzie widzą tylko swoje cronjobs przez crontab -l.


0

Dla celów tworzenia kopii zapasowych, rozważ posiadanie użytkownika mysql w trybie tylko do odczytu

CREATE USER bUser IDENTIFIED BY 'p4ss';

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

mysqldump wymaga tylko SELECTi LOCK TABLESuprawnień do wykonywania swojej pracy.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.