Şifreleri göstermeden bir cron işinde mysql dökümü çalıştırma


11

koşmak istiyorum

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

bir cron işinde. Bunu nasıl güvenli bir şekilde yapabilirim?

Komutu oraya koyabileceğimi biliyorum, ama makineye erişimi olan herkes hemen crontab aracılığıyla görecekti. Bunu yapmanın daha iyi bir yolu var mı?


1
Örneğin yanlış, boşluksuz -pP4SSw0rd olmalıdır.
Simon Woodside

Yanıtlar:


14

Belirtildiği gibi man mysqldump: bkz. 6.1.2.1. MySQL başvuru kılavuzunda Parola Güvenliği için Son Kullanıcı Yönergeleri .

Bir seçenek dosyası, en azından yukarıdaki referansa göre değil, en güvenli bahistir. Crontab'da düz metin olarak vermek iyi değildir, en azından işlem komut satırı varsayılan olarak psdiğer kullanıcılar tarafından görülebilir . Aynı şey referansta açıklandığı gibi ortam değişkenleri için de geçerlidir.

MySQL referans kılavuzunun ilgili kısmı:

Şifrenizi bir seçenek dosyasında saklayın. Örneğin, Unix'te, şifrenizi ana dizininizdeki dosyanın [client]bölümünde listeleyebilirsiniz .my.cnf:

[client]
password=your_pass

Parolayı güvende tutmak için, dosyaya kendiniz dışında kimse erişemez. Bunu sağlamak için dosya erişim modunu 400veya olarak ayarlayın 600. Örneğin:

shell> chmod 600 .my.cnf

Komut satırından parolayı içeren belirli bir seçenek dosyasını adlandırmak için, dosyanın tam yol adı olan --defaults-file=file_nameseçeneği kullanın file_name. Örneğin:

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

Kısım 4.2.3.3, “Seçenek Dosyalarını Kullanma” , seçenek dosyalarını daha ayrıntılı olarak ele alır.

Ayrıca bkz. Https://stackoverflow.com/q/10725209 .


Ps komutu bir x: ps: mysqldump -uroot -px xx mydb ile şifreyi gizliyor gibi görünüyor. Yine de iyi bir koruma olduğunu söylemiyorum (iş yazarsanız, şifre düz metin olarak görünür).
ling

4

Cronjob'ı belirli bir kullanıcı olarak çalıştırın ve yalnızca kullanıcının (veya belki de grubun) erişmesine izin veren izinlerle sistemde bir yerde saklanan bir düz metin dosyasından parolayı çıkarmak için bazı basit Bash mantığını kullanın.

PASS=`cat /path/to/pwdfile`

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

Eğer cronjob kullanıcı 'example' olarak çalışıyorsa, dosyanın sahipliği "example: örnek" olmalı ve 0400'e izin verilmelidir.

Kullanıcı düzeyinde bir .my.cnf kullanarak da benzer bir işlev elde edebilirsiniz .


1
read PASS < /path/to/pwdfileaynı şeyi yapmak için deyimsel olarak daha temizdir (muhtemelen sanırım; superuser.com/q/323060/49184 geçerlidir).
Daniel Andersson

* "deyimsel olarak daha temiz bir yoldur" ... Düzenlemede kayboldum.
Daniel Andersson

En temel Bash anlayışına sahip olan biri, o kedi ile neler olup bittiğini görebilmelidir. :)
Garrett

1
Doğru, hatta bunu yapmanın en yaygın yolu olduğunu söyleyebilirim, ama yine de biraz göze çarpan :-). Biri yaparsa UUOC dosya daha büyük olduğu zaman bir alışkanlık onu ısıracak ARGMAXo gibi yapıları kışkırtmak olabilir, bu yerleşik bir kabuk kullanılarak ekstra bir süreç yerine alır for i in `cat file`; do ...gibi vb sorunların Ama tabii kendi dizisi ile çoğu şeyle: eğer kişi ne olduğunu biliyorsa, kişi istediği gibi yapmakta özgürdür. Nasıl göründüğüne bakılmaksızın, burada bir haçlı seferi yapmıyorum :-D.
Daniel Andersson

0

Makineye erişimi olan herkes için aynı düzeyde erişimi vardır /var/spool/cron/crontabs/için /var/lib/mysqlbunları için izin. Bu nedenle, dizinler üzerinde uygun izinleri ayarlayın ve bitti. Kök erişimi olan herkes veritabanı dosyalarına doğrudan erişebilir. Makineye erişebileceğine güvenmediğiniz herkesin makineye erişimi olmamalıdır.

Genellikle insanlar sadece kendi cronjobs'larını görürler crontab -l.


0

Yedekleme amacıyla, mysql'de salt okunur bir kullanıcıya sahip olmayı düşünün.

CREATE USER bUser IDENTIFIED BY 'p4ss';

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

mysqldump işini yapmak için sadece SELECTve LOCK TABLESayrıcalıklar gerektirir .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.